8.2 数据通路、寄存器与 ALU
第 8.1 节说明了每个指令阶段需要哪些信息。数据通路(datapath)是实际承载这些信息的存储元件与路线集合,包括寄存器、内部总线、多路选择器、临时锁存器、移位器和算术逻辑单元。
组合路线产生数值,寄存器保存状态
寄存器(register)跨越时钟周期保存位模式。组合逻辑电路(combinational circuit)根据当前输入产生输出,不记忆早先的值。ALU 属于组合逻辑,寄存器属于状态。
多路选择器(multiplexer)从多个候选输入中选一个。控制信号可以为 ALU 的 A 端选择 AX,为 B 端选择 BX,选择 ADD 功能,再把 CX 选作目的。该路线实现寄存器传送语句:
ALU 输出会随着输入或功能改变而改变;目的寄存器只有在捕获时钟边沿写使能有效时才改变。这样,内部路线上每个短暂出现的值都不会自动变成永久状态。
若 AX=0003H、BX=0004H,选择 AX、BX、ADD 与 CX,会让 0007H 出现在 CX 输入端。CXWrite=0 时 CX 保持不变;时钟边沿 CXWrite=1 时,CX 才变成 0007H。
数据、目的与标志使用独立控制通路
一条指令可以通过多种可区分方式失败:
- 错误的源选择器把非预期操作数送入 ALU。
- 错误的 ALU 功能执行了另一种变换。
- 错误的目的译码器把正确结果写进错误寄存器。
- 缺失的寄存器写使能产生短暂结果,却没有提交任何状态。
- 缺失的标志写使能提交数据结果,却让状态标志保持旧值。
这些故障会形成不同特征。对 FFFFH+0001H,正确输出为 0000H、CF=1、ZF=1。如果 B 端选择器误选 AX,ALU 会计算 FFFFH+FFFFH=FFFEH。如果目的译码误选 CX,AX 保持 FFFFH,CX 变为 0000H。如果只有 FlagWrite 缺失,AX 看似正确,但后续条件跳转会读取旧标志。
临时内部寄存器也很重要。存储器读出的数据可能先进入教学数据通路中称为存储器数据寄存器(MDR)的锁存器,再由后续路线送入 AX。这些内部名称描述实现职责,不一定是程序员可见的 8086 寄存器。
良好诊断要观察完整体系结构契约:预期目的、应保持的源、标志、IP 和存储器副作用。只有 AX 的数值正确,并不能证明整条指令工作正确。
数据通路提供可选路线,却不会自行决定何时选择它们。第 8.3 节将介绍控制单元,以及按安全顺序激活这些路线的更小微操作。