CPU 执行程序的秘密,藏在了这 15 张图里( 五 )
不同的 CPU 有不同的指令集 , 也就是对应着不同的汇编语言和不同的机器码 , 接下来选用最简单的 MIPS 指集 , 来看看机器码是如何生成的 , 这样也能明白二进制的机器码的具体含义 。
MIPS 的指令是一个 32 位的整数 , 高 6 位代表着操作码 , 表示这条指令是一条什么样的指令 , 剩下的 26 位不同指令类型所表示的内容也就不相同 , 主要有三种类型R、I 和 J 。
文章插图
一起具体看看这三种类型的含义:
- R 指令 , 用在算术和逻辑操作 , 里面由读取和写入数据的寄存器地址 。 如果是逻辑位移操作 , 后面还有位移操作的「位移量」 , 而最后的「功能码」则是再前面的操作码不够的时候 , 扩展操作码来表示对应的具体指令的;
- I 指令 , 用在数据传输、条件分支等 。 这个类型的指令 , 就没有了位移量和操作码 , 也没有了第三个寄存器 , 而是把这三部分直接合并成了一个地址值或一个常数;
- J 指令 , 用在跳转 , 高 6 位之外的 26 位都是一个跳转后的地址;
文章插图
加和运算 add 指令是属于 R 指令类型:
- add 对应的 MIPS 指令里操作码是 000000 , 以及最末尾的功能码是 100000 , 这些数值都是固定的 , 查一下 MIPS 指令集的手册就能知道的;
- rs 代表第一个寄存器 R0 的编号 , 即 00000;
- rt 代表第二个寄存器 R1 的编号 , 即 00001;
- rd 代表目标的临时寄存器 R2 的编号 , 即 00010;
- 因为不是位移操作 , 所以位移量是 00000
编译器在编译程序的时候 , 会构造指令 , 这个过程叫做指令的编码 。 CPU 执行程序的时候 , 就会解析指令 , 这个过程叫作指令的解码 。
现代大多数 CPU 都使用来流水线的方式来执行指令 , 所谓的流水线就是把一个任务拆分成多个小任务 , 于是一条指令通常分为 4 个阶段 , 称为 4 级流水线 , 如下图:
文章插图
四个阶段的具体含义:
- CPU 通过程序计数器读取对应内存地址的指令 , 这个部分称为 Fetch(取得指令);
- CPU 对指令进行解码 , 这个部分称为 Decode(指令译码);
- CPU 执行指令 , 这个部分称为 Execution(执行指令);
- CPU 将计算结果存回寄存器或者将寄存器的值存入内存 , 这个部分称为 Store(数据回写);
事实上 , 不同的阶段其实是由计算机中的不同组件完成的:
文章插图
- 取指令的阶段 , 我们的指令是存放在存储器里的 , 实际上 , 通过程序计数器和指令寄存器取出指令的过程 , 是由控制器操作的;
- 指令的译码过程 , 也是由控制器进行的;
- 指令执行的过程 , 无论是进行算术操作、逻辑操作 , 还是进行数据传输、条件分支操作 , 都是由算术逻辑单元操作的 , 也就是由运算器处理的 。 但是如果是一个简单的无条件地址跳转 , 则是直接在控制器里面完成的 , 不需要用到运算器 。
推荐阅读
- 程序员为教师妻子开发应用:将iPhone变成文档摄像头
- 飞书文档微信小程序审核被卡?字节跳动副总裁谢欣:希望腾讯停止无理由封杀
- 多家快递暂停发往河北省快件,顺丰表示先暂停三天,京东小程序已无法下单
- 2021年换手机哪个配置最重要,CPU只能排第三位
- 8核Zen3 AMD新CPU现身:锐龙7 5700G
- 全新8核国产CPU深入探秘:马上能买到
- 字节跳动高管喊话腾讯,称“飞书文档”小程序审核被卡近两月
- 悔哭!一程序员误把7500个比特币当垃圾扔掉,估算约2.4亿美元
- 苹果改变立场 称macOS实用程序Amphetamine可继续留在Mac应用商店中
- 2.4亿美元打水漂!程序员小哥把7500个比特币当垃圾扔掉 硬盘找不回