linux AT &T Assembly

本文详细对比了AT&T与Intel汇编语言的不同之处,包括操作数顺序、寄存器标识、立即数表示、操作数大小指定及内存操作等关键概念。适合初学者了解两种汇编风格的区别。

1.  第一个 operand 为 source, 第二个为 destination (和 Intel 的刚好相反).

将 EAX寄存器的内容拷贝到  EBX:

movl    %eax, %ebx

2. 寄存器的名字前要加上 %

3. 立即数前面加上 $. 静态的 C语言变量也加前缀 $

4. operand 的大小通过operator 的最后一个字符(b,w,l)来确定。b: 1 byte; w: 2 bytes; l: 4 bytes

5. memory 操作:

section:disp(base, index, scale)

相当与 intel 的

section:[base + index*scale + disp]

对于用作 scale 和 disp的常量,不用加前缀 $

下面是 Intel 和 AT&T 格式的 assembly code 的对比:

+------------------------------+------------------------------------+
|       Intel Code             |      AT&T Code                     |
+------------------------------+------------------------------------+
| mov     eax,1                |  movl    $1,%eax                   |   
| mov     ebx,0ffh             |  movl    $0xff,%ebx                |   
| int     80h                  |  int     $0x80                     |   
| mov     ebx, eax             |  movl    %eax, %ebx                |
| mov     eax,[ecx]            |  movl    (%ecx),%eax               |
| mov     eax,[ebx+3]          |  movl    3(%ebx),%eax              | 
| mov     eax,[ebx+20h]        |  movl    0x20(%ebx),%eax           |
| add     eax,[ebx+ecx*2h]     |  addl    (%ebx,%ecx,0x2),%eax      |
| lea     eax,[ebx+ecx]        |  leal    (%ebx,%ecx),%eax          |
| sub     eax,[ebx+ecx*4h-20h] |  subl    -0x20(%ebx,%ecx,0x4),%eax |


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值