AT&T汇编语法与x86语法基本区别
AT&T汇编和8086汇编语言虽然两者很相似,但是还是不能根据8086的语法规则来读AT&T汇编的吧,所以还是要看看AT&T汇编的语法规则,因为在读内核代码时,跟硬件打交道的部分代码是用AT&T汇编编写的,所以不可避免的会遇到AT&T汇编,下面先来看看AT&T汇编的语法规则吧。
一、 大小写
INTEL格式的指令使用大写字母,而AT&T格式的使用小写字母。
例:
INTEL AT&T
MOV EAX,EBX movl %ebx,%eax
二、 操作数赋值方向
在INTEL语法中,第一个表示目的操作数,第二个表示源操作数,赋值方向从右向左。
AT&T语法第一个为源操作数,第二个为目的操作数,方向从左到右,合乎自然。
例:
INTEL AT&T
MOV EAX,EBX movl %ebx,%eax
三、前缀
在 INTEL 语法中寄存器和立即数不需要前缀;AT&T 中寄存器需要加前缀“%” ;立即数
需要加前缀“$” 。
例:
INTEL AT&T
MOV EAX,1 movl $1,%eax
符号常数直接引用,不需要加前缀,如:movl value , %ebx,value为一常数;在符
号前加前缀$表示引用符号地址, 如movl $value, %ebx,是将value的地址放到 ebx中。
总线锁定前缀“lock” :总线锁定操作。 “lock”前缀在Linux 核心代码中使用很多,特
别是SMP代码中。当总线锁定后其它CPU不能存取锁定地址处的内存单元。
远程跳转指令和子过程调用指令的操作码使用前缀“l“,分别为 ljmp,lcall,与之
相应的返回指令伪lret。
例:
INTEL AT&T
CALL FAR SECTION:OFFSET lcall $secion:$offset
JMP FAR SECTION:OFFSET ljmp $secion:$offset
RET FAR SATCK_ADJUST lret $stack_adjust
四、间接寻址语法
INTEL 中基地址使用“[” 、“]” ,而在 AT&T 中使用“(”、“)” ;另外处理复杂操作数的
语法 也 不同 , INTEL 为 Segreg:[base+index*scale+disp] , 而在 AT&T 中为
%segreg:disp(base,index,sale),其中segreg,index,scale,disp都是可选的,在指定
index而没有显式指定Scale的情况下使用默认值 1。Scale和 disp不需要加前缀“&” 。
INTEL AT&T
Instr
foo,segreg:[base+index*scale+disp]
instr
%segreg:disp(base,index,scale),foo
五、 后缀
AT&T 语法中大部分指令操作码的最后一个字母表示操作数大小, “b”表示 byte(一个
字节) ;“w”表示 word(2 个字节) ;“l”表示 long(4 个字节) 。INTEL 中处理内存操作数
时也有类似的语法如:BYTE PTR、WORD PTR、DWORD PTR。
例:
INTEL AT&T
mov al, bl movb %bl,%al
mov ax,bx movw %bx,%ax
mov eax, dword ptr [ebx] movl (%ebx), %eax
在 AT&T 汇编指令中,操作数扩展指令有两个后缀,一个指定源操作数的字长,另一个
指定目标操作数的字长。AT&T 的符号扩展指令的为“movs” ,零扩展指令为“movz” (相应
的 Intel指令为“movsx”和“movzx”) 。因此, “movsbl %al,%edx”表示对寄存器 al 中的
字节数据进行字节到长字的符号扩展,计算结果存放在寄存器edx中。下面是一些允许的操
作数扩展后缀:
bl: 字节->长字
bw: 字节->字
wl: 字->长字
跳转指令标号后的后缀表示跳转方向, “f” 表示向前 (forward) , “b” 表示向后 (back) 。
例:
jmp 1f
jmp 1b
原文链接:https://blog.csdn.net/bigloomy/article/details/6581754
AT&T汇编语法与x86语法基本区别的更多相关文章
- 32位汇编第一讲x86和8086的区别,以及OllyDbg调试器的使用
32位汇编第一讲x86和8086的区别,以及OllyDbg调试器的使用 一丶32位(x86也称为80386)与8086(16位)汇编的区别 1.寄存器的改变 AX 变为 EAX 可以这样想,16位通 ...
- .NET LINQ查询语法与方法语法
LINQ 查询语法与方法语法 通过使用 C# 3.0 中引入的声明性查询语法,介绍性 LINQ 文档中的多数查询都被编写为查询表达式. 但是,.NET 公共语言运行时 (CLR) 本身并不具 ...
- 让 zend studio 识别 Phalcon语法并且进行语法提示
让 zend studio 识别 Phalcon语法并且进行语法提示 https://github.com/phalcon/phalcon-devtools/tree/master/ide 下载解压 ...
- OC语法3——点语法,self关键字
点语法: 为了给程序员提供便捷,OC中也引入了点语法.不过它和Java中点语法的意义是完全不同的. 在Java中无论调用任何方法,还是访问public类型的成员变量都是用点语法(.号). 而在OC ...
- 【Swfit】Swift与OC两种语法写单例的区别
Swift与OC两种语法写单例的区别 例如写一个NetworkTools的单例 (1)OC写单例 + (instancetype)sharedNetworkTools { static id inst ...
- python学习第五讲,python基础语法之函数语法,与Import导入模块.
目录 python学习第五讲,python基础语法之函数语法,与Import导入模块. 一丶函数简介 1.函数语法定义 2.函数的调用 3.函数的文档注释 4.函数的参数 5.函数的形参跟实参 6.函 ...
- 如何让 zend studio 10 识别 Phalcon语法并且进行语法提示
让 zend studio 10 识别 Phalcon语法并且进行语法提示 https://github.com/rogerthomas84/PhalconPHPDoc 下载解压后,把里面 phalc ...
- php语法同java语法的基本区别(实例项目需求,php才能熟)
php语法同java语法的基本区别(实例项目需求,php才能熟) 一.总结 看下面 二.PHP基本语法以及和Java的区别 .表示字符串相加 ->同Java中的. $作为变量的前缀,除此之外,变 ...
- C#3.0新增功能09 LINQ 基础07 LINQ 中的查询语法和方法语法
连载目录 [已更新最新开发文章,点击查看详细] 介绍性的语言集成查询 (LINQ) 文档中的大多数查询是使用 LINQ 声明性查询语法编写的.但是在编译代码时,查询语法必须转换为针对 .NET ...
随机推荐
- 远见而明察近观若明火|Centos7.6环境基于Prometheus和Grafana结合钉钉机器人打造全时监控(预警)Docker容器服务系统
原文转载自「刘悦的技术博客」https://v3u.cn/a_id_181 我们知道,奉行长期主义的网络公司,势必应在软件开发流程管理体系上具备规范意识,即代码提交有CR(CodeReview),功能 ...
- Sphere类定义
这个类是球体,也就是一会要显示的球体了.这个类继承于Geometrics类,并实现了自己的碰撞检测,碰撞原理,书上也说的很清楚了啊,大家多看.然后对照代码就明白了. 类定义: #pragma once ...
- 青峰Flutter视频播放软件
下载地址: https://github.com/patton88/peak_flutter_player/raw/master/peak_flutter_player_v1.1.5_release0 ...
- 开源深度思考 - In Community We Trust
作者 | 黄东旭,PingCAP 联合创始人&CTO 出品 | CSDN(ID:CSDNnews) 业界一直流传着黄东旭的传说:小学三年级开始写代码,四五年级学习C语言,初中毕业时,已经能够用 ...
- 美女 Committer 手把手教你使用海豚调度
还在为选哪个调度发愁么?还在为查使用手册愁眉不展么?来来来,先瞧一眼海豚调度的 Slogan:调度选的好,下班回家早.调度用的对,半夜安心睡.为充分贯彻这一宗旨,海豚调度一条龙服务来了,特地邀请海豚社 ...
- javaScript 事件循环机制
JavaScript是单线程的编程语言,只能同一时间内做一件事.但是在遇到异步事件的时候,js线程并没有阻塞,还会继续执行,这就是因为JS有事件循环机制. 事件循环流程总结 主线程开始执行一段代码, ...
- L O V E
Part of the content comes from the Internet.If there is any infringement, please let me know and I ' ...
- ubuntu生成ssh_key
ssh-keygen cat ~/.ssh/id_rsa.pub
- ubuntu下安装python
一.安装python3.6 sudo add-apt-repository ppa:jonathonf/python-3.6 如显示不能添加"'ppa:~jonathonf/ubuntu/p ...
- SDIO移植
1.拷贝 STM32F4xx_DSP_StdPeriph_Lib_V1.8.0\Utilities\STM32_EVAL\STM324x7I_EVAL 目录下的stm324x7i_eval_sdio_ ...