Intel 和AT&T 语法
From:http://www.cnblogs.com/killerlegend/p/3906502.html
Author:KillerLegend
Date:2014.8.12
Intel和AT&T汇编语法在”长相”上看起来颇为不同,这会让在已经学过Intel语法后来又碰到AT&T语法的人产生很大的迷惑,反之也是一样的,今天就说一说一些基本的不同之处.
前缀
Intel语法中寄存器没有前缀,立即数也没有前缀.AT&T的寄存器的前缀为%以及立即数的前缀为$.Intel语法的十六进制或者二进制立即数后缀分别为h,b,如果十六进制的数字中第一个数字是字母,那么值最前面要加一个0.如下:
Intex 语法 mov eax,1 mov ebx,0ffh int 80h |
AT&T 语法 movl $1,%eax movl $0xff,%ebx int $0x80 |
操作方向
Intel和AT&T的操作方向正好相反.Intel语法中,第一个操作数是目的操作数,第二个是源操作数,AT&T与此相反.显然AT&T语法更有优势,因为我们从左往右读,写也是从左往右写,这种方式是合乎常理的.打个不恰当的比喻就是,Intel让我们回到了古人的读书方法,而AT&T则是以现代人的方式读书.
例子:
Intex 语法 instr dest,source mov eax,[ecx] |
AT&T 语法 instr source,dest movl (%ecx),%eax |
内存操作
内存操作也是不同的,Intel语法中的基寄存器包含在'['和 ']'中,而AT&T则包含于'(' 和')'之中.
例子:
Intex 语法 mov eax,[ebx] mov eax,[ebx+3] |
AT&T语法 movl (%ebx),%eax movl 3(%ebx),%eax |
相对于Intel语法而言,AT&T指令若涉及到复杂的操作将会让人很难以理解,比如在Intel中类如segreg:[base+index*scale+disp]这样的语法在AT&T中就要写成%segreg:disp(base,index,scale).其中index/scale/disp/segreg都是可选的,scale和index默认都是1.segreg则取决于指令以及应用程序是运行在实模式还是保护模式中.在实模式中,segreg取决于指令,而在保护模式中,则它是不必要的.当立即数用于scale/disp时,AT&T中的立即数不应该加上符合’$’.
例子:
Intel 语法 instr foo,segreg:[base+index*scale+disp] mov eax,[ebx+20h] add eax,[ebx+ecx*2h lea eax,[ebx+ecx] sub eax,[ebx+ecx*4h-20h] |
AT&T 语法 instr %segreg:disp(base,index,scale),foo movl 0x20(%ebx),%eax addl (%ebx,%ecx,0x2),%eax leal (%ebx,%ecx),%eax subl -0x20(%ebx,%ecx,0x4),%eax |
显然, [base+index*scale+disp]比disp(base,index,scale)要直观许多.
后缀
AT&T的语法也有后缀.这个后缀指明了操作数的大小,l指long,w指word,b指byte.Intel语法对应的分别是dword ptr, word ptr, byte ptr,dword就对应于long.
例子:
Intel 语法 mov al,bl mov ax,bx mov eax,ebx mov eax, dword ptr [ebx] |
AT&T语法 movb %bl,%al movw %bx,%ax movl %ebx,%eax movl (%ebx),%eax |
Intel 和AT&T 语法的更多相关文章
- [原]逆向iOS SDK -- “添加本地通知”的流程分析
观点: 代码面前没有秘密 添加通知的 Demo 代码 - (void)scheduleOneLocalNotification { [[UIApplication sharedApplication] ...
- AT&T 和 Intel 汇编语法的主要区别
转自AT&T 和 Intel 汇编语法的主要区别 作为一个爱折腾的大好青年,补番之余还要补一些 Linux 下的基础,比如 GDB 的正确使用方法.但无论是看 gdb 还是 gcc -S 里的 ...
- (转) at&T语法格式 与 at&T - intel格式对比
原地址 示例: movl (%ebp), %eax, 等同于Intel格式中的 ] ,AT&T中,源操作数在左,目的操作数在右.“l”是Longword,相当于Intel格式中的dword p ...
- AT&T汇编和Intel汇编语法主要区别
AT&T使用$表示立即操作数,而Intel的立即操作数是不需要界定的.因此,使用AT&T语法引用十进制值4时,使用$4,使用Intel语法时只需使用4. AT&T在寄存器名 ...
- [中英对照]INTEL与AT&T汇编语法对比
本文首先对文章Intel and AT&T Syntax做一个中英文对照翻译,然后给出一个简单的例子,再用gdb反汇编后,对INTEL与AT&T的汇编语法进行对照从而加深理解. Int ...
- Linux下AT&T汇编语法格式与Intel汇编语法格式异同
由于绝大多数的国内程序员以前只接触过Intel格式的汇编语言,很少或几乎没有接触过AT&T汇编语言,虽然这些汇编代码都是Intel风格的.但在Unix和Linux系统中,更多采用的还是AT&a ...
- x86汇编程序基础(AT&T语法)
一.简单的汇编程序 以下面这段简单的汇编代码为例 .section .data .section .text .globl _start _start: movl $, %eax movl $, %e ...
- 转-IE浏览器自动配置代理脚本-Proxy.PAC文件及PAC相关语法
用笔记本上网时,往返家里和单位,因为单位是用的代理上网,家里是直接连接.因此每次都要修改IE的代理设置,虽然是个小事,但是每次都要修改总是有点烦 ,于是参考GOOGLE,写了一个自动配置代理的脚本.这 ...
- Compiler Theory(编译原理)、词法/语法/AST/中间代码优化在Webshell检测上的应用
catalog . 引论 . 构建一个编译器的相关科学 . 程序设计语言基础 . 一个简单的语法制导翻译器 . 简单表达式的翻译器(源代码示例) . 词法分析 . 生成中间代码 . 词法分析器的实现 ...
随机推荐
- 《Spring1之第三次站立会议》
<第三次站立会议> 昨天:我对自己找到的代码进行了相关的了解后,把它们在编译环境中进行了编译以及接着对代码进行逐步深入了解: 今天:我把小组成员找到的写关于登录界面的代码加到了我的项目工程 ...
- mianshi
https://blog.csdn.net/u012557610/article/details/80350099 https://blog.csdn.net/liuqiyao_01/article/ ...
- c++课的圆周面积
又回顾了一下一两个月没动过的类,似乎又有点手生了,不过还好还可以做. 在栋哥的推荐下下载了一个vs2015,表示从dev的白鼠形式的简单操作缓过来还有些不习惯呢,不过有些功能,例如诊断还是挺好用的 这 ...
- Hibernate 延迟加载 分析
出处:http://www.ibm.com/developerworks/cn/java/j-lo-hibernatelazy/#icomments Hibernate 的延迟加载(lazy load ...
- java中的装箱与拆箱
什么是自动装箱拆箱 基本数据类型的自动装箱(autoboxing).拆箱(unboxing)是自J2SE 5.0开始提供的功能. 一般我们要创建一个类的对象实例的时候,我们会这样: Class a = ...
- 解决在Mac上用pyenv安装python3失败的问题
背景 前段时间在本地Mac系统上要跑一个python3写的压测脚本. Mac默认安装的是python2, 而且很多软件依赖的也是python2. 为了不影响现有系统其它软件, 当时安装了pyenv来实 ...
- Alpha阶段敏捷冲刺⑧
1.提供当天站立式会议照片一张. 每个人的工作 (有work item 的ID),并将其记录在码云项目管理中: 昨天已完成的工作. 报表能和账单数据结合起来 工作中遇到的困难. 后端和程序的交互还是没 ...
- 我所理解的Delphi中的数组类型
数组可以使Object Pascal所拥有的任何数据类型,数组是一些数值的简单集合. var MyArray: ..] of Integer; { 声明一个数组包括5个整数数值} b ...
- C语言以字符形式读写文件
一.字符读取函数 fgetc (一).函数介绍 fgetc 是 file get char 的缩写,意思是从指定的文件中读取一个字符.函数原型为: int fgetc(FILE* fp) fp 为文件 ...
- 【Java并发编程】之十二:线程间通信中notifyAll造成的早期通知问题
如果线程在等待时接到通知,但线程等待的条件还不满足,此时,线程接到的就是早期通知,如果条件满足的时间很短,但很快又改变了,而变得不再满足,这时也将发生早期通知.这种现象听起来很奇怪,下面通过一个示例程 ...