AT&T和Intel汇编语法有什么不同

程序员小x大约 1 分钟汇编语言

AT&T和Intel汇编语法有什么不同

原操作数和目的操作数的顺序

Intel语法先写目标操作数,再写源操作数,AT&T语法先写源操作数,再写目标操作数。

Intel:

mov ebp, esp

AT&T:

mov %esp, %ebp 

注释语句不同

Intel:

mov ebp, esp ;mov

AT&T:

movl %esp, %ebp //mov 

立即数写法不同

Intel:

mov ebp, 0x100

AT&T:

movl $0x100, %ebp

取址方式不同

IntelAT&T
[base + reg * scale + displacement]displacement(base, index, scale)

Intel:

mov eax, [0100]
mov eax, [ESI]
mov eax, [EBP-8]
mov eax, [EBX*4+0100]
mov eax, [EDX+EBX*4+8]

AT&T:

movl           0x0100, %eax
movl           (%esi), %eax
movl         -8(%ebp), %eax
movl  0x0100(,%ebx,4), %eax
movl 0x8(%edx,%ebx,4), %eax

命令后缀

AT&T语法中命令存在后缀,后缀可以表示操作数的大小。"l"代表long,即4个字节, "w"代表word, 2个字节, "b"代表字节。

Intel语法中有类似的符号,byte ptr代表一个字节, word ptr代表一个字, dword ptr代表双字。

下面是详细的例子:

IntelAT&T
mov al,bl
mov ax,bx
mov eax,ebx
mov eax, dword ptr [ebx]
movb %bl, %al
movw %bx, %ax
movl %ebx, %eax
movl (%ebx), %eax
Loading...