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 ) :

%eax, %ebx, %ecx, %edx

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)
  • registerförskjutning:
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