AT&T汇编语法

Table of Contents

AT&T指令格式和Intel指令格式的操作数方向是相反的,在AT&T中,第一个是源操作数,第二个目标操作数,如:

mov $1, $ebx

对应的Intel指令格式为:

mov ebx, 1

1 立即数

以$开头:

mov $8, %ebx
movl $0xffffffff, %eax

2 寄存器

以%开头,如:%ebx。

3 16进制

以0x开头,如0xffffffff。Intel指令格式以“h”结尾,如ffffffffh。

4 内存单元操作数

例如Intel格式:

mov eax, [ebx+5]

对应的AT&T格式为:

mov 5(%ebx), %eax

5 操作码后缀

后缀是为了指明操作码的大小

后缀 含义 Intel语法
l 32位长整数 dword ptr
w 字,16位 word ptr
b 字节,8位 byte ptr
q 64位  

例:

Intel格式 AT&T格式
mov eax, ebx movl %eax, %ebx
mov ax, bx movw %bx, %ax
mov al, bl movb %bl, %al

6 间接寻址

在Intel中,后缀“h”表示16进制,“b”表示2进制。

Intel格式 AT&T格式
mov eax, [ebx+10h] movl 0x10(%ebx), %eax
add eax, [ebx+eax*2h] addl (%ebx, %eax, 0x2), %eax
mov eax, [ebx+eax] movl (%ebx, %eax), %eax
mov eax, [ebx+eax*2h-10h] movl -0x10(%ebx, %eax, 0x2), %eax