AT&T szintaxis
Az oldal jelenlegi verzióját még nem ellenőrizték tapasztalt hozzászólók, és jelentősen eltérhet a 2013. december 17-én felülvizsgált
verziótól ; az ellenőrzések 19 szerkesztést igényelnek .
Az AT&T szintaxis a processzor utasítás - mnemonika írásának egyik formátuma .
Jellemzők
Az AT&T assembler ( gáz ) és az Intel assembler ( MASM , TASM , FASM , NASM ) közötti különbségek :
- A megjegyzés "#" karakterrel kezdődik, nem ";" karakterrel; viszont a ";" szimbólum elválasztja a parancsokat, és lehetővé teszi több parancs írását egy sorba.
- Az operandus előtag hiánya memóriacímre mutat, így a movl $foo,%eax a foo címét az %eax regiszterbe helyezi, a movl foo,%eax pedig a foo tartalmát az %eax-be.
- A regiszternevek % karakterrel kezdődnek, azaz %eax, %dl, az eax, dl stb. helyett. Ez lehetővé teszi, hogy külső C-változókat vegyen fel a kódba a hibáktól való félelem és az aláhúzás (_) előtagok használata nélkül. Például:
%eax, %ebx, %ecx, %edx
- Az operandus mérete az utasítás nevének utótagja. Utótagok:
- b ( byte -ból ) - 1 bájtos operandusok
- w ( szóból ) - 1 szó (2 bájt) operandusok
- l ( hosszúból ) - 4 bájtos operandusok
- q ( négybájtosból ) - 8 bájtos operandusok
- t ( tíztől ) - 10 bájtos operandusok
- o ( októtól ) - 16 bájtos operandusok
movb %al , %ah
movw %ax , %bx
movl %ebx , %eax
- Az operandusok sorrendje először a forrás, majd a cél, és nem fordítva, mint az Intel szintaxisában . Például:
mov eax , ebx ;(Intel)
movl %ebx , %eax #(AT&T)
- A numerikus állandók a következő jelöléssel rendelkeznek:
20 óra ;(Intel)
$0x20 #(AT&T, dollárjel az elején)
mov ebx , 10 óra ;(Intel)
movl $0x10 , %ebx #(AT&T)
- ha egy adott címből egy regiszterbe szeretne értéket írni/olvasni, nincs dollárjel:
movl 0xffff , %eax
- segment.offset (csak valós módban):
00:0 FFh ;(Intel)
00 .$0xFF #(AT&T)
es: [ bx + 0x1a ] ;(Intel)
% es.0x1a ( %bx ) #(AT&T)
Az indexcímzési módszerek jelzései abban különböznek, hogy szögletes zárójelek helyett zárójeleket használnak:
sub eax ,[ ebx + ecx * 4 h-20h ] ;(Intel)
subl -0 x20 ( %ebx , %ecx , 0x4 ), %eax #(AT&T) vonjuk ki az EAX értékből (ECX * 4) + EBX - 32
Egyes parancsok mnemonikája különbözik (például az AT&T-ben
cdqhívják ).cltd
Az Assembler parancsok eltérőek (például konstansok deklarálása, helyfoglalás).
Lásd még