Różnice składni AT&T i Intel



Różnice między składnią Intela a AT&T
Cecha Intel AT&T
Liczby w instrukcjach
(z wyjątkiem adresów)
12345678
$12345678
Rejestry
eax, ebx, cs, cr0, dr0, tr6, st(0)/st0
%eax, %ebx, % cs, %cr0, %db0, %tr6, %st(0)
Adresy bezwzględne w skokach
12345678
*12345678
brak gwiazdki oznacza adres względem bieżącego EIP
Kolejność argumentów w instrukcjach
mov eax, ebx
imul ebx, eax, 69
movl %ebx, %eax
imul $69, %eax, %ebx
Przyrostki rozmiarowe
mov al, byte ptr [abcd]
mov bx, word ptr [efgh]
mov ecx, dword ptr [ijkl]
mov eax, 1
int 80h
movb abcd, %al
movw efgh, %bx
movl ijkl, %ecx
movl $1, %eax
int $0x80
Skoki pod dany adres
jmp/call far seg:off
ljmp/lcall $seg, $off
Instrukcje powrotu
retf n
ret n
lret $n
ret $n
Rozszerzanie wartości do większych rozmiarów
movsx ax, bl
movzx eax, bl
movsx eax, bx
cbw
cwde
cwd
cdq
movsbw %bl, %ax
movzbl %bl, %eax
movswl %bx, %eax
cbtw
cwtl
cwtd
cltd
Adresowanie złożone
seg : [baza + index*skala + liczba]
[ebp-4]
[cos+eax*2]
gs : gdzies
mov eax, [ecx]
sub eax, [ebx+ecx*4-20h]
call [eax*4 + zmienna]
%seg : liczba(%baza, %index, skala)
-4(%ebp)
cos(,%eax,2)
%gs : gdzies
movl (%ecx), %eax
subl -0x20(%ebx,%ecx,0x4), %eax
call *zmienna(,%eax,4)
Adresowanie pojedynczych zmiennych
mov al, byte [costam]
movb costam(,1), %al
movb costam, %al
Pobieranie adresu zmiennych
mov eax, offset costam      (TASM, MASM)
mov eax, costam      (NASM, FASM)
movl $costam, %eax
Przyrostki instrukcji FPU
fld dword [a]
fld qword [b]
fld tbyte/tword [c]
fild qword [d]
fild dword [e]
fild word [f]
flds a
fldl b
fldt c
fildq d
fildl e
filds f

Polecam też (po angielsku) porównanie składni AT&T ze składnią Intela oraz wstęp do wstawek asemblerowych (w GCC) na stronach DJGPP, podręcznik GCC (sekcje: 5.34 i 5.35), oraz (w języku polskim) stronę pana Danileckiego.



Spis treści off-line (Alt+1)
Spis treści on-line (Alt+2)
Ułatwienia dla niepełnosprawnych (Alt+0)