Preco pouzivate NASM a nie gnu as ? Predsalen nasm je obmedzene na x86 a bolo by lepsie od zaciatku pouzivat as. tu je osekany kod strart.s pre as:
.text .globl start, _start
start:
_start:
jmp multiboot_entry
/* Align 32 bits boundary. */
.align 4
/* Multiboot header. / multiboot_header: / magic / .long 0×1BADB002 / flags / .long 0×00000003 / checksum */ .long -(0×1BADB002 + 0×00000003)
multiboot_entry:
jmp main
loop: hlt jmp loop
inak dik za super clanok :)
Ide o navyky. Ja sam som zacinal s borlandovskym asm s intel syntaxou a potom som mal problem prejst na A&T syntax.
Ze intel syntax je znamejsia je diskutabilne. Podla mna clovek co este nepisal v asm by sa mal rovno naucit a&t syntax ktoru pouziva GNU AS. Predsalen definicia sekcii, premennych, registrov, konstant, volanie cckovych procedur… je rovnaka na kazdom cpu. rozdielne su len instrukcie…
Takze myslim ze pouzitie as by bolo lepsie.
AT&T syntax je stejně nutné používat v inline assembleru (*). Když bude programátor používat oba typy syntaxe, tak se mu to bude plést a najít banální chyby typu „MOV EAX,ECX vs. MOV ECX,EAX“ trvá celkem dlouho. Takže bych byl taky pro jeden typ syntaxe (AT&T) od začátku. Sám jsem dělal dost chyb, když jsem mezi těmito syntaxemi přecházel.
(*) vím, že gcc má switch -mintel-syntax, ale s tím dost programů nejde zkompilovat vůbec, protože v include souborech se assember s inline AT&T syntaxí vyskytuje. Pokud si svoje include soubory přepíšeš sám v Intel assembleru, tak tam zase nerozchodíš běžné open source programy, které kusy AT&T assembleru v sobě mají. AT&T syntax je prostě běžnější.