4.7 SEQ处理器

顺序处理器

SEQ(Sequential)处理器是 Y86-64 的顺序实现——每个时钟周期执行一条完整的指令,后一条指令必须等前一条完全结束后才能开始。

五个阶段

SEQ 将每条指令的执行划分为五个阶段,每个阶段完成特定的功能:

1. 取指(Fetch)

从内存中读取指令字节,解析出:

  • icode(指令码)和 ifun(功能码)
  • rArB(寄存器操作数字段)
  • valC(常数字段,如果有的话)
  • valP(下一条指令的地址 = PC + 当前指令长度)

2. 译码(Decode)

从寄存器文件读取操作数:

  • valA:根据 rA 读取寄存器
  • valB:根据 rB 读取寄存器
  • 如果是 call/push,也读取 %rsp

3. 执行(Execute)

ALU(算术逻辑单元)执行实际计算:

  • 算术运算:valE = valA op valB
  • 地址运算:valE = valB + valC
  • 条件码更新(OF, SF, ZF)
  • 条件分支判断

4. 访存(Memory)

读或写内存(数据内存):

  • 读:从 valE 或 valA 给出的地址读取数据
  • 写:将数据写入 valE 或 valA 给出的地址

5. 写回(Write Back)

将结果写回寄存器文件:

  • dstE:通常写入 ALU 结果或 valC
  • dstM:通常写入从内存读取的值

更新PC

将下一条指令的地址写入 PC 寄存器,指向程序中顺序的下一条指令(或跳转目标)。

SEQ的局限

SEQ 在每个时钟周期只能完成一条指令,吞吐率为 1 CPI(每指令周期数)。虽然结构简单易于理解,但性能极低——硬件大部分时间处于空闲等待状态。流水线处理器正是为了解决这个问题而设计的。

相关笔记

链接到