当前位置: 首页 > 编程日记 > 正文

ATT与Intel汇编语言的比较

转自 陈莉君 一书《深入分析Linux内核源码》

http://www.kerneltravel.net/kernel-book/第二章%20Linux运行的硬件基础/2.6.1.htm

2.6.1 AT&T与Intel汇编语言的比较

我们知道,Linux是Unix家族的一员,尽管Linux的历史不长,但与其相关的很多事情都发源于Unix。就Linux所使用的386汇编语言而言,它也是起源于Unix。Unix最初是为PDP-11开发的,曾先后被移植到VAX及68000系列的处理器上,这些处理器上的汇编语言都采用的是AT&T的指令格式。当Unix被移植到i386时,自然也就采用了AT&T的汇编语言格式,而不是Intel的格式。尽管这两种汇编语言在语法上有一定的差异,但所基于的硬件知识是相同的,因此,如果你非常熟悉Intel的语法格式,那么你也可以很容易地把它“移植“到AT&T来。下面我们通过对照Intel与AT&T的语法格式,以便于你把过去的知识能很快地“移植”过来。

1.前缀

在Intel的语法中,寄存器和和立即数都没有前缀。但是在AT&T中,寄存器前冠以“%”,而立即数前冠以“$”。在Intel的语法中,十六进制和二进制立即数后缀分别冠以“h”和“b”,而在AT&T中,十六进制立即数前冠以“0x”,表2.2给出几个相应的例子。

表2.2 Intel与AT&T前缀的区别

Intel语法

AT&T语法

mov     eax,8

movl   $8,%eax

mov     ebx,0ffffh

movl   $0xffff,%ebx

int 80h

int      $0x80

2. 操作数的方向

Intel与AT&T操作数的方向正好相反。在Intel语法中,第一个操作数是目的操作数,第二个操作数源操作数。而在AT&T中,第一个数是源操作数,第二个数是目的操作数。由此可以看出,AT&T 的语法符合人们通常的阅读习惯。

例如:在Intel中, mov    eax,[ecx]

在AT&T中,movl  (%ecx),%eax

3.内存单元操作数

从上面的例子可以看出,内存操作数也有所不同。在Intel的语法中,基寄存器用“[]”括起来,而在AT&T中,用“()”括起来。

例如: 在Intel中,mov    eax,[ebx+5]

在AT&T,movl     5(%ebx),%eax

4.间接寻址方式

与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中时,不应当在其前冠以“$”前缀,表2.3给出其语法及几个相应的例子。

表2.3 内存操作数的语法及举例

Intel语法

AT&T语法

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

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

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为具体字段在结构中的位移。

5.操作码的后缀

在上面的例子中你可能已注意到,在AT&T的操作码后面有一个后缀,其含义就是指出操作码的大小。“l”表示长整数(32位),“w”表示字(16位),“b”表示字节(8位)。而在Intel的语法中,则要在内存单元操作数的前面加上byte ptr、 word ptr,和dword ptr,“dword”对应“long”。表2.4给出几个相应的例子。

表2.4 操作码的后缀举例

Intel语法

AT&T语法

Mov     al,bl

movb    %bl,%al

Mov     ax,bx

movw   %bx,%ax

Mov     eax,ebx

movl     %ebx,%eax

Mov     eax, dword ptr [ebx]

movl     (%ebx),%eax

相关文章:

最近,又发现了 Pandas 中三个好用的函数

作者 | luanhz来源 | 小数志导读近日,在github中查看一些他人提交的代码时,发现了Pandas中这三个函数,在特定场景中着实好用,遂成此文以作分享。程序的基本结构大体包含三种,即顺序结构、分支结构和循环结构&#xff0…

Java Web的Maven项目中Properties文件的使用(2)

为什么80%的码农都做不了架构师?>>> 背景 Java Web中常用一些Properties文件进行部署配置,其中如果在里面配置OS的路径,需要跨平台,主要就是考虑win系统的路径是“\”,而Linux的路径是“/”。 …

TCP/IP 计算机网络协议

2019独角兽企业重金招聘Python工程师标准>>> 应用层: (典型设备:应用程序,如FTP,SMTP ,HTTP) DHCP(Dynamic Host Configuration Protocol)动态主机分配协议,使用 UDP 协议工作,主要有两个用途:给…

5分钟速通 AI 计算机视觉发展应用

作者 | 李秋键 出品 | AI科技大本营(ID:rgznai100) 计算机视觉是进步最大、发展最快的领域之一。根据 Global VIEW 的研究,全球计算机视觉市场规模在 2020 的价值为 113 亿 2000 万美元,预计从2021 到 2028 的复合年增长率为 7.3%…

javascript解析json

下载json库 http://www.json.org/json-zh.html自己找javascript的 或者直接去下面的 https://github.com/douglascrockford/JSON-jsphp生成json格式使用页面 <script src"scripts/json.js"></script>alert(data.toJSONString());如果返回false说明没数据…

