“机器码”和“计算机指令”到底是怎么回事?

您所在的位置:网站首页 机器码的定义和特点 “机器码”和“计算机指令”到底是怎么回事?

“机器码”和“计算机指令”到底是怎么回事?

2023-06-04 21:48| 来源: 网络整理| 查看: 265

“机器码”和“计算机指令”到底是怎么回事?

image.png

软硬件接口,CPU做了些什么?

从硬件角度讲,CPU就是超大的集成电路,通过电路实现加法、乘法或者其他逻辑

从软件角度讲,CPU就是执行指令的机器,指令可以理解成机器能看懂的语言。

不同的CPU,听懂的语言也不太一样,是不同的计算机指令集。其实也是认为定义的而不同。

现在的mac m1 能执行手机系统ios上的app,也是应为他俩的指令集相同,可以理解成都是说英语的,能交流上。

一般的程序,有成千上万个指令,一般都是存储在存储器里面的,需要执行的时候再取出来放进CPU里计算,这种称为存储程序型计算机。

编译到汇编,代码怎么变成机器码的?

image.png

以上c语言编译成汇编语言,再由汇编语言翻译成机器码,也就是0和1的机器语言。一条条的16进制数字,就是机器能读懂的计算机指令

Untitled 1.png linux系统上可以使用gcc和objdump,把汇编码和机器码都打印出来。

汇编代码和机器码是一一对应的,一条汇编对应一条机器码。

有汇编代码主要是未来方便人看,要不然都是0110的数字,谁也看不懂啊,汇编代码可以说是给“程序员看的机器码”。

指令和机器码的分类

我们来了解一下指令和机器码,到底是什么意思呢?一般来说指令分为5类:

算数类指令。加减乘除 rgba(46,29,92,.6)数据传输类指令。变量赋值、在内存里读写数据 逻辑类指令。是与非 条件分类指令。if/else 无条件跳转指令。一般指函数,闭包之类的,直接跳转内存地址 汇编代码怎么转换成机器码的?

Untitled 2.png

我们简单实用MIPS指令集来看一看,MIPS的指令是一个32位的整数,高6位叫**操作码,**代表这条指令具体是一条什么样的指令,剩下26位对应R、I、J三种格式。

R指令,一般是算术逻辑操作,里面有读取和写入数据寄存器的地址。如果是逻辑位移的操作,还有位移量,最后的功能码,是在操作码不够用来扩展的。 rs寄存器,rt寄存器,rd存放结果的目的寄存器,shamt是位移量,funct是前面操作码不够的补充。 I指令,通常是数据传输、条件分支,以及运算时候不是变量,而是常数的时候。没有位移量,没有操作码,也没有寄存器,三个部分直接合并成地址或一个常数 rs寄存器,rt存放操作结果的寄存器,是个常数 J指令,是一个跳转指令,26位都是一个跳转的地址

举个🌰:

add $t0,$s2,$s1 复制代码

Untitled 3.png

add这里是一个计算逻辑,是R指令,rs是寄存器17,rt是寄存器18,rd是存放结果的寄存器8,无偏移量,功能码是32代表加法。把十进制转换成二进制就好吗

附: 汇编指令

:::开头的是表示寄存器

PC:Project Count 程序计数器

Memeory[num]: 表示内存地址的位置,num表示的是字节,并非字。

Untitled 4.png

指令的参数

reg表示寄存器(0~31),

address表示16位地址

n. a. (not applicable)表示这个字段在该指令格式中不出现

这里也可以看出,add,sub的区分是依靠funct功能字段的。

Untitled 5.png



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3