Intel汇编和AT&T汇编的区别?

一、前缀不同

在 Intel 语法中,没有寄存器前缀或立即前缀。 然而,在 AT&T 中,寄存器的前缀是“%”,而 immed 的前缀是“$”。 Intel 语法十六进制或二进制即时数据分别带有“h”和“b”后缀。 此外,如果第一个十六进制数字是字母,则该值前面带有“0”前缀。

例如下面这个表格:

二、 操作数的位置不同

Intel 语法中操作数的方向与 AT&T 语法中的操作数方向相反。 在 Intel 语法中,第一个操作数是目标,第二个操作数是源,而在 AT&T 语法中,第一个操作数是源,第二个操作数是目标。 AT&T 语法在这种情况下的优势是显而易见的。 我们从左到右读,从左到右写,所以这种方式很自然。

三、内存操作数的写法不同

上面看到的内存操作数也不同。 在 Intel 语法中,基址寄存器包含在'[' and ']' 中,而在 AT&T 语法中,基址寄存器包含在'(' and ')' 中。 

与 Intel 语法相比,涉及复杂操作的指令的 AT&T 形式非常晦涩难懂。

Intel 语法形式是 segreg:[base+index*scale+disp]

AT&T 语法形式为 %segreg:disp(base,index,scale)

Index/scale/disp/segreg 都是可选的,可以简单地省略。如果未指定且指定了索引,则比例默认为 1。Segreg 取决于指令以及应用程序是否在实模式或 pmode 下运行。 在实模式下它取决于指令,而在p模式下则不需要。 当用于缩放/显示时,使用的立即数据不应在 AT&T 中添加“$”前缀。 

例如下面的表格:

如你所见,AT&T 非常晦涩。

英特尔汇编[base+index*scale+disp] 明显比AT&T汇编disp(base,index,scale) 更容易理解。

 四、后缀不同

您可能已经注意到,AT&T 语法助记符有一个后缀。 该后缀的意义在于操作数的大小。 “l”代表长,“w”代表字,“b”代表字节。 Intel 语法具有与内存操作数类似的指令,即字节 ptr、字 ptr、双字 ptr。 “dword”当然对应于“long”。 这类似于 C 中的类型转换,但它似乎没有必要,因为所使用的寄存器的大小是假定的数据类型。

 最后讲两个单词,HEX是16进制的意思,Intel汇编的H后缀也是这么来的,HEX是Hexadecimal的缩写。Binary是二进制的意思,Intel汇编的B后缀是这个单词。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值