ATT汇编与Intel汇编区别

以下内容源于网络资源的学习与整理,如有侵权请告知删除。

参考博客

Linux 汇编语言开发指南 Intel 格式--AT&T 格式_51CTO博客_at&t和intel汇编语法

前言

X86汇编语言有两种语法风格,即Intel汇编风格和AT&T汇编风格。其中DOS操作系统采用Intel汇编风格,而Linux内核源代码采用AT&T汇编风格。下面将简单介绍这两种风格的区别。

一、联系

Unix系统最初是为了PDP-11而开发的,曾先后被移植到VAX及68000系列的处理器,这些处理器都采用AT&T汇编风格,所以Unix源代码中的汇编部分也采用 AT&T 汇编风格。当 Unix 被移植到 i386 处理器时,为了省事也采用了 AT&T 的汇编风格,而非i386处理器所希望的Intel 汇编风格。Linux 作为 Unix 家族的一员,它的很多内容都发源于 Unix,所以 Linux 内核源代码也采用 AT&T 汇编风格。

尽管 AT&T 汇编语言与 Intel 汇编语言在语法上有一定的差异,但所基于的硬件知识是相同的,因此如果你熟悉 Intel 的语法格式,那么你也可以很容易地把它“移植“到 AT&T 来。

二、前缀

在 Intel 的语法中,寄存器和和立即数都没有前缀;但是在 AT&T 中,寄存器前冠以“%”,而立即数前冠以“$”。

在 Intel 的语法中,十六进制和二进制立即数后缀分别冠以“h”和“b”;而在 AT&T 中,十六进制立即数前冠以“0x”。

Intel 语法AT&T 语法
mov eax,8movl $8,%eax
mov ebx,0ffffhmovl $0xffff,%ebx
int 80hint $0x80

三、操作数的方向

Intel 与 AT&T 操作数的方向正好相反。

在 Intel 语法中,第一个操作数是目的操作数,第二个操作数是源操作数。

在 AT&T 中,第一个数是源操作数,第二个数是目的操作数。

由此可以看出,AT&T 的语法符合人们通常的阅读习惯。

Intel语法AT&T语法
mov eax,[ecx]movl (%ecx),%eax

四、内存单元操作数

从上面的例子可以看出,内存操作数也有所不同。

在 Intel 的语法中,基寄存器用“[ ]”括起来;在 AT&T 中,基寄存器用“( )”括起来。 

IntelAT&T
mov eax,[ebx+5]movl 5(%ebx),%eax 

五、间接寻址方式

与 Intel 的语法比较,AT&T 间接寻址方式可能更晦涩难懂一些。

Intel 的指令格式是:

segreg:[base+index*scale+disp]

AT&T 的指令格式是:

%segreg:disp(base,index,scale)

其中index/scale/disp/segreg 全部是可选的,完全可以简化掉。

如果没有指定 scale 而指定了index,则 scale 的缺省值为 1。

segreg 段寄存器依赖于指令以及应用程序是运行在实模式还是保护模式下。在实模式下它依赖于指令,在保护模式下segreg 是多余的。

在AT&T 中,当立即数用在 scale/disp 中时,不应当在其前冠以“$”前缀。

Intel 语法

指令 segreg:[base+index*scale+disp]

AT&T 语法

指令 %segreg:disp(base,index,scale)