高德联手凯迪拉克 发布全球首个高精地图应用

6月13日&#xff0c;在CES ASIA活动现场&#xff0c;上汽通用汽车凯迪拉克超级智能驾驶系统&#xff08;Super CruiseTM&#xff09;在国内首发亮相&#xff0c;未来将搭载在凯迪拉克CT6 40T铂金版车型上推向市场。高德地图作为上汽通用汽车在华合作伙伴&#xff0c;将为超级智…

WinDbg安装与使用

WinDbg是微软发布的一款相当优秀的源码级(source-level)调试工具&#xff0c;可以用于Kernel模式调试和用户模式调试&#xff0c;还可以调试Dump文件。 主页&#xff1a;http://msdn.microsoft.com/en-us/windows/hardware/gg463016 下载链接&#xff1a;http://msdl.microsoft…

mysql-5.6 升级 5.7

#准备工作 1、停机 [rootlocalhost local]# /etc/init.d/mysqld stop Shutting down MySQL.. [确定]2、切换版本 [rootlocalhost local]# mv /root/mysql-5.6.27-linux-glibc2.5-x86_64.tar.gz ./mysql-5.7 [rootlocalhost local]# ln -s…

让假图无所遁形,阿里篡改图像检测大赛集结号令打响

近年来&#xff0c;伴随多媒体技术的迅速发展&#xff0c;图像安全隐患随之而来。一些不法分子通过伪造或恶意篡改证件、政府文件、转账记录截图等方式&#xff0c;不仅进行诈骗活动&#xff0c;还带来一些社会问题&#xff1a;2 月 10 日&#xff0c;广西柳州融水苗族自治县赵…

Apache网页优化之网页压缩

Apache网页压缩技术 实验介绍&#xff1a;本实验在虚拟机的Linux系统上搭建http-2.4.2,并在配置过程中开启mod_deflate模块&#xff0c;实现网页的压缩功能&#xff0c;最终通过fiddler抓包工具&#xff0c;验证mod_deflate压缩是否生效。 1、首先将搭建httpd服务所需要的软件包…

推荐阅读的多核编程技术书籍

多核编程技术好书推荐 多核程序设计技术——通过软件多线程提升性能 , 作 者&#xff1a; &#xff08;孟加拉&#xff09;阿克特&#xff08;Akhter&#xff0c;S.&#xff09;&#xff0c;&#xff08;美&#xff09;罗伯茨&#xff08;Roberts&#xff0c;J.&#xff09; 著…

zabbix监控windows(03,08)

监控windows主机&#xff1a;下载zabbix_agents_2.2.3.win.zip &#xff08;zabbix官网下载&#xff09;解压文件&#xff0c;把对应的文件&#xff08;32位或者64位&#xff09;考到C盘根目录(对应目录就OK)并带配置文件&#xff1b;编辑配置文件:zabbix_agentd.win.confLogFi…

Dubbo原理何源码解析之服务暴露

2019独角兽企业重金招聘Python工程师标准>>> 一、框架设计 在官方《Dubbo 用户指南》架构部分&#xff0c;给出了服务调用的整体架构和流程&#xff1a; 另外&#xff0c;在官方《Dubbo 开发指南》框架设计部分&#xff0c;给出了整体设计&#xff1a; 以及暴露服务…

维基百科上的算法和数据结构链接很强大

突然发现维基百科上的算法和数据结构比百度百科强多啦&#xff0c;图文并茂。 其实这个网站不错&#xff1a;http://www.sorting-algorithms.com 冒泡排序&#xff1a; bubble冒泡的意思http://zh.wikipedia.org/wiki/%E5%86%92%E6%B3%A1%E6%8E%92%E5%BA%8F-------------------…

基于 OpenCV 的图像阴影去除

作者 | 努比来源 | 小白学视觉我们经常需要通过扫描将纸上的全部内容转换为图像。有很多在线工具可以提高图像的亮度&#xff0c;或者消除图像中的阴影。但是我们可以手动删除阴影吗&#xff1f;当然可以&#xff0c;我们只需要将图像加载到相应的代码中&#xff0c;无需任何应…

not exists 跟not in 纪念一下

转载于:https://www.cnblogs.com/zzzzw/p/4973378.html

jquery $.proxy使用 Jquery实现ready()的源码

jquery $.proxy使用 在某些情况下&#xff0c;我们调用Javascript函数时候&#xff0c;this指针并不一定是我们所期望的那个。例如&#xff1a; 1 //正常的this使用2 $(#myElement).click(function() {3 4 // 这个this是我们所期望的&#xff0c;当前元素的this.5 6 $(…

PHP session回收机制

由于PHP的工作机制&#xff0c;它并没有一个daemon线程&#xff0c;来定时地扫描session信息并判断其是否失效。当一个有效请求发生时&#xff0c;PHP会根据全局变量 session.gc_probability/session.gc_divisor&#xff08;同样可以通过php.ini或者ini_set()函数来修改&#x…

