http://blog.csdn.net/zenny_chen/article/details/6321978

目前很多开源基于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

ATT汇编针对x86指令集格式相关推荐

  1. att格式汇编指令_关于ATT汇编

    ATT 汇编大体格式是: 指令 源操作数 目的操作数 ,比如将 10 移动到 eax 寄存器的写法: movl $10, %eax . 1.ATT 汇编的源操作数和目的操作数和 Intel 正好相反, ...

  2. ARM汇编:乘法指令集

    ARM汇编:乘法指令集

  3. x86指令集_当年基于动态翻译x86的企业倒闭了,龙芯为什么还要坚持

    最近,胡伟武宣称在2020年Q2起流片的CPU不再支持MIPS指令,启用一种完全自主的 LoongArch 指令集.LoongArch 是一种全新的指令集,还以二进制翻译的形式兼容MIPS.ARM.R ...

  4. 和x86同时代的计算机语言指令集,x86指令集同频性能提升

    x86近5000条指令,迄今为止最复杂的指令集.这里不研究CISC & RISC,也不考虑process制程变化,主要是看最近几代IA架构对于同频率下性能的提升. x86指令集nasm文档 h ...

  5. linux ATT汇编 与 Intel汇编 语法格式对比

    由于绝大多数的国内程序员以前只接触过Intel格式的汇编语言,很少或几乎没有接触过AT&T汇编语言,虽然这些汇编代码都是Intel风格的.但在Unix和Linux系统中,更多采用的还是AT&a ...

  6. 汇编-ARMv8架构指令集

    1. ARMv8寄存器体系 1.1 概述 ARMv8架构继承了ARMv7与之前处理器技术的基础,除了对现有的16/32bit的Thumb2指令支持外,也向前兼容了现有的A32(ARM 32bit)指令 ...

  7. ATT汇编指令 AT&T汇编伪指令

    最近一直在看OS方面的东西,其中要用到许多AT&T汇编,下面是在网上打到的关于它的伪指令方面的中英文对照版本.英文版本也可以输入如下命令来查看:     info as        read ...

  8. linux中reap用法,ATT汇编学习笔记(一)

    file命令使用介绍 file最常用的场景就是用来查看可执行文件的运行环境,是arm呢,还是x86呢,还是mips呢?一看便知$ file a.out a.out: ELF 64-bit LSB ex ...

  9. linux汇编和x86汇编,linux平台学x86汇编(四):从“hello world!”开始

    [版权声明:尊重原创,转载请保留出处:blog.csdn.net/shallnet,文章仅供学习交流,请勿用于商业用途] 汇编语言程序由定义好的段构成,每个段有各自的目的.三个最常用的的段如下:数据段 ...

最新文章

  1. 本月 上月 php,显示本月,上月,今天,今年以及各时间起点与
  2. 【PAT乙级】1001 害死人不偿命的(3n+1)猜想 (15 分)
  3. python国产_Python勒索软件来袭,国产杀软集体失身
  4. tomcat错误:The page you tried to access (/manager/login.do) does not exist
  5. 【C++深度剖析教程31】被遗弃的多重继承
  6. 决策树之分类树快速理解
  7. Python Error: “ImportError: No module named six”,用自动安装解决依赖问题
  8. 打造机器人:为遥控小车加一个树莓派
  9. 计算机键盘练习,电脑键盘指法练习经验分享
  10. 测试投入度量元的选择
  11. 艾欧尼亚服务器延迟正常吗,lol延迟和服务器位置有关系?为什么我的lol延迟这么高?...
  12. Ubuntu16.04安装NVIDIA Titan Xp显卡驱动
  13. PHP函数array_intersect_assoc
  14. unity2D制作一个2D游戏场景Tilemap
  15. java实验报告(实验三)
  16. pip download与pip install简介
  17. error: command 'C:\\Program Files (x86)\\Microsoft Visual Studio 14.0\\VC\\BIN\\link.exe' failed wit
  18. 确定了:网易大型手游明日之后上线,11月3日明日之后电脑版提前玩
  19. truetype字体怎么转换成普通字体_社交资料不再普通 Instagram Fonts在线生成可复制字体...
  20. Android P MTK 文件管理器打开三方应用生成的文件,提示不支持文件格式。

热门文章

  1. 升级dedecms5.5后,出现提示保存目录数据时失败,请检查你的输入资料是否存在问题...
  2. 使用GDAL工具对FY3系列卫星数据进行校正
  3. 在idea中使用mybatis-generator
  4. Kubernetes集群搭建之Etcd集群配置篇
  5. 基于libmemcached为php扩展memcached服务
  6. 软件工程中需要学习和掌握的软件都有哪些_9个B端产品经理需要懂的技术
  7. node项目打包如何隐藏html后缀,详解webpack打包nodejs项目(前端代码)
  8. 知道ip地址如何进入电脑_如何防止局域网电脑IP地址冲突
  9. win10远程计算机或设备将不接收连接?
  10. 2020年Mybatis源码解读