跳转至

指令与CPU

指令

ISA(记忆)

image-20260813192139256

扩展操作码

image-20260813192900858

寻址方式

image-20260813194229475

  1. 对于相对寻址offset和PC速算:PC是无符号数,offset通常是补码,直接让PC和offset相加,进位舍弃,按无符号数翻译结果。offset采用符号扩展。十六进制也是同理。

  2. 若问到可以跳转的范围时,一定不要忘了PC要先+‘1’;同时要注意主语。

  3. 注意,地址反向跳也可以跳到最高地址,例如从0000H可以反向跳一步到FFFFH,因为计算机本身不认识正负,只知道直接加,并且地址还是个无符号数,因此直接到了最高地址。

汇编

image-20260813195341630

视频部分对应的是过程调用,call和ret

CPU

数据通路

image-20260813201644119

  1. 对于组合逻辑元件,就是一些没有存储功能的元件。同时,联想到通常需要搭配一个寄存器暂存输出的数据。
  2. 数据通路实际上就是以上这些元件,在控制单元的控制下,让数据进行一些流动,因此控制的部件是不属于数据通路的。
  3. 关于PC是否属于数据通路:在考试中,PC 在功能上属于“控制器”,但在物理结构上是“数据通路”的一部分。

image-20260813203911094

  1. 现在已经不采用机器周期了!!!!
  2. 地址译码器常用于写,MUX多用于读。

控制器

  1. 一条指令对应一个微程序,一个微程序对应若干微指令,一个微指令对应若干微命令,微命令是 CU 发出的控制信号,而微操作是这个信号导致的最终执行动作。
  2. 主存由RAM和ROM是实现(主要是RAM),控制存储器(CS)用ROM实现,通过地址进行访问。

指令流水线(冒险)

IF ID EX M WB
取指 译码(同时还会取操作数、无条件跳转) 执行 访存(对于条件跳转指令,一般在此时才知道是否要跳转) 写回

默认,只有load/store可以访存。IF阶段指令已经放到了某个寄存器中。

image-20260813205000444

image-20260813205015293

  1. CPI还受Cache缺失率影响。发生Cache缺失时,CPU可能需要等待从主存读取数据,这会插入多个空闲周期,从而显著提高程序的平均CPI。

多发技术

  1. 图片内的全是SISD。

image-20260814153022117

单周期CPU和多周期CPU

单周期CPU

  • 每条指令在一个时钟周期内完成。
  • 所有指令的执行时间相同,由最慢的指令决定时钟周期长度,因此时钟频率较低。
  • 硬件资源在一条指令执行期间被独占,部件冗余大,利用率较低。
  • 控制逻辑简单,设计容易理解,适合教学或简单场景。
  • CPI = 1
  • 在一条指令执行过程中,每个控制信号保持不变,每个部件只能使用一次。

多周期CPU

  • 不同指令可以根据需要占用不同数量的时钟周期。
  • 硬件资源可以在不同阶段复用,部件冗余小,利用率更高。
  • 时钟周期可以更短,整体性能通常优于单周期。
  • 控制逻辑更复杂,需要状态机或微程序控制。
  • CPI > 1
  • 在一条指令执行过程中,每个控制信号可能发生改变,同一个部件可使用多次。

垂直型和水平型微指令

水平型微指令

水平型微指令的设计初衷是“用一条指令尽可能多地控制硬件”,它的格式中包含多个控制信号字段。

  • 并行度高:一条微指令可以在同一个时钟周期内触发多个并发的微操作(如同时控制ALU运算和寄存器读写)。
  • 执行速度快:因为单条指令能并行处理多个操作,完成一条机器指令所需的总微指令条数少,整体执行效率非常高。
  • 指令字长较长:为了直接或间接控制硬件的所有控制点,指令中需要分配大量的位(Bit),导致指令字长通常较长。
  • 微程序较短:完成一条机器指令对应的微程序通常只需要几条水平型微指令即可。
  • 编写难度大:对微指令的格式和底层数据通路的依赖极强,要求编写者非常熟悉硬件结构;且如果不经过精心优化,长指令中往往会有很多控制位空闲,造成控制存储器(CM)容量的浪费。

垂直型微指令

垂直型微指令的设计思路与普通的机器指令(汇编语言)非常相似,通常采用“操作码 + 操作数”的紧凑结构。

  • 并行度低:每次只能执行一到两个基本的微操作,基本不支持复杂的硬件并行。
  • 执行速度慢:完成同样的功能需要多步串行操作,因此完成一条机器指令需要耗费更多的时钟周期。
  • 指令字长较短:格式紧凑,位数较少,大大节省了控制存储器的宽度。
  • 微程序较长:因为每一步只能做一个单一操作,完成一条机器指令所需的微指令序列(即微程序)较长。
  • 编写相对容易:格式规整、逻辑清晰,不需要像水平型那样高度关注硬件并行冲突,便于程序员编写和修改。