机器码是什么码「附:电脑机器码了解」

小伙伴们你们好,钱晨晞很高兴又和各位见面了,今天主要来讲讲机器码是什么码,电脑机器码了解,以及关于机器码,寄存器,指令这些一系列的精品相关干货,精心为你准备的干货,通过这篇文章相信你能有所收货!

程序语言(C,Java等)是人类能够理解的语言,因此我们可以用程序语言编写软件,交给CPU去执行,如果你直接将程序语言交给CPU去执行,CPU压根就不能理解这种语言,CPU只认识它自己的语言-机器语言即机器码,因此我们需要将程序语言翻译成机器码,翻译的方式有两种,一种是编译,另外一种是解释,编译的意思是把整个程序一次性翻译成机器码,解释的意思说,一句一句地翻译,不管怎么样,我们最终交给CPU的是机器码,让CPU去根据机器码去做它该做的事情。搞懂机器码

C翻译成机器码

可以把计算机当做一个黑盒子,输入机器码和数据,CPU执行后输出内容到内存,如下图所示搞懂机器码

机器码执行图

汇编语言是人类能够理解的机器指令,后续我们举例子时,直接用汇编语言表示机器指令,它们是等价的。

一.什么是机器码?

机器码也叫机器指令,就像我们人类发出的指令一样,比如:“小明,去卫生间里拿一把扫帚去打扫房间,机器码就是这条指令,这条指令里就包含了干什么事情,去哪里干。

1.1 机器码都有些什么内容

机器码是与计算机硬件紧密关联的,不同的CPU,机器码不一样,就好比不同的国家,语言不一样类似,比如我们常用的CPU如Inter Pentium系列,酷睿系列,AMD 锐龙,ARM,MIPS,IBM PowerPC等,他们的机器码就各不相同, 但都有一个共同的规范就如下图所示。搞懂机器码

机器码包含的内容

如上图所示机器码共同的规范就是他们都包括操作码,控制位(可选),操作数(可选),操作数可以有多个(一般1-3个)甚至没有。

操作码:表示指令类型,比如ADD表示加法指令,SUB表示减法指令。一个处理器可以包含非常复杂,面面俱到的指令,也可以包含十分精简,短小精干的指令,正因如此,在CPU界分成了两大门派CISC(复杂指令集)和RISC(精简指令集),CISC属于大包大揽,啥都想干,RISC是我只敢我能做的事情,其他的事情交给编译器,下面的表格为这两个门派的成员

CISC RISC Inter,AMD ARM,MIPS,IBM PowerPC

控制位:几乎用不到,不做详解

操作数:表示指令需要操作的数据,在机器码中,操作数可不一定是放在那里,等着你直接去拿的,有以下几种获取的方式

立即数寻址:立即数是一个整数,例如5,不需要从寄存器或者内存中获取,它本身就是操作数,例如ARM CPU下的指令

ADD  r1,r2,#5

上面代码中5就是立即数,是常量,直接将R2寄存器中的内容与5相加,存储到r1寄存器中。

直接寻址:从内存中直接获取操作数,例如Inter Pentium CPU下的指令

MOV AX,[2468]

上面代码将内存地址2468上指向的内容写入到ax寄存器

间接寻址:不直接从内存地址获取操作数,而是将内存地址存储在寄存器中,通过寄存器间接获取操作数,例如ARM下的指令

LDR  r1, [r2]

上面代码,r2寄存器中存储的是内存地址,上面指令表达的意思是,将r2寄存器中存储的内存地址指向的内容写入到r1寄存器。

偏移量间接寻址:它是间接寻址变种的一种,例如ARM下的指令

