国学经典,永久流传《诗经朗诵全集》
《诗经朗诵全集》带你领略国学经典,永久咏传。...
2023-07-31
作者|艾伯特
出品| CSDN博客
序
我们大多数人都被高级语言宠坏了,各种各样的高级语言正在逐渐增加源源不断的新功能。汇编作为最接近机器指令的低级语言,已经很少被直接用来写程序了。但是我真的遇到过一个,以前的同事,写代码的时候因为成员函数的权限和可见性的问题,无法正确调用自己想要执行的函数。于是,他开始在C++代码中嵌入汇编,绕过了各种问题。
因为项目是跨平台的,所以当代码在Linux上编译时,他发现汇编代码的语法在Linux和Windows之间其实是不一样的。于是,他用一个宏来判断平台,来定义一个“完美”的解决方案。最后这些代码肯定是重写了,因为可读性太差了。最近在学习左值、右值、左引用、右引用的时候,总有人用程序编译生成的中间汇编代码来说明问题,让我觉得很茫然,所以我决定先熟悉一下简单的汇编指令,边学边记,以后可以直接用来复习。
什么是汇编语言?
汇编语言是最接近机器语言的编程语言,机器语言解释为:
汇编语言是电子计算机、微处理器、微控制器或其他可编程设备的低级语言,也称为符号语言。在汇编语言中,助记符用来代替机器指令的操作码,地址符号或标号用来代替指令或操作数的地址。汇编语言也被称为第二代计算机语言。
汇编语言的原因
对于绝大多数人来说,二进制程序是不可读的。当然也有有能力的人看得懂,比如第一代程序员。然而,这种人正在灭绝。直接看二进制不容易看出做了什么。比如最简单的加法指令二进制表示为0000011,如果混在一大串01字符串中就很难找出来。所以汇编语言主要是解决二进制代码的可读性问题。
汇编和二进制的关系
换句话说,汇编语言就是把机器的二进制代码翻译成人类语言。汇编指令是机器指令的助记符,与机器指令一一对应,是一种易读易记的书写格式。有效地解决了机器指令编写困难的问题,编译器可以很容易地将汇编程序翻译成机器指令,比如前面提到的0000011加法指令,对应的汇编指令是ADD,调用汇编程序时会翻译成0000011。
注册
说到汇编指令,寄存器就不得不提了。寄存器本身是用来存储数据的,因为CPU本身只负责逻辑运算。数据需要分开存放在其他地方,但是对于不熟悉寄存器的人来说会有疑问。数据不是存储在硬盘上吗?还是数据不存在于内存中?这些想法都是正确的,那么寄存器是用来做什么的呢?
寄存器功能
其实硬盘和内存都是用来存储数据的,但是CPU的运算速度远高于内存的读写速度,更不用说从硬盘上取数据了。所以为了避免被拖慢,影响效率,所有的CPU都有自己的一级缓存和二级缓存。有些CPU甚至增加了三级缓存。从这些缓存中读写数据要比内存快很多,但是还是无法使用运行速度快的CPU,所以有寄存器。
寄存器不是以后添加的,而是在初始计算中就已经设计好的。相比较而言,多级缓存出现的比较晚。通常,最频繁读写的数据会放在寄存器中。CPU优先读写寄存器,然后通过寄存器和缓存与内存交换数据,达到缓冲的目的。因为寄存器可以通过名字访问,所以访问速度最快,所以也叫零级缓存。
访问速度比较
从上面的描述我们可以知道,访问速度从高到低是:寄存器>一级缓存>二级缓存>三级缓存>内存>硬盘。至于它们的访问速度,举个例子就很容易理解了。比如我们做饭的时候(CPU工作),我们手里拿着的肉和菜(寄存器)一定是最快的。如果没有,我们需要在案板上处理掉它们(一级缓存)。如果不在案板上,就去更远的洗碗池(二级缓存)里找。如果还没找到,就去冰箱里找找(三级缓存)。这个时候你发现家里真的没有。然后去楼下的蔬菜店(记忆)买一些。一轮下来,你发现你什么都不想要。最后,你最好开车去农贸市场(硬盘)买。
通过上面的例子,我们应该可以了解它们的速度关系。既然缓存这么快,为什么不用缓存代替内存,或者把二级和三级缓存都改成一级缓存?这里有一个成本问题。速度越快,价格越高。如果你买过机械硬盘和固态硬盘,应该很好理解。
寄存器分类
有八种常用的x86 CPU寄存器:EAX、EBX、ECX、ed x、EDI、ESI、EBP、ESP。据说现在注册总数已经超过100个。找到相关资料我会补充的。以上寄存器是最常用的,这些名字经常出现在编译后的代码中。
我们常说的32位和64位CPU是指数据总线的宽度或根数,而寄存器是暂时存储数据和中间结果的单元。所以寄存器的位数,也就是处理数据的长度和数据总线的根数是一样的,所以32位CPU对应的寄存器也应该是32位的。
常用寄存器用途
如上所述,八个寄存器有其特定的用途。我们以32位CPU为例,简单说明一下这些寄存器的作用,并在下表中进行整理:
语域EAX、AX、AH和AL之间的关系
在上面的图标中,每个常用寄存器后面都有其他名称。它们是同一语域不同用法下的不同名称。例如,在32位CPU上,e AX是32位寄存器,而AX是EAX的低16位,AH是AX的高8位,AL是AX的低8位。它们的比较关系如下:
00000000 00000000 00000000 00000000|===============EAX===============|---4个字节|======AX=======|---2个字节|==AH===|-----------1个字节|===AL==|---1个字节
汇编语言指令
最后说一下汇编指令,因为linux和windows下的汇编语法有些不同,所以我们先简单了解一下windows下的汇编指令,后面再比较两者的区别。
数据移动指令
算术运算指令
逻辑操作指令
循环控制指令
自反秩序
Linux和windows下汇编的区别
据说linux和windows下的汇编语法不一样。其实两者句法的不同和系统的不同并没有绝对的关系。一般来说,gcc/g++编译器会用在linux上,而微软的cl,MSBUILD,会用在windows上。因此,由于编译器不同,生成的代码也不同。gcc下采用美国电话电报公司的汇编语法格式,MSBUILD采用Intel的汇编语法格式。
摘要
汇编指令是机器指令的助记符,与机器指令一一对应。
美国电话电报公司的汇编语法格式与英特尔的不同。
常用寄存器:EAX、EBX、ECX、EDX、EDI、ESI、EBP、ESP
访问速度从高到低依次为:寄存器>一级缓存>二级缓存>三级缓存>内存>硬盘。
常用的汇编指令:mov,je,jmp,call,add,sub,inc,dec,and,or。
版权声明:本文为CSDN博主“AlbertS”原创文章,遵循CC 4.0 BY-SA版权协议。请附上原始文章和本声明来源的链接。
原文链接:https://blog.csdn.net/albertsh/article/details/106041560
☞华为全球分析师大会:HMS Core全球开发者应用集成的数量加速增长,打造全场景智慧体验☞腾讯人均月薪 8 万,恍恍惚惚,又被平均了?☞200 万年薪请不到!清华姚班到底有多牛?| 原力计划☞量子计算与AI“双拳”出击,他们锁定38种潜在抗疫药物☞我们已经不用AOP做操作日志了!| 原力计划☞国外这三位帅小伙,居然搞了个用比特币付款、无人机运送的水培沙拉项目?
以上内容就是为大家推荐的汇编指令(汇编指令入门级整理 )最佳回答,如果还想搜索其他问题,请收藏本网站或点击搜索更多问题
内容来源于网络仅供参考版权声明:所有来源标注为小樱知识网www.xiaoyin02.com的内容版权均为本站所有,若您需要引用、转载,只需要注明来源及原文链接即可。
本文标题:汇编指令(汇编指令入门级整理 )
本文地址:https://www.xiaoyin02.com/shcs/330616.html
相关文章
热点文章
2021年独生子女补贴新政策是真的吗(独生子女证有有效期吗)
2021年国庆节阅兵仪式几点开始几点结束(2021年国庆节还有阅兵吗)
鼠目寸光一点红是什么生肖动物(鼠目寸光一点红)指什么生肖,紧密
k0到k9的玩法大全(强制gc的玩法和注意事项)
入土为安是什么生肖《入土为安》打一个生肖动物,词语解释
浙江12月底全面停工是真的吗(浙江什么时候放假停工)
如何做t(t怎么把p做哭)
北京口碑最差的三甲医院(北京301医院最擅长什么)