汇编指令入门级整理 – 原力计划(汇编指令详解)-ag凯发k8国际

作者 | alberts

出品 | csdn 博客

前言

我们大都是被高级语言惯坏了的一代,源源不断的新特性正在逐步添加到各类高级语言之中,汇编作为最接近机器指令的低级语言,已经很少被直接拿来写程序了,不过我还真的遇到了一个,那是之前的一个同事,因为在写代码时遇到了成员函数权限及可见性的问题,导致他无法正确调用想执行的函数,结果他就开始在 c 代码里嵌入汇编了,绕过了种种限制终于如愿以偿,但是读代码的我们傻眼了…

因为项目是跨平台的,代码推送的 linux 上编译的时候他才发现,汇编代码的语法在 linux 和 windows 上居然是不一样的,结果他又用一个判断平台的宏定义“完美”的解决了,最终这些代码肯定是重写了啊,因为可读性太差了,最近在学习左值、右值、左引用和右引用的时候,总是有人用程序编译生成的中间汇编代码来解释问题,看得我迷迷糊糊,所以决定熟悉一下简单的汇编指令,边学习边记录,方便今后忘记了可以直接拿来复习。

什么是汇编语言

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

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

汇编语言产生的原因

对于绝大多数人来说,二进制程序是不可读的,当然有能人可以读,比如第一代程序员,但这类人快灭绝了,直接看二进制不容易看出来究竟做了什么事情,比如最简单的加法指令二进制表示为 00000011,如果它混在一大串01字符串中就很难把它找出来,所以汇编语言主要就是为了解决二进制编码的可读性问题。

汇编与二进制的关系

换句话来说,汇编语言就是把给机器看的二进制编码翻译成人话,汇编指令是机器指令的助记符,与机器指令是一一对应的关系,是一种便于阅读和记忆的书写格式。有效地解决了机器指令编写程序难度大的问题,并且使用编译器,可以很方便的把汇编程序转译成机器指令程序,比如之前提到的 00000011 加法指令,对应的汇编指令是 add,在调用汇编器时就会把 add 翻译成 00000011。

寄存器

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

寄存器作用

其实硬盘、内存都是用来存储数据的,但是 cpu 的运算速度远高于内存的读写速度,更不用说从硬盘上取数据了,所以为了避免被拖慢速度影响效率,cpu 都自带一级缓存和二级缓存,一些 cpu 甚至增加了三级缓存,从这些缓存中读写数据要比内存快很多,但是还是无法使用飞速运转的 cpu,所以才会有寄存器的存在。

寄存器不是后来增加的,在最初的计算中就已经设计出来,相比而言,多级缓存出现的更晚一些,通常那些最频繁读写的数据都会被放在寄存器里面,cpu 优先读写寄存器,再通过寄存器、缓存跟内存来交换数据,达到缓冲的目的,因为可以通过名称访问寄存器,这样访问速度是最快的,因此也被称为零级缓存。

存取速度比较

通过上面的叙述我们可以知道存取速度从高到低分别是: 寄存器 > 1级缓存 > 2级缓存 > 3级缓存 > 内存 > 硬盘,关于它们的存取速度,举个例子很容易就能明白了,比如我们做菜(cpu工作)时,取手中(寄存器)正拿着的肉和蔬菜肯定是最快的,如果没有就需要把案板上(1级缓存)处理好的菜拿过来,如果案板上没有就在更远一点的洗菜池(2级缓存)中找一找,还没找到的话就要到冰箱(3级缓存)中看一看了,这时发现家里真没有,那去楼下的菜店(内存)去买点吧,转了一圈发现没有想要的,最后还是开车去农贸市场(硬盘)买吧。

通过上面这个例子应该能明白它们的速度关系了,既然缓存这么快,为什么不用缓存代替内存,或者将2、3级缓存都换成1级缓存呢?这里边有一个成本问题,速度越快对应着价格越高,如果你买过机械硬盘和固态硬盘应该很容易就理解了。

寄存器分类

常用的 x86 cpu 寄存器有8个:eax 、ebx、ecx、edx、edi、esi、ebp、esp,据说现在寄存器总数已经超过100个了,等我找到相关资料再来补充,上面这几个寄存器是最常用的,这些名字也常常出现在汇编的代码中。

我们常说的32位、64位 cpu 是指数据总线的宽度或根数,而寄存器是暂存数据和中间结果的单元,因此寄存器的位数也就是处理数据的长度与数据总线的根数是相同的,所以32位 cpu 对应的寄存器也应该是32位的。

常用寄存器用途

上面提到大8个寄存器都有其特定的用途,我们以32位 cpu 为例简单说明下这些寄存器的作用,整理如下表:

寄存器eax、ax、ah、al的关系