LDR r2,[r3,#8]

上面代码,r3寄存器中存储的是内存地址,上面指令表达的意思是,将r3寄存器中存储的内存地址加上偏移8后算出的内存地址指向的内容写入到r2寄存器。

1.2 机器码的格式

正如上文提到不同的CPU类型机器码不同,有的CPU机器码支持动态长度,动态扩展,如Inter系列,它有时候可以一条指令中有多个操作码,有的CPU的机器码长度是固定的,如ARM,我们可以分析大多数的机器码,大多数的机器码占一个字(32位或64位),一般超过一个字的机器码不多,可能只有Inter系列会有,一般用不到,这里不做阐述。

大多数的机器码格式包括以下四种:搞懂机器码

三地址机器码格式

三地址机器码格式主要在RISC CPU中用到,例如下边ARM一条汇编指令

ADD r1,r2,r3

上述代码表示将r2寄存器中的值加上r3寄存器中的值,写入达到r1寄存器搞懂机器码

双地址机器码格式

双地址机器码格式主要在CISC CPU中用到,例如下边Inter Pentium的一条汇编指令

ADD AX BX

上述代码讲过BX寄存器的内容与AX相加后,写入到AX中,双地址机器码的坏处也很明显了,例如AX寄存器的值执行命令后就被覆盖了,不能够重用了。搞懂机器码

单地址机器码格式

单地址机器码格式在RISC,CISC CPU都会用到,例如下边ARM一条汇编指令

LDA r1

上述代码表示将r1寄存器的值加到累加器(一种寄存器,用于存储中间结果),单地址机器码其实也是有两个操作数,一个是r1,另一个就是累加器,因为LDA r1已经意味着追加累加器的意思,所有不需要指定。搞懂机器码

零地址机器码格式

零地址机器码格式一般操作栈顶的数据,不需要寄存器参与,零地址机器码格式不会用到地址,对于单操作数运算,例如递增,递减,取负,清零等一元运算,直接用栈顶的数据,对于双操作数从栈顶陆续出栈两个数,然后运算,下边举例子,例如下边的表达式

Z=(A+B).(C-D)

PUSH A                                          ;A入栈PUSH B                                          ;B入栈ADD                                              ;栈顶两个数出栈,相加,然后结果入栈PUSH C                                         ;C入栈PUSH D                                         ;D入栈SUB                                               ;栈顶两个数据出栈,相减,然后结果入栈MUL                                              ;栈顶两个数据出栈,相乘,然后结果入栈POPZ                                            ;栈顶数据出栈

二.番外篇

2.1 寄存器

寄存器和内存一样都是存储器,从功能上讲跟内存没什么区别,都是用来存储数据,从其他角度来看,寄存器和内存有如下区别

a.寄存器的速度比内存快N的等级,因此为了加快CPU获取指令或者数据的速度,就会将最近要访问的数据放入到寄存器中。

b.寄存器的个数是有限制,一般计算机不到百个,寄存器寻址直接用名称,例如ARM CPU寄存器 r1,r1就是寄存器的名称,可以通过r1直接访问寄存器的内容,而内存则用地址,例如1234表示内存的地址

在CPU中寄存器分为以下几种

内存地址寄存器(程序员不可见)

保存了当前正在读或者正在写的内存地址

内存数据寄存器(程序员不可见)

保存了当前刚从内存读出的数据或者准备要写入内存的数据

PC 程序计数器(程序员不可见)

保存了下一条要执行的指令的内存地址

IR指令寄存器(程序员不可见)

保存了当前正在执行的指令

通用寄存器(程序员可见)

存储临时的数据例如中间结果)

特殊寄存器(程序员不可见)

例如累加器,条件寄存器等

2.2 机器码长度设计

在1.2章节中阐述了机器码的格式,没有指出机器码长度的设计,这里指出。

指令长度算法:

操作码长度+控制位长度+寄存器寻址个数*寄存器占用位数+内存直接取址个数*内存占用位数+立即数长度

操作码长度:

CPU支持的指令个数,如果支持8个指令,那操作码长度就是3

控制位长度:

这个是固定的

寄存器寻址个数*寄存器占用位数:

寄存器占用位数可以通过程序员可以访问的寄存器个数换算得知,如果寄存器可以访问的寄存器个数为32,那么寄存器占用位数就是5(2的5次方=32)

寄存器寻址个数表示机器码中通过寄存器获取操作数或者间接通过寄存器获取操作数的寄存器个数例如

ADD r1,r2 表示通过r1,r2两个寄存器获取操作数,那么寄存器寻址个数就是2

内存直接取址个数*内存占用位数:

内存直接取址个数表示有多少通过内存直接寻址获取操作数,例如

MOV BX,[1234] 表示从1234内存地址获取操作数,内存直接取址个数为1

立即数长度

根据立即数的范围得出,例如立即数范围为0-999,那么立即数长度就是10,2的10次方=1024刚好大于999,可以完全包含立即数的范围。

举例论证:

以三地址机器码格式为例,假设目的地址,源地址都是寄存器,那么一个寄存器占用5位,3个寄存器占用15位,对于32位字长的cpu,操作码+控制位就是17位,如果操作数部分不够15位,则操作数部分自动扩展为32位。搞懂机器码