mov eax,[ebx+20h]       movl 0x20(%ebx),%eax
add eax,[ebx+ecx*2h     addl (%ebx,%ecx,0x2),%eax
lea eax,[ebx+ecx]           leal (%ebx,%ecx),%eax
sub eax,[ebx+ecx*4h-20h]     subl -0x20(%ebx,%ecx,0x4),%eax

从表中可以看出,AT&T 的语法比较晦涩难懂,因为[base+index*scale+disp]一眼就可以看出其含义,而 disp(base,index,scale)则不可能做到这点。

这种寻址方式常常用在访问数组中某个特定元素内的一个字段,其中,base 为数组的起始地址,scale 为每个数组元素的大小,index 为下标。如果数组元素还是一个结构,则 disp 为具体字段在结构中的位移。

六、操作码的后缀

在 AT&T 的操作码后面有一个后缀,其含义就是指出操作码的大小。“l”表示长整数(32 位),“w”表示字(16 位),“b”表示字节(8 位)。

在 Intel 的语法中,则要在内存单元操作数的前面加上 byte ptr、 word ptr 和 dword ptr,“dword”对应“long”。

Intel 语法AT&T 语法
mov al,blmovb %bl,%al
mov ax,bxmovw %bx,%ax
mov eax,ebxmovl %ebx,%eax
mov eax, dword ptr [ebx]movl (%ebx),%eax

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/460675.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Windows Phone 8初学者开发—第7部分:本地化应用程序

Windows Phone 8初学者开发—第7部分:本地化应用程序 原文 Windows Phone 8初学者开发—第7部分:本地化应用程序 第7部分:本地化应用程序 原文地址: http://channel9.msdn.com/Series/Windows-Phone-8-Development-for-Absolute-Beginners/Pa…

linux shell 上传,下载ftp文件

#####从ftp服务器上的/home/data 到 本地的/home/databackup#####!/bin/bash ftp -n<<! open 192.168.1.171 user guest 123456 binary cd /home/data lcd /home/databackup promptmget *close bye ! 2. ftp自动登录上传文件。 ####本地的/home/databackup to ftp服务器…

ARM官方汇编指令

以下内容源于网络资源的学习与整理&#xff0c;如有侵权请告知删除。 参考内容 &#xff08;1&#xff09;文档《ARM汇编指令集汇总》 &#xff08;2&#xff09;文档《ARM汇编手册》 &#xff08;3&#xff09;文档《ARM Software Development Toolkit User Guide》 内容总结…

C# 使用printDocument1.Print打印时不显示 正在打印对话框(里面还有一个讨厌的取消按钮)...

C#使用printDocument1.Print打印时不显示正在打印对话框有两种方法 第一种&#xff0c;使用PrintController PrintController printController new StandardPrintController(); printDocument1.PrintController printController; printDocument1.Print(); 第二种&am…

audio 标签简介

定义和用法 <audio> 标签定义声音&#xff0c;比如音乐或其他音频流。 实例 一段简单的 HTML 5 音频&#xff1a; <audio src"someaudio.wav"> 您的浏览器不支持 audio 标签。 </audio> 提示和注释 提示&#xff1a;可以在开始标签和结束标签之间放…

合法立即数与非法立即数

ARM指令都是32位&#xff0c;除了指令标记和操作标记&#xff0c;本身只能附带很少位数的立即数。因此立即数有合法和非法之分。 合法立即数&#xff1a;经过任意位数的移位后非零部分可以用8位表示的即为合法立即数。 ldr伪指令可以不用人为去判断合法立即数。

magento 瘦身数据库

2019独角兽企业重金招聘Python工程师标准>>> 2013/4/1更新 有两种方式&#xff0c;一种在后台设置自动清除log数据 System > Configuration > Advanced > System 打开 Log Cleaning 还有一种自然是直接清理数据库 truncate dataflow_batch_export; truncat…

GNU汇编程序中某些符号的含义

&#xff08;1&#xff09; 或者 # 或者 /**/ 用来做注释。可以在行首也可以在代码后面同一行直接跟&#xff0c;和C语言中//类似。 #用来做注释&#xff0c;一般放在行首&#xff0c;表示这一行都是注释而不是代码。 /**/也可以用来做注释。 &#xff08;2&#xff09;冒号&am…

推荐给大家一个下载软件的好网站—MSDN I Tell you

http://msdn.itellyou.cn/转载于:https://www.cnblogs.com/Charlie-Gou/p/3460180.html

大数据时代的移动即时通讯

随着大数据的到来&#xff0c;第三方开放API的服务商越来越多&#xff0c;数据的挖掘和展示也在不断的更新。首先值得广大手机用户骄傲的事情&#xff0c;在移动通讯方面有了长足的发展&#xff0c;比如说你正在工作的时候&#xff0c;接听电话和打开视频的速度都相同的话&…

常见的GNU汇编伪指令

&#xff08;1&#xff09;.global .global _start 给_start外部链接属性 &#xff08;2&#xff09;.section .section .text .section用来指定段的&#xff0c;此句指定当前段为代码段 &#xff08;3&#xff09;.ascii 或.byte或 .short或 .long或 .word …

领域驱动设计和实践(转:http://kb.cnblogs.com/page/112298/)

引言 软件系统面向对象的设计思想可谓历史悠久&#xff0c;20世纪70年代的Smalltalk可以说是面向对象语言的经典&#xff0c;直到今天我们依然将这门语言视为面向对象语言的基础。随着编程语言和技术的发展&#xff0c;各种语言特性层出不穷&#xff0c;面向对象是大部分语言的…

CPU架构的简介

以下内容源于网络资源的学习与整理&#xff0c;如有侵权请告知删除。 注意&#xff0c;这篇文章是很早前发布的&#xff0c;里面的数据与描述与当下可能不符&#xff0c;仅当常识认知用。 CPU发展至今存在着很多种架构&#xff0c;比如x86架构、ARM架构、MIPS架构、PowerPC架构…

一个10年SEO工作者的35个SEO经验

当我第一次开始搜索引擎优化就好像是在昨天&#xff0c;但实际上我已经做了整整十年。十年是一个相当长的时期&#xff0c;即使世事变迁&#xff0c;也有了一些我了解到的经过了时间考验的经验&#xff0c;我决定分享给大家&#xff0c;这样你就不会犯同样的错误。 1、无法保证…

as3调用外部swf里的类的方法

as3项目要调用外部swf里的类有3种方法&#xff1a; 1.将外部的swf发布为swc&#xff0c;使用时将swc引用添加到相应的项目中&#xff0c;这应该是最简单的一种引用。不过当项目中的类或组件比较多时就会使项目发布生成的swf文件大小过大; 2.通过资源绑定外部的&#xff0c;然后…

汇编语言与汇编器

以下内容源于网络资源的学习与整理&#xff0c;如有其侵权请告知删除。 一、汇编语言概述 机器指令集&#xff08;由众多机器码指令构成的集合&#xff09;是由CPU的设计者制定的&#xff0c;CPU的内部电路设计就是为了实现这些指令集的功能。可以这样理解&#xff0c;机器指令…

chmod常见用法

1 功能 改变文件的访问权限。主要是读、写、执行权限。 2 说明 2.1 权限种类 r  读 w  写 x  执行(或目录的访问权) X  只有目标文件对某些用户是可执行的或该目标文件是目录时才追加x属性 s  同时设定用户或组ID t  粘滞位&#xff08;删除或移动&#xff09; 2.2…

网络套接字socket的简介

以下内容源于C语言中文网的学习与整理&#xff0c;非原创&#xff0c;如有侵权请告知删除。 总结 socket的中文翻译是“套接字”&#xff0c;它是计算机之间进行通信的一种约定或一种方式。 套接字的典型应用就是web服务器和浏览器。 在Unix/Linux中&#xff0c;网络连接也是一…

VB6 无法加载ieframe.dll,导致不能使用 浏览器控件--(转载)

VB6编程中&#xff0c;如果使用了WebBrowser控件&#xff0c;保存关闭工程后再次打开时会出现错误提示&#xff1a;文件未找到: c:\windows\sytem32\ieframe.dll\1--继续加载工程吗&#xff1f;然后你就发现原先的WebBrowser控件变成一个PictureBox了&#xff0c;无法正常使用。…

IP、MAC和端口号

以下内容源于C语言中文网资料的学习与整理&#xff0c;非原创&#xff0c;如有侵权请告知删除。 在茫茫的互联网海洋中&#xff0c;要找到一台计算机非常不容易&#xff0c;有三个要素必须具备&#xff0c;它们分别是 IP 地址、MAC 地址和端口号。 IP地址 IP地址是 Internet Pr…