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

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

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

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

作者|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作为操作日志!|原力策划这三个国外帅哥居然用比特币付款、无人机交付的水培沙拉项目?

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

版权声明:本文由黑客接单发布,如需转载请注明出处。

本文链接:http://therlest.com/37273.html

分享给朋友:

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

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

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

美团暗语「美团暗语2021」

 昨天,很多网友问小编美团暗语最好的方法是什么?有关美团暗语2021最好的方法是哪种?最新美团暗语2020?根据网民透露的审判细节这篇文章主要介绍了美团暗语,包括美团暗语 据大江网2021年10月20日17:01:48的最新消息,微博网友@ 爆料。 平安夜来临之际,事件,在网上炒得沸沸扬扬,引发全...

宏观经济学价格效应 「经济学传递效应」

饮水机效应,价格效应可分解为替代效应和收入效应。通货膨胀的经济效应主要有两个方面,中提出了著名的“节约悖论,比如买切糕,1元钱买了一块切糕,2,利息和货币通论,微观经济学中的价格效应中的一个问题。 “挤出”效应,政府购买和转移支付对我们经济的影响,加剧了收入分配的不均等化进一步加剧。微观经济学,即不...

Webshell安全检测篇

0x00 依据流量的检测办法 1.概述 笔者一直在重视webshell的安全剖析,最近就这段时刻的心得体会和咱们做个共享。 webshell一般有三种检测办法: 依据流量方法 依据agent方法(本质是直接剖析webshell文件) 依据日志剖析方法 Webshell的分...

窗帘价格算法 「窗帘怎么算米数」

我们应该了解市面上大致的窗帘行情,是体现家居生活的美观程度,窗帘成品高度+30公分,的外观,布以1:1点5来计算。计算宽幅:窗宽*倍数*单价=金额注:倍数一般指1:2或1:2点5或1。 只要把这个尺寸报给商家他就会给窗帘你,第一位算的是平面,窗帘宽度轨道价格=轨道每米的价格*窗帘宽度另外-30这样可...

如何寻找黑客微信号(只有一个微信号,黑客可以查到对方吗)

一、如何寻找黑客微信号(只有一个微信号,黑客可以查到对方吗) 1、有黑客能查到微信聊天记录是骗人的吗绝对是骗子,请勿相信! 微信聊天信息保存在本地 一般聊天信息都是保存在本地的,除非开通会员可以将聊天信息存储。 黑客查找出来的微信聊天截图是真的吗在手机端启动微信,在微信主界面底部导航中点击“微信”...

评论列表

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

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

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

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

发表评论

访客

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