Sie müssen Ihren Puffer im bss-Abschnitt und die Puffergröße in data
deklarierensection .data
bufsize dw 1024
section .bss
buf resb 1024
Ohh, das wird lustig.
Die Assemblersprache hat keine Variablen. Dabei handelt es sich um ein übergeordnetes Sprachkonstrukt. In der Assemblersprache, wenn Sie Variablen wollen, erstellen Sie sie selbst. Bergauf. Beide Wege. Im Schnee.
Wenn Sie einen Puffer benötigen, müssen Sie entweder einen Bereich Ihres Stacks als Puffer verwenden (nachdem Sie die entsprechenden Stack-Frame-Setup-Anweisungen aufgerufen haben) oder einen Bereich auf dem Heap verwenden. Wenn Ihr Heap zu klein ist, müssen Sie eine SYSCALL-Anweisung (ein weiterer INT 80h) machen, um das Betriebssystem um mehr zu bitten (über sbrk).
Eine andere Alternative besteht darin, sich mit dem ELF-Format vertraut zu machen und im entsprechenden Abschnitt eine globale Variable zu erstellen (ich glaube, es ist .data).
Das Endergebnis jeder dieser Methoden ist ein Speicherplatz, den Sie verwenden können. Aber Ihre einzigen wirklichen "Variablen", wie Sie es aus der jetzt wunderbar erscheinenden Welt von C gewohnt sind, sind Ihre Register. Und es gibt nicht sehr viele davon.
Der Assembler kann Ihnen mit nützlichen Makros helfen. Lesen Sie die Assembler-Dokumentation; Ich kann mich aus dem Stegreif nicht an sie erinnern.
Das Leben dort unten auf ASM-Ebene ist hart.
Nach dem Aufruf von open steht das Dateihandle in eax. Sie verschieben es zu Recht nach ebx, wo der Aufruf zum Lesen danach sucht. Leider haben Sie ihn an dieser Stelle bereits mit 3, dem Syscall zum Lesen, überschrieben.