vous devez déclarer votre buffer dans la section bss et le bufsize dans data
section .data
bufsize dw 1024
section .bss
buf resb 1024
Ohh, ça va être amusant.
Le langage d'assemblage n'a pas de variables. Il s'agit d'une construction de langage de niveau supérieur. En langage assembleur, si vous voulez des variables, vous les créez vous-même. Montée. Dans les deux sens. Dans la neige.
Si vous voulez un tampon, vous devrez soit utiliser une région de votre pile comme tampon (après avoir appelé les instructions de configuration de cadre de pile appropriées), soit utiliser une région sur le tas. Si votre tas est trop petit, vous devrez créer une instruction SYSCALL (un autre INT 80h) pour demander plus au système d'exploitation (via sbrk).
Une autre alternative est de se renseigner sur le format ELF et de créer une variable globale dans la section appropriée (je pense que c'est .data).
Le résultat final de chacune de ces méthodes est un emplacement mémoire que vous pouvez utiliser. Mais vos seules vraies "variables" comme vous en avez l'habitude dans le monde maintenant merveilleux du C sont vos registres. Et ils ne sont pas très nombreux.
L'assembleur peut vous aider avec des macros utiles. Lisez la documentation de l'assembleur ; Je ne m'en souviens pas de mémoire.
La vie est dure là-bas au niveau ASM.
Après l'appel à open, le descripteur de fichier est dans eax. Vous le déplacez à juste titre eax vers ebx, où l'appel à read le cherchera. Malheureusement, à ce stade, vous l'avez déjà remplacé par 3, l'appel système pour la lecture.