教育房产时事环球科技商业
投稿投诉
商业财经
热点动态
科技数码
软件应用
国际环球
晨报科学
新闻时事
信息智能
汽车房产
办公手机
教育体育
生活生物

汇编指令大全(精通汇编的人有多厉害)

  汇编指令大全(精通汇编的人有多厉害)
  作者 | 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
  版权声明:本文为CSDN博主「AlbertS」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
  原文链接:
  https://blog.csdn.net/albertsh/article/details/106041560

监控哪个牌子好(家用监控器十大名牌)便宜的家用监控器多少钱一个?想要便宜的监控器,但是又能够满足家用监控的目的,这样的监控摄像机是否存在呢?答案是肯定的。目前家用监控器在市场技术已经非常成熟了,价格也会随着工厂的竞争绞肉机哪个牌子好(家用绞肉机十大名牌)家里吃饺子剁馅儿是非常麻烦的事情,有了绞肉机,不仅能够把菜馅,肉馅都绞的非常细腻也省去了很多时间。所以说绞肉机作为厨电设备中利用率还是比较高的,我家基本每周都会吃次饺子,而且目前的家用数码摄像机哪个牌子好(高清摄像机品牌前十名)1品牌大品牌值得信赖,这话是不会错的一线品牌海康萤石大华乐橙TPLink(普联)二线品牌小米华为3602使用场景照看老人照看宠物照看宝宝支持变焦车库农家大院商铺超市工作室工厂别墅门微信卸载了怎么恢复聊天记录(误卸载了微信怎么恢复)已经成为我们最常用的聊天工具,由于的使用率非常高,我们也时常会清理一下聊天记录和其他软件的缓存文件来腾出手机空间。但有时候我们也会错误地删除一些有用的聊天记录?那些被删除的记录怎样微信卸载了如何恢复聊天记录(微信卸载重装恢复记录)微信卸载了如何恢复聊天记录(微信卸载重装恢复记录)微信现已成为我们最常用的谈天东西,因为微信的运用率十分高,我们也常常会收拾一下微信谈天记载和其他软件的缓存文件来腾出手机空间。但有微信删了人后还能恢复聊天记录(如何找回微信删掉的人)60微信删了人后还能恢复聊天记录(如何找回微信删掉的人)微信联系人删除怎么恢复聊天记录?在删除微信联系人的时候,会顺带将与删除的联系人的聊天记录一起删除。如果我们删除了包含重要聊天记录安卓手机微信删除聊天记录找回(老公出轨查微信删除记录)安卓手机微信删除聊天记录找回(老公出轨查微信删除记录)安卓找回微信聊天记录,方法原来这么简单。随着互联网不断升级,人们的使用习惯也在发生着改变,比如从前习惯使用打电话,现在人们已经老公出轨我想查看他删除的聊天记录(老公删了微信聊天记录怎么查)老公出轨我想查看他删除的聊天记录(老公删了微信聊天记录怎么查)微信聊天记录怎么查?已经删除的微信聊天记录查看方法。手机如何查找微信聊天记录?我相信大多数小伙伴都改过对如何查找删除微怀疑老公出轨教你找回微信记录(老公删了微信聊天记录怎么查)怀疑老公出轨教你找回微信记录(老公删了微信聊天记录怎么查)最近小趣的闺蜜老跟小趣吐槽,感觉老公的行为有异动,偷偷查看了老公手机支付记录,也没查到支付记录,想让小趣想想办法,看看有什怎样登录老公微信号(老公删了微信聊天记录怎么查)怎样登录老公微信号(老公删了微信聊天记录怎么查)现在很多男人喜欢随手删掉微信聊天记录,但是女性好奇心比较重,对对方删除的微信聊天记录充满的好奇,就想把他删除的聊天记录进行恢复查看,微信被删除的聊天记录可以恢复吗(删除的微信聊天记录如何找回)4微信被删除的聊天记录可以恢复吗(删除的微信聊天记录如何找回)各位,你们有随手清理手机内存和微信记录的习惯吗?没有吧!毕竟现在的手机内存是越来越大了。但是,小编有!因为听了王守义说十
说说碧欧泉水动力洁面乳怎么样近日有关于碧欧泉水动力洁面乳怎么样的问题受到了很多网友们的关注,大多数网友都想要知道网友们需要碧欧泉水动力洁面乳怎么样问题的具体情况,那么关于到网友们需要碧欧泉水动力洁面乳怎么样问说说欧泉琳眼霜怎么样近日有关于欧泉琳眼霜怎么样的问题受到了很多网友们的关注,大多数网友都想要知道网友们需要欧泉琳眼霜怎么样问题的具体情况,那么关于到网友们需要欧泉琳眼霜怎么样问题的相关信息,小编也是在说说馥佩薏仁水爽肤水怎么样近日有关于馥佩薏仁水爽肤水怎么样的问题受到了很多网友们的关注,大多数网友都想要知道网友们需要馥佩薏仁水爽肤水怎么样问题的具体情况,那么关于到网友们需要馥佩薏仁水爽肤水怎么样问题的相婴儿专用蚊香液可以用吗近日有关于婴儿专用蚊香液可以用吗的问题受到了很多网友们的关注,大多数网友都想要知道网友们需要婴儿专用蚊香液可以用吗问题的具体情况,那么关于到网友们需要婴儿专用蚊香液可以用吗问题的相教大家皎洁蚊香液怎么样近日有关于教大家皎洁蚊香液怎么样的问题受到了很多网友们的关注,大多数网友都想要知道教大家皎洁蚊香液怎么样的具体情况,那么关于到教大家皎洁蚊香液怎么样的相关信息,小编也是在网上进行了拔火罐的方法(中医拔火罐的几种操作方法)拔火罐的方法(中医拔火罐的几种操作方法)拔罐操作方法()准备材料玻璃火罐二个(备用一个),根据部位,选择号型,镊子一把,酒精一小瓶(大口的),棉花球一瓶,火柴一合,新毛巾一条,香皂经络不通怎么办(经络不通畅,应该怎么调?)经络不通怎么办(经络不通畅,应该怎么调?)中医一致认为气血固体,经络则是负责我们体内血液的输送渗透。但是,不知道你们是否想过,如果经络一旦堵塞,会出现怎样的状况?告诉大家吧,如果真为什么会长肉芽(寻常疣裂开好多肉芽)人到老年,皮肤也像其他器官一样,逐渐衰退和老化,总是会长出一些奇怪的小肉粒。不痛不痒,但奇丑无比,常出现在我们的颈部前胸等部位,密密麻麻让人不适,它们到底是什么?小小皮赘惹人恼在这怎么去除红血丝(去除脸上红血丝最快方法)高原红就是我们临床中所说的红血丝。每年一到换季,皮肤各种出问题,泛红,干燥,敏感,瘙痒等等。这其实是皮肤屏障受损了,最常见的就是红血丝,那么脸上有红血丝怎么办呢?一起来了解吧!脸上GAI是万茜的迷弟近日有关于GAI是万茜的迷弟的问题受到了很多网友们的关注,大多数网友都想要知道GAI是万茜的迷弟的具体情况,那么关于到GAI是万茜的迷弟的相关信息,小编也是在网上进行了一系列的信息爱睿希产品怎么样(美国爱睿希产品怎么样)为什么要补充胶原蛋白?胶原蛋白是人体重要成分之一,能支持肌肤及各组织器官。但自20岁后会逐渐流失,而辐射紫外线不良生活习惯更会使流失速度愈加剧烈,令肌肤失去弹性,出现皱纹。所以及时