AT&T 汇编语法

Table of Contents

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

mov $1, $ebx

对应的Intel指令格式为:

mov ebx, 1

1. 16进制

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

2. 操作数

2.1. 立即数

以$开头:

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

2.2. 寄存器

以%开头,如:%ebx。

寄存器寻地如下:

mov 0x40401f(%rcx),%rbx

2.3. 内存单元操作数

例如 Intel 格式:

mov eax, [ebx+5]

对应的 AT&T 格式为:

mov 5(%ebx), %eax

3. 操作码后缀

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

后缀 含义 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

4. 间接寻址

在 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