三地址机器码格式

好了,今天就说到这里了,希望对你有帮助,仔细阅读完机器码是什么码「附:电脑机器码了解」这篇文章,如果感觉还不错的话!点个赞吧!赠人玫瑰有留余香!

本文发布者:管理员,不代表寂寞网立场,转载请注明出处:https://www.jimowang.com/p/19067.html

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

(0)
上一篇 2022年11月30日 09:47
下一篇 2022年11月30日 09:50

相关推荐

  • 网上长期挣钱的方法「必看:推荐四种靠谱正规的网上兼职」

    哈喽,小伙伴们大家好,今天吴梦洁说的这篇文章网上长期挣钱的方法,推荐四种靠谱正规的网上兼职,以及其他关于副业,方式,收益的一些相关干货,只要你每天都能来,我就能每天整理一些不错的干货分享给你们! 又逢三月开学季,记得知源君刚进入大学校园的时候,做的第一个规划就是争取早日实现经济独立。知源君大学读的是软件工程专业,学费要一万多块钱一年,这曾一度让大山里走出来的…

    自媒体 2022年11月29日
  • 手机怎么投屏到电脑(手机投屏到电脑最简单的方法)

    想知道最近有什么新鲜事吗?我是本站新闻记者秦谱,最近一段时间,手机怎么投屏到电脑(手机投屏到电脑最简单的方法)的新闻屡屡见诸报端,引起网友的热议,接下来,就让我为您详细解析一下这个事件的具体情况吧! 详细投屏步骤: 1、准备工作:打开电脑的Wi-Fi热点,并将手机连接到热点; 2、使用手机打开自带的投屏软件,一般是“设置”-“我的设备”-“显示”,找到“投屏…

    2023年4月3日 自媒体
  • 商朝的帝王顺序帝王简介(商朝皇帝一览表)

    商朝的帝王顺序帝王简介(商朝皇帝一览表) 商朝简介 商朝是中国历史上第一个有文字记载的王朝,建立于公元前16世纪,通过世袭制传承,历时约六百多年。商朝统治区域位于今河南、山西、陕西等地,是中国古代文明的重要发源地之一。 商朝的帝王顺序 商朝历经29位君主,其中包括商汤、商太祖等重要皇帝。以下是商朝帝王的顺序及简介: 商汤:商朝的开国君主,他领导商朝推翻了夏朝…

    2023年9月15日 自媒体
  • 利雅得新月给梅西报价6亿美元,梅西与巴黎的故事已经结束

    亲爱的听众朋友们,我是本站的新闻策划人陈浩铭,为您呈现最丰富的资讯。利雅得新月给梅西报价6亿美元,梅西与巴黎的故事已经结束最近引起了大量网友的讨论和关注,成为了网络上的热点。接下来让我们一起来看看具体是什么情况吧! 5月4日讯 据马卡电台透露,利雅得新月给梅西的报价高达6亿美元。 经纪人Marco Kirdemir在马卡电台透露:“梅西收到了来自利雅得新月6…

    2023年5月4日
  • 杰克逊10大经典歌曲(回顾迈克尔·杰克逊的10个封神瞬间)

    各位朋友们大家好,我是本站的实地报道员蒋梦宇,带您亲身体验最新的新闻现场。最近有关杰克逊10大经典歌曲(回顾迈克尔·杰克逊的10个封神瞬间)的新闻屡屡见诸媒体,引起了不少人的关注。现在就让我们一起来探究这件事的具体情况吧! 十年前的2009年6月25日,这个世界上从此再也没有了“流行之王”。迈克尔·杰克逊是我们这一代最伟大的艺人,他也是历史上获奖最多的音乐人…

    2023年4月10日 自媒体
  • 四川甘孜发生6.8级地震「必看:甘孜州地震最新消息」

    HI,小伙伴们你们好,今天孙泽平比较忙,抽个时间来说下关于四川甘孜发生6.8级地震,甘孜州地震最新消息,以及关于甘孜,最新消息,发生,震中,造山运动这些的相关干货,思路决定出路,确实,这个真的很重要,希望能帮到你! 地震是伴有造山运动或其他地壳运动,并且地震带来的灾害是十分大的,根据最新消息称四川甘孜发生6.8级地震,当时的情况是怎么样的呢?甘孜州地震有哪些…

    2023年2月23日