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 . 引论 . 构建一个编译器的相关科学 . 程序设计语言基础 . 一个简单的语法制导翻译器 . 简单表达式的翻译器(源代码示例) . 词法分析 . 生成中间代码 . 词法分析器的实现 ...
随机推荐
- java对文件的操作
1.按字节读取文件内容2.按字符读取文件内容3.按行读取文件内容 4.随机读取文件内容 public class ReadFromFile { /** * 以字节为单位读取文件,常用 ...
- elasticsearch文档-字段的mapping
mapping == Mapping是指定义如何将document映射到搜索引擎的过程,比如一个字段是否可以查询以及如何分词等,一个索引可以存储含有不同"mapping types" ...
- 简单复利计算c语言实现
#include<stdio.h>#include<math.h>float i; //利率 float p; //期初金额 float F; //未来值 int n; //期 ...
- beta 发布的相关评论
1. 礼物挑选小工具 飞天小女警 这个项目的创意独具匠心,贴近实际,令人耳目一新,网站的页面也是玫红色的,配色让人感到很温馨,对礼物的筛选方式很有趣,使用的记录特殊日子的方法来提醒自己挑选礼 ...
- es6 let关键字
1.let关键字 var arr = [ ]; for(var i=0; i<10; i++){ arr [i] = function(){ alert(i) } } arr [8](); // ...
- rocketmq 主机负载异常飙高问题的解决
最近在部署rocketmq到物理机时, 发现并解决了一个主机Load异常飙高的问题, 觉得有必要记录一下. 我们采用了rocketmq(https://github.com/alibaba/Rocke ...
- iframe & cors
iframe & cors <!DOCTYPE html> <html lang="zh-Hans"> <head> <meta ...
- HTML之绝对路径与相对路径
路径指文件存放的位置,在网页中利用路径可以引用文件,插入图像.视频等.表示路径的方法有两种:相对路径,绝对路径.以下讨论均是在HTML环境下进行. 相对路径 相对路径是指目标相对于当前文件的路径,网页 ...
- 深入理解JAVA虚拟机阅读笔记2——垃圾回收
线程私有的程序计数器.虚拟机栈和本地方法栈随线程而生,随线程而灭.栈中的栈帧随方法的进入和退出有条不紊的入栈和出栈. 而Java堆和方法区因为需要多大内存.创建多少对象都是不确定的,因此这两个区域是垃 ...
- static关键字的总结
C++的static有两种用法:面向过程程序设计中的static和面向对象程序设计中的static.前者应用于普通变量和函数,不涉及类:后者主要说明static在类中的作用. 1.面向过程设计中的st ...