AT&T-syntax
Den aktuella versionen av sidan har ännu inte granskats av erfarna bidragsgivare och kan skilja sig väsentligt från
versionen som granskades den 17 december 2013; kontroller kräver
19 redigeringar .
AT&T-syntax är ett av formaten för att skriva processorinstruktionsmnemonics .
Funktioner
Skillnader mellan AT&T assembler ( gas ) och Intel assembler ( MASM , TASM , FASM , NASM ) :
- Kommentaren börjar med ett "#" tecken, inte ett ";"; i sin tur symbolen ";" separerar kommandon och låter dig skriva flera kommandon på en rad.
- Frånvaron av ett operandprefix pekar på en minnesadress, så movl $foo,%eax placerar adressen till foo i %eax-registret och movl foo,%eax placerar innehållet i foo i %eax.
- Registernamn börjar med ett %-tecken, dvs %eax, %dl, istället för eax, dl, etc. Detta gör att du kan inkludera externa C-variabler i din kod utan rädsla för fel och utan att använda understreck (_) prefix. Till exempel:
%eax, %ebx, %ecx, %edx
- Operandstorleken definieras som suffixet för instruktionsnamnet. Suffix:
- b (från byte ) - 1 byte operander
- w (från ord ) - 1 ord (2 byte) operander
- l (från lång ) - 4-byte operander
- q (från quad ) - 8 byte operander
- t (från tio ) - 10-byte operander
- o (från octo ) - 16-byte operander
movb %al , %ah
movw %ax , %bx
movl %ebx , %eax
- Ordningen på operanderna är först källan, sedan destinationen och inte vice versa, som i Intel-syntaxen . Till exempel:
mov eax , ebx ;(Intel)
movl %ebx , %eax #(AT&T)
- numeriska konstanter har följande notation:
20 h ;(Intel)
$0x20 #(AT&T, dollartecken i början)
mov ebx , 10 h ;(Intel)
movl $0x10 , %ebx #(AT&T)
- för att skriva / läsa ett värde från en specifik adress till ett register finns det inget dollartecken:
movl 0xffff , %eax
- segment.offset (endast i verkligt läge):
00:0 FFh ;(Intel)
00 .$0xFF #(AT&T)
es: [ bx + 0x1a ] ;(Intel)
% es.0x1a ( %bx ) #(AT&T)
Indikationer på indexadresseringsmetoder skiljer sig genom att parenteser används istället för hakparenteser:
sub eax ,[ ebx + ecx * 4 h-20h ] ;(Intel)
subl -0 x20 ( %ebx , %ecx , 0x4 ), %eax #(AT&T) subtrahera från EAX-värdet (ECX * 4) + EBX - 32
Mnemonics för vissa kommandon skiljer sig (till exempel cdqkallas det cltdi AT&T).
Assembler-kommandon skiljer sig åt (som att deklarera konstanter, reservera utrymme).
Se även