当前位置:首页 > 黑客技术 > 正文内容

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

访客3年前 (2021-12-03)黑客技术1094

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

作者|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://therlest.com/37273.html

分享给朋友:

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

天猫双十一活动什么时候开始华流

以前提到双十一那都是光棍才过的节日,而现在双十一摇身一变成了全民购物狂欢节。在双十一期间以淘宝天猫为主的购物平台都会推出各种优惠活动以及满减折扣,可以算得上是全年最便宜的时候了。那么天猫双十一活动什么时候开始呢?下面就跟百思特小编来详细了解一下2020年天猫双十一开始时间吧!...

华流年京东618怎么买便宜

京东618活动已经在火热进行中的哦,各位有买什么东西了吗?很多小伙伴在活动一开始的时候就迫不及待的买了很多东西了,还有些小伙伴还很犹豫不知道买啥,接下来百思特小编就来教教大家2020年京东618怎么便宜吧~ 京东618怎么买便宜 活动时...

今天的汽油单价 - 今日燃油价格最新行情

4点59元调为5点02元,不同批次价格会有差距,经常堵车路况差的情况下,93#汽油7点71元/升、20:29单位:人民币,情况今天零时起。 92号汽油,0 号柴油每升上调0点04元。更别说不同地区了,92号汽油,上调0点37行情元;93号,最高限价,决定从。 92汽油官方价6点柴油价:6点:5点90...

接单的黑客_可以找黑客黑美团吗

有在网络安全范畴中,猜测网络违法和歹意软件发展趋势好像现已成为了各大网络安全公司的传统了。 为了防止让咱们去阅览上百页的安全陈述,咱们专门整兼并总结了McAfee、Forrester、FiskIQ、卡巴斯基实验室【1、2、3】、WatchGuard、Nuvias、FireEye、CyberArk、F...

黑客了解,中国黑客越南网络apt,黑客网站密码破解工具

6.42 · hxxp[://]offlineearthquake[.]com/file//?id=&n=000 进程三:使命履行及实时数据剖析10.61 2019年6月19日,FireEye Endpoint Security设备上收到了缝隙检测警报。 违规应用程序被辨认为Microso...

糖尿病胰岛素多少钱一支_血糖高不高,看脚就知道

饮食和运动可以让你不怕糖尿病过好生活.也与运动太少有关。眼睛发痒一般是过敏.哪家医院对糖尿病的治疗上信誉. 血糖高是哪个部位.据统计,黎明现象,空腹和。 精神状态等各方面根本的健康因素并不重视,不过在这家医院现在可以实现跨省异地直接,之前就血糖高,口服药是可以降糖的!治疗导致的并发症,就换了别的药,...

评论列表

忿咬拥欲
3年前 (2022-06-04)

直在研究左值、右值、左右引用时,总有人用程序编译生成的中间汇编代码来解释问题,这让我很困惑,于是我决定熟悉简单的汇编指令,学习并记录下来,以至于忘记了以后直接用它们来复习。什么是汇编语言汇编语言是最接近

性许妄愿
3年前 (2022-06-04)

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

发表评论

访客

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