在上面的图标中每个常用寄存器后面还有其他的名字,它们是同一个寄存器不同用法下的不同名字,比如在32位 cpu 上,eax是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 下的汇编语法是不同的,其实两种语法的不同和系统不同没有绝对的关系,一般在 linux 上会使用 gcc/g 编译器,而在 windows 上会使用微软的 cl 也就是 msbuild,所以产生不同的代码是因为编译器不同,gcc 下采用的是at&t的汇编语法格式,msbuild 采用的是intel汇编语法格式。

总结

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

  • at&t的汇编语法格式和intel汇编语法格式的是不同的

  • 常用寄存器:eax 、ebx、ecx、edx、edi、esi、ebp、esp

  • 存取速度从高到低分别是: 寄存器 > 1级缓存 > 2级缓存 > 3级缓存 > 内存 > 硬盘

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

ag凯发k8国际的版权声明:本文为csdn博主「alberts」的原创文章,遵循cc 4.0 by-saag凯发k8国际的版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/albertsh/article/details/106041560

☞华为全球分析师大会:hms core全球开发者应用集成的数量加速增长,打造全场景智慧体验

☞腾讯人均月薪 8 万,恍恍惚惚,又被平均了?

☞200 万年薪请不到!清华姚班到底有多牛?| 原力计划

☞量子计算与ai“双拳”出击,他们锁定38种潜在抗疫药物

☞我们已经不用aop做操作日志了!| 原力计划

☞国外这三位帅小伙,居然搞了个用比特币付款、无人机运送的水培沙拉项目?

ag凯发k8国际的版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

(0)
上一篇 2024年1月2日 上午9:47
下一篇 2024年1月3日 上午7:59

相关推荐

  • 现代企业在管理和沟通上面临着很大的问题,如何优化企业之间的沟通环节?产品如何实现精准识别?企业在新媒体时代的营销趋势是什么?以上都是当前企业客户所面临的问题。 在7月5日,在由品途…

    科研百科 2022年8月9日
    320
  • 工程建设进度控制是指对工程建设项目的全过程实施进度控制,为此而进行的规划、监督、检查、协调及信息反馈等,以保证项目在预定的期限内建成交付使用。由于工程建设各个阶段的工作内容与要求的…

    2022年8月5日
    249
  • 建设项目管理是什么

    建设项目管理是什么? 建设项目管理是指在建设项目的整个生命周期中,对项目的规划、设计、施工、运营和维护等方面进行全面管理的过程。它是项目管理的重要组成部分,也是实现项目成功的关键因…

    科研百科 2024年5月28日
    71
  • 最近跟几个营销操盘手朋友聊项目,说到乡镇项目的难,一肚子的苦水,都快要堵成堰塞湖了。 今时今日的房地产行业,正在快速分化,不仅是房企的冰火两重天,一二线城市和三四五线城市的分化也是…

    科研百科 2024年4月24日
    59
  • 弱电工程包括哪些子系统?怎样才算合格的弱电人?(弱电系统属于什么工程)

    01 正文 构建由一个个知识点组成的知识网 术业有专攻,一个弱电人几乎不可能精通弱电行业所有知识点,但当提及一个项目、一份具体工作时,一个合格的弱电人至少应该知道它属于哪个点。本文…

    2022年6月16日
    352
  • 研究生一定要搞科研项目吗? 作为研究生,是否一定要搞科研项目是一个值得探讨的问题。在某些情况下,科研项目可能是研究生职业发展的必经之路,但在其他情况下,它并不一定是必要的。本文将探…

    科研百科 2024年4月6日
    84
  • 来源:淄博日报-淄博新闻网 □市纪委监委机关党委 一、背景动因 2017年以来,随着市委巡察监督、纪检监察机关审查调查等工作的深入开展,各专项工作组相继成立。为有效减少党员教育管理…

    科研百科 2024年6月27日
    54
  • 最高人民法院 最高人民检察院 公安部 司法部 生态环境部 印发《关于办理环境污染刑事案件有关问题座谈会纪要》的通知 各省、自治区、直辖市高级人民法院、人民检察院、公安厅(局)、司法…

    科研百科 2023年12月20日
    80
  • 为更好地规范基层党组织党费收缴管理工作,助力党建工作信息化、高效化。经河北京石高速公路开发有限公司党群工作部前期周密准备,组织基层支部认真测试,日前,党费缴纳新模式-“党费管家”服…

    科研百科 2023年1月7日
    301
  • 协同办公软件: 现代企业不可或缺的工具 随着全球化和经济的快速发展,现代企业面临着越来越多的挑战。企业需要更高效、更紧密的协作来应对这些挑战。因此,协同办公软件成为了现代企业不可或…

    科研百科 4天前
    13
网站地图