Toto je krátký úvod do AT&T syntaxe assembleru, která je používána většinou GNU programů procaujících s assemblerem. Tato syntax se používala jako standard dlouho před tím, než si Intel vymyslel, že to udělá jinak. AT&T má ale některé výhody - je jednodušší na zpracování, stejná na všech procesorech atd. Samozřejmě že existuje převaděč z Intel syntaxe, nebo NASM, což je assembler podobný TASMovi.
Základní rozdíly jsou:
%
. Před číselnou
konstantou $
.b
,w
nebo l
movsx
a movzx
, které se
píší jako movsSD
a movzSD
kde S
a D
udávají velikost zdroje
nebo cíle. Například movswl %ax, %ecx
SECTION:[BASE + INDEX*SCALE + DISP]
píše:
SECTION:DISP(BASE,INDEX,SCALE)
To je snad skoro všechno.Příklady:
movw %bx, %ax (mov ax, bx)
xorl %eax, %eax (xor eax, eax)
movw $1, %ax (mov ax,1)
movb X, %ah (mov ah, byte ptr X)
movw X, %ax (mov ax, word ptr X)
movl X, %eax (mov eax, X)
cbtw (cbw)
cwtl (cwde)
cwtd (cwd)
cltd (cdq)
lcall $S,$O (call far S:O)
ljmp $S,$O (jump far S:O)
lret $V (ret far V)
movl 4(%ebp), %eax (mov eax, [ebp+4])
addl (%eax,%eax,4), %ecx (add ecx, [eax + eax*4])
movb $4, %fs:(%eax) (mov fs:eax, 4)
movl _array(,%eax,4), %eax (mov eax, [4*eax + array])
movw _array(%ebx,%eax,4), %cx (mov cx, [ebx + 4*eax + array])
Dotazy a připomínky ohledně stránky posílejte na hubicka@paru.cas.cz