Sintaxis de AT&T
La versión actual de la página aún no ha sido revisada por colaboradores experimentados y puede diferir significativamente de la
versión revisada el 17 de diciembre de 2013; las comprobaciones requieren
19 ediciones .
La sintaxis de AT&T es uno de los formatos para escribir mnemónicos de instrucciones del procesador .
Características
Diferencias entre el ensamblador AT&T ( gas ) y el ensamblador Intel ( MASM , TASM , FASM , NASM ) :
- El comentario comienza con un carácter "#", no con ";"; a su vez, el símbolo ";" separa los comandos y le permite escribir varios comandos en una línea.
- La ausencia de un prefijo de operando apunta a una dirección de memoria, por lo que movl $foo,%eax coloca la dirección de foo en el registro %eax, y movl foo,%eax coloca el contenido de foo en %eax.
- Los nombres de registro comienzan con un carácter %, es decir, %eax, %dl, en lugar de eax, dl, etc. Esto le permite incluir variables C externas en su código sin temor a errores y sin usar prefijos de subrayado (_). Por ejemplo:
%eax, %ebx, %ecx, %edx
- El tamaño del operando se define como el sufijo del nombre de la instrucción. Sufijos:
- b (del byte ) - operandos de 1 byte
- w (de la palabra ) - operandos de 1 palabra (2 bytes)
- l (de largo ) - operandos de 4 bytes
- q (de quad ) - operandos de 8 bytes
- t (de diez ) - operandos de 10 bytes
- o (desde octo ) - operandos de 16 bytes
movb %al , %ah
movw %ax , %bx
movl %ebx , %eax
- El orden de los operandos es primero el origen, luego el destino, y no al revés, como en la sintaxis de Intel . Por ejemplo:
mover eax , ebx ;(Intel)
mover %ebx , %eax #(AT&T)
- constantes numéricas tienen la siguiente notación:
20 h ;(Intel)
$0x20 #(AT&T, signo de dólar al principio)
mov ebx , 10 h ;(Intel)
movl $0x10 , %ebx #(AT&T)
- para escribir/leer un valor de una dirección específica a un registro, no hay signo de dólar:
movl 0xffff , %eax
- segmento.offset (solo en modo real) :
00:0 FFh ;(Intel)
00 .$0xFF #(AT&T)
- desplazamiento de registro:
es: [ bx + 0x1a ] ;(Intel)
% es.0x1a ( %bx ) #(AT&T)
Las indicaciones de los métodos de direccionamiento de índice difieren en que se utilizan paréntesis en lugar de corchetes:
sub eax ,[ ebx + ecx * 4 h-20h ] ;(Intel)
subl -0 x20 ( %ebx , %ecx , 0x4 ), %eax #(AT&T) restar del valor EAX (ECX * 4) + EBX - 32
Los mnemotécnicos de algunos comandos difieren (por ejemplo, se cdqllama cltden AT&T).
Los comandos del ensamblador difieren (como declarar constantes, reservar espacio).
Véase también