musíte deklarovat svůj buffer v sekci bss a bufsize v data
section .data
bufsize dw 1024
section .bss
buf resb 1024
Oh, to bude zábava.
Jazyk symbolických instrukcí nemá proměnné. Jedná se o jazykový konstrukt vyšší úrovně. V assembleru, pokud chcete proměnné, uděláte si je sami. Do kopce. Oba způsoby. Ve sněhu.
Pokud chcete vyrovnávací paměť, budete muset jako vyrovnávací paměť použít buď určitou oblast svého zásobníku (po vyvolání příslušných instrukcí nastavení rámce zásobníku), nebo použít nějakou oblast na haldě. Pokud je vaše halda příliš malá, budete muset vytvořit instrukci SYSCALL (dalších INT 80h), abyste požádali operační systém o další (přes sbrk).
Další alternativou je dozvědět se o formátu ELF a vytvořit globální proměnnou v příslušné sekci (myslím, že je to .data).
Konečným výsledkem kterékoli z těchto metod je místo v paměti, které můžete použít. Ale vaše jediné skutečné „proměnné“, na které jste zvyklí z nyní úžasně vypadajícího světa C, jsou vaše registry. A není jich moc.
Assembler vám může pomoci s užitečnými makry. Přečtěte si dokumentaci k assembleru; Nepamatuji si je z hlavy.
Život je tam dole na úrovni ASM těžký.
Po volání k otevření je popisovač souboru v eax. Oprávněně jej přesunete na ebx, kde jej výzva ke čtení vyhledá. Bohužel v tuto chvíli jste jej již přepsali 3, systémovým voláním pro čtení.