WPF学习拾遗(二)TextBlock换行

原文:WPF学习拾遗&#xff08;二&#xff09;TextBlock换行下午在帮组里的同事解决一个小问题&#xff0c;为了以后方便&#xff0c;把就把它收集一下吧。 新建一个TextBlock作为最基础的一个控件&#xff0c;他所携带的功能相对于其他的控件要来的比较少&#xff0c; 比较值得…

Meta 开发 AI 语音助手,用于创建虚拟世界和实时翻译

编译 | 禾木木 出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09; Meta 在近日的「用人工智能构建元宇宙」的讨论会上&#xff0c;展示了最新的 AI 黑科技 「Builder Bot」 &#xff0c;并且在此次会议上 Meta 公布了关于构建元宇宙的人工智能计划&#xff0c;其中包括…

MySQL的基础

2019独角兽企业重金招聘Python工程师标准>>> 数据库和SQL 什么数据库 数据库是存储在一起的相关数据的集合&#xff0c;这些数据是结构化的&#xff0c;无有害的或不必要的冗余&#xff0c;并为多种应用服务。 什么是SQL 结构化查询语言(Structured Query Language)…

Python:Bug 官网不要了,全迁去 GitHub

近几年&#xff0c;GitHub 开发者数量逐年上升&#xff0c;仅过去一年 GitHub 的新增用户便有 1600 万人&#xff0c;总用户数更是达到了 7300 万——在开源浪潮席卷全球中&#xff0c;GitHub 无疑成为了许多开发者迈入开源的一个重要途径。 Python 开发团队或许正是看中了这一…

最新的全球编程语言,操作系统,web服务器等使用率分析报告

由www.w3techs.com 根据alexa排名前100万的网站数据给出的分析报告&#xff0c;并每天持续更新。1.服务器端编程语言排名 http://w3techs.com/technologies/overview/programming_language/all点评&#xff1a;PHP是最高的&#xff0c;说明目前php是主流&#xff0c;但是asp.ne…

javascript中有关this的使用

this在面向对象编程中非常重要&#xff0c;他的值取决于调用的模式。 在Javascript中有4种调用模式&#xff1a;方法调用模式、函数调用模式、构造器调用和apply调用。 1. 方法调用模式&#xff1a;当一个方法被调用时&#xff0c;this被绑定到该对象。方法可以使用this访问自己…

Vue中v-if和v-show的使用场景

1. 官方文档 https://cn.vuejs.org/v2/guide/conditional.html#v-if-vs-v-show 2. v-if 和 v-show 的区别 2.1 官方解释 v-if 是“真正”的条件渲染&#xff0c;因为它会确保在切换过程中条件块内的事件监听器和子组件适当地被销毁和重建。 v-if 也是惰性的&#xff1a;如果在初…

手机自带的显示基站命令

安卓手机自带快捷指令显示当前的网络信息&#xff0c;不过手机厂商不同&#xff0c;命令也不一样。每次要用时总想不起来命令&#xff0c;记下备用。(1) HTC 安卓手机在拨号键盘输入 *#*#4636#*#* , 选择 “手机信息” (2)三星安卓手机 *#*#4636#*#* , 选择 “手机信息” (3)摩…

LB负载均衡集群 - NAT

前提&#xff1a;客户机 &#xff1a; eth0 192.168.0.200 eth1 192.168.205.129dir主机&#xff1a; eth0 192.168.0.166 eth1 192.168.205.128rs1主机&#xff1a; eth0 192.168.0.207rs2主机&#xff1a; eth0 192.168.0.208rs1 和 rs2的网关是dir 192…

时序预测的三种方式:统计学模型、机器学习、循环神经网络

作者 | luanhz来源 | 小数志导读时序预测是一类经典的问题&#xff0c;在学术界和工业界都有着广泛的研究和应用。甚至说&#xff0c;世间万物加上时间维度后都可抽象为时间序列问题&#xff0c;例如股票价格、天气变化等等。关于时序预测问题的相关理论也极为广泛&#xff0c;…

Python 爬虫练手项目—酒店信息爬取

from bs4 import BeautifulSoup import requests import time import reurl http://search.qyer.com/hotel/89580_4.html urls [http://search.qyer.com/hotel/89580_{}.html.format(str(i)) for i in range(1,10)] # 最多157页 infos [] # print(urls)# 批量爬取数据 def g…

应用交换技术的负载均衡算法

原文出处是&#xff1a;http://hi.baidu.com/ruijievideo/blog/item/5959be1f3c1621ff1bd576d2.html 应用交换技术的负载均衡算法应用交换技术里主要包括四项关键的技术&#xff1a;◆截获和检查流量◆服务器监控健康检查◆负载均衡算法◆会话保持截获和检查流量保证只有合适的…