devi dichiarare il tuo buffer nella sezione bss e la bufsize in data
section .data
bufsize dw 1024
section .bss
buf resb 1024
Ohh, sarà divertente.
Il linguaggio assembly non ha variabili. Quelli sono un costrutto linguistico di livello superiore. Nel linguaggio assembly, se vuoi variabili, le crei tu stesso. Salita. Entrambi i modi. Nella neve.
Se vuoi un buffer, dovrai utilizzare una regione del tuo stack come buffer (dopo aver chiamato le istruzioni appropriate per l'impostazione del frame dello stack) o utilizzare una regione dell'heap. Se il tuo heap è troppo piccolo, dovrai creare un'istruzione SYSCALL (un altro INT 80h) per chiedere di più al sistema operativo (tramite sbrk).
Un'altra alternativa è conoscere il formato ELF e creare una variabile globale nella sezione appropriata (penso sia .data).
Il risultato finale di uno qualsiasi di questi metodi è una posizione di memoria che puoi utilizzare. Ma le tue uniche vere "variabili" a cui sei abituato dall'ormai meraviglioso mondo di C sono i tuoi registri. E non ce ne sono molti.
L'assemblatore potrebbe aiutarti con utili macro. Leggi la documentazione dell'assemblatore; Non li ricordo dalla parte superiore della mia testa.
La vita è dura laggiù a livello di ASM.
Dopo la chiamata a open, l'handle del file è in eax. Lo sposti giustamente eax in ebx, dove la chiamata a read lo cercherà. Sfortunatamente, a questo punto l'hai già sovrascritto con 3, la chiamata di sistema per la lettura.