Introduction
- 计算机执行指令的过程:取指、译码、执行、回写
- 本文以
ADD R0, [6]为例演示计算机执行指令的过程ADD R0, [6]含义为通用寄存器R0与存储器0110中的数据求和,并存入寄存器R0(已知R0中已存入data0000011) (十进制6等于二进制0110) - 计算机结构中术语 (详细见1.1 计算机简化模型):
| 术语 | 全称 | 注释 |
|---|---|---|
| MAR | memory address register | – |
| MDR | memory data register | – |
| IR | instruction register | 存放正在或即将执行的指令 |
| PC | program counter | 程序计数器 (存下一条指令的地址) |
| 指令译码 | – | 确定IR中存放的是哪一条指令 |
| 控制电路 | – | 通过电路产生控制信号 |
| GPR | general purpose register | R1 ~ Rn-1 (通用寄存器) |
| ALU | – | 完成算术运算和逻辑运算 |
取指 (获取二进制形式的指令)
- 将PC(program counter)中的将要执行的指令地址存入MAR中
- 通过地址总线将MAR中的目标地址传入存储器,同时通过控制总线向存储器说明希望执行READ操作
- 存储器收到指令后,通过地址译码器从0001地址中获得data,存入MDR并通过数据总线传给CPU中的MDA
- CPU再将MDA中的data传给IR (instruction register)
- 最后,将PC中的指令地址进行更新换为下一个循环中所需的地址(0010)
译码 (解读二进制的指令)
- 将IR中的data通过指令译码解读出指令的意义,通过控制电路进行下一步执行操作
执行 (执行指令)
- 将从译码中得出的地址
0110传入MAR,类似于取指阶段,获得0110中的data存入MDR - 将 MDR 与 R0 中的数分别赋给运算器的 X 和 Y 中通过 ALU 得出结果 Z
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GZVkbDPj-1592481085015)(https://upload-images.jianshu.io/upload_images/23796944-0385657c7465d6e6.gif?imageMogr2/auto-orient/strip)]
回写 (将结果进行存储)
- 将 Z 的指存入 R0, 该进程结束
(下一进程又由PC将地址传给MAR开始)
Reference
Coursera: 计算机组成 Computer Organization