计算+指令
一、指令周期
- 取得指令 从PC寄存器中取出要执行的那条指令的地址 然后从内存中找到具体的指令 加载到指令寄存器中,然后把PC寄存器自增 好执行下一条指令
- 指令译码 根据指令寄存器中的指令 解析成要进行什么样的操作,是R I J 中的哪一种指令,具体操作那些寄存器,那些数据或者内存地址。
- 执行指令 对这些R I J 指令 进行算数逻辑操作,数据传输或者直接地址跳转
这样一个循环成为指令周期
取指令阶段、指令译码 指令是放在存储器中的,是由控制器完成的
执行指令 由算数逻辑单元(ALU)操作的 也就是运算器,简单跳转也可以直接在控制器中完成。
二、机器周期或CPU周期
- CPU周期:从内存中读取一条指令的最短时间成为CPU周期,相比于CPU内部执行的速度 从内存中读取指令的操作算慢的了
- 时钟周期:跟主频有关,CPU可以识别的最小时间单位,就是每隔那个时间单位会驱动CPU做一次操作
一个指令周期包含多个CPU周期 一个CPU周期包含多个时钟周期
三、建立数据通路
- 操作元件 组合逻辑元件其实就是ALU 在特定的输入条件下会生成特定的输出
- 存储元件 就是用到的寄存器,无论是通用寄存器 还是状态寄存器
建立数据通路 就是 通过数据总线的方式把他们链接起来 完成数据的存储 处理和传输
控制器 就是把 Fetch Decode Execute 循环中最后一步的信号交给ALU处理,控制器就是产生不同的信号交给ALU做不同的计算
四、所需要的硬件电路
- ALU 组合逻辑电路
- 能够进行状态读写的电路元件 就是寄存器 能够保存我们上一次的计算结果
- 自动的电路 不停的实现PC寄存器的自增
- 译码器电路 无论是指令decode 还是拿到内存地址去获取对应的数据或者指令都需要一个译码的电路
五、时序逻辑电路
- 时钟信号两个开关+磁性线圈 一个开关A 一个B 开关A默认是打开的 开关B是关闭的 A 由我们手动控制 当A 将关闭时 线圈通电 将B吸开 此时断电 线圈失去磁性,开关B就会再重新接通 这样整个线路就是在打开和关闭之间切换。
对于下游电路来讲就是不断的01信号 这就是时钟信号 这种电路叫做反馈电路,就是自己的输出又是自己的输入
- D触发器 实现存储功能 此处的逻辑比较复杂 总之使用或非门实现的 输出的状态还要取决于上一次的状态 寄存器就是通过这样的逻辑实现的。
通过反馈电路创建了时钟信号 然后利用时钟信号和门电路组合 实现了状态记忆的功能
六、PC寄存器 也叫程序计数器
- 有了时钟信号,可以提供定时的输入,有了D触发器 可以在时钟信号控制的时间点写入数据
- 加法器的两个输入,一个时钟设置成1 一个来自D触发器,然后把结果在写入D触发器,这样PC寄存器就实现了自增
- 每次自增之后,就可以去对应的D触发器里取值,就是下一条要执行的指令。
- 时序逻辑电路核心就是在固定的时间内内存取值 命令执行
七、译码器
本质上是来寻址的,比如有64个开关,就是有2的64次方的寻址能力
八、构造一个CPU
基本组成:D触发器、自动计数器 译码器、ALU 一个CPU的必须零件
- 自动计数器 随着时钟主频不断的自增 来作为我们的PC寄存器
- 在自动计数器后面链接译码器,同时连接着内存
- PC寄存器会不断的自增,从译码器中找到对应计数器所表示的内存地址,然后取出里面的CPU指令
- 读出的CPU指令会通过CPU时钟控制,写入指令寄存器中
- 写入指令寄存器之后,再通过一个译码器解析出指令的opcode和操作数,而不是寻址了
- 拿到opcode和操作数后,输出线路连接到ALU,开始进行各种算数逻辑运算,结果再次写入寄存器或者内存中。
if/else 再探索
编译器编译之后 变成一个cmp和jump 指令 是否跳转以及跳转之后的地址需要根据cmp的结果 也就是更新的PC寄存器结果 然后CPU执行。