关于Nand2Tetris Hack CPU中inM是否存在延迟的技术问询
Hack CPU 指令执行疑问:inM 是否存在延迟?

假设我们有一条C指令 ADM=D+A,我对Hack CPU的执行节奏有如下理解:
- Tick阶段:ALU根据D寄存器和A寄存器的当前输出值计算
D+A,将结果同时发送给D、A寄存器,以及通过outM写入内存。此时D、A寄存器不会立即输出更新后的新值。 - Tock阶段:D、A寄存器才会输出更新后的新值,但此时
inM(内存返回给CPU的输入)是基于A寄存器的旧地址读取的——因为A寄存器的新地址要到Tock阶段才输出,导致后续指令使用的内存值是过期的。
我认为这种机制会导致CPU无法按预期工作,以下是具体示例:
初始内存状态:mem[1] = 0,mem[2] = 7
指令序列:
@2 D = 1 A = D AMD = M+D
预期最终状态:A的值为1,mem[1]被更新为1,D的值为1。
假设前两行指令执行符合预期,此时状态为:mem[1] = 0,mem[2] = 7,D=1,A=2。从第三行开始分析:
- 第三行指令
A = D的Tick阶段:ALU计算得到1并发送给A寄存器,但此时A寄存器输出给内存的地址仍是旧值2; - 第三行的Tock阶段:A寄存器更新为1,但内存的
inM已经在Tick阶段基于旧地址2读取了mem[2]=7; - 第四行指令
AMD = M+D执行时,会用这个旧的inM=7参与计算,最终得到结果8,和预期的1完全不符。
请问:inM是否存在这种读取延迟?
内容的提问来源于stack exchange,提问作者Oyomot
相关产品推荐
相关产品推荐

