CPU内部结构
- 总线
- 一些自定义部件
- 总线图
- 内存指令
- 执行流程:取指令,译码,执行
- pc做的事
- 内存地址寄存器
- 内存缓存寄存器
- 指令寄存器,译码第一步
- 指令寄存器传递地址到内存地址寄存器
- 指令MOV_A的过程(译码第二步)
- 第一条指令执行完毕
- 第三条指令的执行
- 第四条指令
- 第四条指令不同的执行流程
- 整体流程
内部数据总线
- 使用到的有8位寄存器(用于输入),4位寄存器(用于内存地址,只能寻址16个内存单元[2^4]),简化版加法ALU
- 寄存器带了时钟, 由时钟统一控制操作
- ALU不需要时钟, 输入端的寄存器由时钟控制
- 总线就是一根根传送电信号的线 -_-
- 内部的意思就是封装在CPU内部的 -_-
- 外部总线就是主板上的 _
- 反正总线,就是一堆线
- 但在任意时刻,只能由一个部件对其读/写,因此下面的所有部件都增加了 可写(WriteEnable) / 可读 (OutEnable,也可以叫可输出)
- 在下面的图中有数据总线和地址总线,见名知意, 数据总线传送数据, 地址总线传送地址 ;- )
- 注意,数据包含指令,都是二进制, 是数据还是指令由CPU本身去识别(x86,arm …) 下面的汇编指令是我自己模拟的
下面有CPU整个执行流程,由于没有控制单元,因此纯手工操作
一些CPU内部需要用到的部件
简化版加法ALU
- 图上的C是进位,目前恒为零即可
4位寄存器,用于内存地址
8位寄存器,用于输入
总线图
- 时钟使用按钮代替
- 时钟用于让所有的电路自动工作,每触发一次,所有的相连的寄存器就工作一次
- 总的来说时钟是一切电路自动化工作的源头
- 古代碾磨需要一头牛来转圈,牛跑的越快碾磨速度越快, 振荡器速度越快,频率越高
- 而时钟的取名我猜就是类似 , 下一时刻时钟吼了一句"大家一起干活!"(脉冲信号),让所有的相连的电路一起干活
- 时钟的另一个作用是编程中的术语来说就是同步
- 例如:
- mov 寄存器B,0x99;
- mov 寄存器A, 寄存器B
- 寄存器B中的值有没有准备好? 什么时候能执行mov操作?
- ip/Eip什么时候往下移动?
- 一旦有了时钟,就容易同步操作
从内存中读取指令
- 为简化汇编指令, 这里只使用4条指令来演示, 自己模拟的汇编指令
- 汇编指令一般都有 操作码 ,操作数 2个部分组成
- 操作码对应要做什么, 操作数对应要对这个数做什么操作,在这里操作数只能对内存地址寻址
操作码 | 操作码二进制 | 解释 |
---|---|---|
MOV_A | 1000 | 复制数据到寄存器A |
MOV_B | 1001 | 复制数据到寄存器B |
MOV_TO_ADDR | 1010 | 复制寄存器C的数据到内存地址 |
ADD | 1011 | 把寄存器A,B相加存放到寄存器C |
指令相关
- 为简化指令,每个操作码固定占用4位,操作数也占用4位, 一个字节即可存放
- 操作码放高4位,操作数放低4位
- 当前的寻址寄存器是4位,只能寻址16个地址线,因此对应操作数来说正好
- 注意这里的操作数只能是内存地址