当前位置:首页 > 网站入侵 > 正文内容

组装说明的组成摘要(汇编语言指令集)

访客3年前 (2021-12-03)网站入侵441

汇编指令(汇编指令入门级整理)

作者|AlbertS

出品|CSDN博客

前言

我们大多数人都是被高级语言宠坏的一代,各种高级语言都在逐渐加入源源不断的新特性汇编语言作为最接近机器指令的最低级语言,很少被直接用来编写程序但是,我真的遇到过一个,以前的同事,写代码的时候因为成员函数权限和可见性的问题,无法正确调用自己想要执行的函数于是,他开始在C代码中嵌入汇编,绕过各种限制,最终得到了自己想要的东西…

因为项目是跨平台的,他发现在Linux上编译代码的时候,汇编代码的语法其实在Linux和Windows之间是不一样的因此,他用一个宏观的定义来判断平台“完美”是的,最后这些代码肯定是重写了,因为可读性太差,最近一直在研究左值、右值、左右引用时,总有人用程序编译生成的中间汇编代码来解释问题,这让我很困惑,于是我决定熟悉简单的汇编指令,学习并记录下来,以至于忘记了以后直接用它们来复习。

什么是汇编语言

汇编语言是最接近机器语言的编程语言,引用百科全书中的一段话解释如下:

汇编语言(汇编语言)是一种用于电子计算机、微处理器、微控制器或其他可编程设备的低级语言,也称为符号语言。汇编语言中,用助记符代替机器指令的操作码,用地址符号或标号代替指令或操作数的地址。汇编语言也被称为第二代计算机语言。

汇编语言产生的原因

对于绝大多数人来说,二进制程序是不可读的,当然有能力的人也能读懂,比如第一代程序员,但是这些人正在走向消亡,直接看二进制是不容易看出他们做了什么的,比如最简单的加法指令在二进制中表示为0000011,如果混在01串的串中很难找到,所以汇编语言主要是解决二进制编码的可读性问题。

汇编与二进制的关系

换句话说,汇编语言就是把显示给机器的二进制代码翻译成人类语言汇编指令是机器指令的助记符,与机器指令一一对应,是一种易读易记的书写格式。有效解决了机器指令编程难的问题,利用编译器将汇编程序翻译成机器指令程序非常方便,比如前面提到的00000011加法指令,对应的汇编指令是ADD,调用汇编程序时会翻译成0000011。

寄存器

说到汇编指令,我们不得不提到寄存器寄存器本身是用来存储数据的,因为CPU本身只负责逻辑运算,数据需要单独存储在其他地方但是,不熟悉登记册的人会有疑问数据不是在硬盘上吗?还是数据没有存储在内存中?所有这些想法都是对的,那么寄存器是用来做什么的呢?

寄存器作用

其实硬盘、内存是用来存储数据的,但是CPU的运算速度远高于内存的读写速度,更不用说从硬盘中取数据了,所以为了避免被拖慢而影响效率,CPU有自己的一级缓存和200位的网络级缓存,有的CPU甚至增加了三级缓存,从这些缓存中读写数据要比内存快很多,但是仍然不可能使用运行快的CPU,所以有寄存器。

寄存器不是后来添加的,而是在初始计算中设计的相比之下,多级缓存出现的比较晚通常,最频繁读写的数据会放在寄存器中,CPU会先读写寄存器,再通过寄存器、与内存交换数据,达到缓冲的目的因为寄存器可以按名称访问,所以访问速度最快,所以也叫零级缓存。

存取速度比较

从上面的描述可以知道,访问速度从高到低依次是:寄存器一级缓存二级缓存和三级缓存内存硬盘至于它们的访问速度,举个例子就很容易理解了,比如烹饪(CPU工作)时,取手中(寄存器)你拿着的肉和蔬菜一定是最快的如果没有,你需要把它们放在案板上(1级缓存)把加工好的菜拿过来,如果不在案板上,就放在更远的洗菜池里(2级缓存)找找看如果还没找到,就去冰箱(3级缓存)我看到了,然后发现家里真的什么都没有然后去楼下的食品店(内存)去买一些,转身发现没有你想要的,最后开车去农贸市场(硬盘)买吧。

通过上面的例子,我们应该能够理解它们的速度关系既然缓存这么快,为什么不用缓存代替内存,或者放2、三级缓存被一级缓存取代?这里有一个成本问题速度越快,价格越高如果你买过机械硬盘和固态硬盘,应该很容易理解。

寄存器分类

有八个常用的x86CPU寄存器:EAX、EBX、ECX、EDX、EDI、ESI、EBP、ESP,据说现在寄存器总数已经超过100个了,找到相关资料我会补充的上述寄存器是最常用的寄存器,这些名称经常出现在编译代码中。

我们常说的32位、64位CPU指的是数据总线的宽度或数量,而寄存器是单米的临时数据和中间结果,所以寄存器中的位数,也就是处理数据的长度,与数据总线的数量是一样的,所以32位CPU对应的寄存器也应该是3位以太网和2位。

常用寄存器用途

上面提到的八个寄存器都有其特定的用途让我们以32位CPU为例,简要说明这些寄存器的功能,并在下表中进行排序:

寄存器EAX、AX、AH、AL的关系

在上面的图标中,每个常用寄存器后面都有其他名称,它们是同一寄存器在不同用途下的不同名称例如,在32位CPU上,e AX是32位寄存器,而AX是EAX的低16位,AH是AX的高8位,AL是AX的低8位它们的对比关系如下:

00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000-4字节|====AX======|-2字节|==ah==|-1字节|==Al==|-1个字节

汇编语言指令

最后说说常见的汇编指令,因为linux和windows下的汇编语法有些不同,所以我们先来学习windows下的汇编指令,然后对比一下它们之间的区别。

数据传送指令

算术运算指令

逻辑运算指令

循环控制指令

转移指令

Linux和windows汇编的区别

如前所述,linux和windows下的汇编语法是不同的事实上,这两种语法差异和系统差异之间并没有绝对的关系一般来说,gcc用在linux上/g编译器,而微软的cl,即MSBUILD,会在windows上使用,所以会因为编译器的不同而产生不同的代码gcc采用ATT的汇编语法格式,MSBUILD采用英特尔的汇编语法格式。

总结

汇编指令是机器指令的助记符,与机器指令一一对应

ATT的汇编语法格式不同于英特尔的汇编语法

常用寄存器:EAX、EBX、ECX、EDX、EDI、ESI、EBP、ESP

访问速度从高到低为:寄存器一级缓存二级缓存三级缓存内存硬盘

常用的汇编指令:mov、je、jmp、call、add、sub、inc、dec、and、or

版权声明:本文为CSDN博主「AlbertS」的原创文章,遵循CC4.0BY-SA版权协议,请附上原始来源链接和此声明。

原文链接:https://blog.csdn.net/albertsh/article/details/(106041560)211211)华为全球分析师大会:HMS Core全球开发者应用集成的数量正在加速,打造全场景智能体验腾讯人均月薪8万,又迷茫又平均?200 万年薪请不到!清华姚班到底有多牛?|力规划量子计算和AI“双拳”进攻时,他们锁定了38种潜在的抗疫药物我们不再使用AOP作为操作日志!|原力策划这三个国外帅哥居然用阅批付款、无人机交付的水培沙拉项目?

扫描二维码推送至手机访问。

版权声明:本文由专业黑客技术知识发布,如需转载请注明出处。

本文链接:https://hkjdpt.com/147828.html

分享给朋友:

“组装说明的组成摘要(汇编语言指令集)” 的相关文章

刺激战场国际服怎么下载苹果手机(免费分享下载教程)

刺激战场安卓ios国服关服怎么办?本期教程笔者将带来《刺激战场》国际服的下载教程。     安卓端下载方法:      安卓用户不能在主流手游市场下载刺激战场亚服,原因是没有运营,各位可直接使用奇游手游加速器下载刺激战场亚服营安装包,奇游下载地址为http://www.qeeyou.cn/spe...

如何打开ceb文件(ceb文件手机该用什么打开)

  中钢招标有限责任公司受某单位 委托,根据《中华人民共和国政府采购法》等有关规定,现对某单位园区维修工程集中采购项目进行其他招标,欢迎合格的供应商前来投标。   项目名称:某单位园区维修工程集中采购项目   项目编号:2140STC32002   项目联系方式:   项目联系人:隗功磊   项目联...

停水通知怎么写(停水通知怎么写简单明了)

  停水通知   01   停水时间   2021年8月24日晚22:00-8月25日上午10:00   02   停水原因   西环路窑岗嘴大桥改造工程进行DN1000主管道碰头,市政低压供水,市政供水段会出现停水现象,二次加压不受影响。   03   停水范围   淠河以西所有...

现在千足金多少钱一克_千足金回收多少钱一克最新

DOL,当然你回收进珠宝店后,今天千足金价格多少钱一克?千足金首饰价格多少钱现在,不然人家怎么学习。QE,一下现在千足金的价格在多少钱一克?一般加工费是一克要.肯定是回收啊,还要千万记住买黄金时。 338元,一般的都不收,2015年5月14日。 如果是急需要一克用钱,回收价格是190元左右每克.并以...

临沂公积金贷款利率是多少,住房公积金能贷款多少

只有在还清前一套住房贷款的前提下才能再使用公积金贷款,具体要看您的月缴存是多少。和交的数量关系不大,缴存比例是多少。贷款利率会结合申请的业务品种、要根据还贷能力。 公积金贷款房价成数、一方缴交住房公积金的,二套房只能贷到60万前提是两个人,请参考。公积金贷款额度住房的计算,四个条件算出的最小值就是借...

如何打开ceb文件(ceb文件手机该用什么打开)

  中钢招标有限责任公司受某单位 委托,根据《中华人民共和国政府采购法》等有关规定,现对某单位园区维修工程集中采购项目进行其他招标,欢迎合格的供应商前来投标。   项目名称:某单位园区维修工程集中采购项目   项目编号:2140STC32002   项目联系方式:   项目联系人:隗功磊   项目联...

评论列表

息了三秋1
3年前 (2022-06-30)

存储数据的,因为CPU本身只负责逻辑运算,数据需要单独存储在其他地方但是,不熟悉登记册的人会有疑问数据不是在硬盘上吗?还是数据没有存储在内存中?所有这些想法都是对的,那么寄存器是用来做什么的呢?寄存器作用其实硬盘、内存是用来存储数据的,但是CPU的运算速度远高于内存的读写速度,更不用说从硬盘中

孤鱼轻禾
3年前 (2022-06-30)

的访问速度,举个例子就很容易理解了,比如烹饪(CPU工作)时,取手中(寄存器)你拿着的肉和蔬菜一定是最快的如果没有,你需要把它们放在案板上(1级缓存)把加工好的菜拿过来,如果不在案板上,

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。