博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
AT&T汇编针对x86指令集格式
阅读量:5134 次
发布时间:2019-06-13

本文共 1430 字,大约阅读时间需要 4 分钟。

目前很多开源基于x86处理器环境的C/C++,Objective-C/C++编译器所带的汇编器使用AT&T格式。AT&T汇编针对x86指令集与其它处理器(比如ARM、Blackfin等)有所不同,它与Intel自定义的汇编格式有比较大的偏差。GCC的汇编器能支持Intel语法特性,可以参考我前面的博文来获悉如何使用。不过对于最新的LLVM2.0,又开始弃用Intel语法特性了。因此不管怎么说了解AT&T汇编语法还是有些好处的,呵呵。

 

首先,AT&T汇编在对于存储器访问上,如果要指定访问字节的宽度,是通过加后缀来实现的,而Intel则是在存储器操作数之前加访问宽度限定词,比如:

(Intel)mov    dword ptr [edx], eax                  (AT&T)movl    %eax, (%edx)

大部分指令对于AT&T使用以下后缀:

b    字节(8位),对应于Intel的byte ptr

w   字(16位),对应于Intel的word ptr

l     双字(实际是表示long,32位),对应于Intel的dword ptr

q    四字(64位),对应于Intel的qword ptr

 

然而,如果是x87浮点指令的话用以下后缀:

s    单精度浮点(short,32位),对应于Intel的dword ptr,如果x87关于存储访问的指令后缀缺省,则默认为后缀s。

l     双精度浮点(long,64位),对应于Intel的qword ptr。

t    扩展双精度浮点(twelve-byte,96位(由于四字节对齐需要,实际精度是80位)),对应于Intel的tbyte ptr。

 

 

其次,AT&T格式中,指令后面的操作数顺序与Intel格式是相反的。AT&T是源操作数在前,目的操作数在后:

(Intel)mov    rax, rbx                (AT&T)mov    %rbx, %rax

(Intel)mov    eax, cs:var           (AT&T)movl    %cs:var, %eax

(Intel)pinsrw     xmm8, [rdi], 1   (AT&T)pinsrw    $1, (%rdi), %xmm8

(Intel)pshuflw   xmm8, xmm9, 0a1H         (AT&T)pshuflw    $0xa1, %xmm9, %xmm8

 

 

再次,AT&T与Intel语法之间的寻址表示也不同:

(Intel)sub eax, [ebx + ecx * 4h - 20h]          (AT&T)subl    -0x20(%ebx, %ecx, 0x4), %eax

上面表示缩放因子以及偏移量的立即数前不需要加$符号。

 

 

最后,AT&T与Intel之间有些指令的表示也不同:

在Intel指令表示中,如果是带符号扩展的MOV指令是用movsx表示,而在AT&T中用movs;而Intel中零扩展MOV指令是movzx,而在AT&T中是用movz表示,比如:

(Intel)movzx    rax, byte ptr [rsi + 3]            (AT&T)movzb   3(%rsi), %rax

(Intel)movsx    rax, word ptr [rsi + 4]           (AT&T)movsw   4(%rsi), %rax

而MOVS指令在Intel指令集中是被废弃的字符串操作指令。

转载于:https://www.cnblogs.com/zhuyuanhao/archive/2012/10/16/3262869.html

你可能感兴趣的文章
牛的障碍Cow Steeplechase
查看>>
Zookeeper选举算法原理
查看>>
3月29日AM
查看>>
利用IP地址查询接口来查询IP归属地
查看>>
HTML元素定义 ID,Class,Style的优先级
查看>>
构造者模式
查看>>
http和https的区别
查看>>
Hbuild在线云ios打包失败,提示BuildConfigure Failed 31013 App Store 图标 未找到 解决方法...
查看>>
找到树中指定id的所有父节点
查看>>
今天新开通了博客
查看>>
AS3优化性能笔记二
查看>>
ElasticSearch(站内搜索)
查看>>
4----COM:a Generative Model for group recommendation(组推荐的一种生成模型)
查看>>
UVA 11137 - Ingenuous Cubrency
查看>>
js阻止事件冒泡的两种方法
查看>>
Java异常抛出
查看>>
74HC164应用
查看>>
变量声明和定义的关系
查看>>
Wpf 之Canvas介绍
查看>>
linux history
查看>>