AT&T汇编语法与Intel语法的比较
AT&T与Intel汇编都是X86汇编。Windows一般使用的是Intel汇编,而Linux系统一般使用的是AT&T汇编语法。只要掌握其中一种,通过差异比较,很容易上手另一种汇编语法。如下图所示,一些常见的intel与AT&T汇编语法格式的对比图:
1,intel语法操作的操作数长度体现在寄存器名称上。以ax寄存器为例,8位用al或者ah,1个字节用ax,4个字节用eax,地址宽度用byte ptr/word ptr/dword ptr。而AT&T汇编还会在指令后面加后缀:
movb/movw/movl
2,Intel中寄存器的名字写法:eax,而AT&T中寄存器的写法%eax
3,Intel汇编数据移动方向是从右往左,而AT&T是从左往右,比如把bl寄存器中的值移动到al中,那么分别写法:
Intel: mov al,bl
AT&T: movb %bl,%al
4,Intel语法中立即数为:0ffeh,AT&T中立即数写法:$0xffe。
5,base+index*scale+disp寻址写法,比如:
intel中: sub
eax,[ebx+ecx*4h-20h]
AT&T中: subl -0x20(%ebx,%ecx,0x4),%eax
intel中: sub
eax,[ebx+ecx*4h]
AT&T中: subl (%ebx,%ecx,0x4),%eax
intel中: sub
eax,[ebx -20h]
AT&T中: subl -0x20(%ebx),%eax
intel中: sub
eax,[ebx+ecx*4h]
AT&T中: subl (%ebx,%ecx,0x4),%eax