cpu - D寄存器没有更新,这是为什么呢?
问题描述
要复制cpu.out
下面显示的文件(尽管没有我的评论),
请使用 thiscpu.hdl
,它通过了所有测试。
现在,我的问题是,在时钟周期 3+、4 和 4+。请注意,DRegise
(D 寄存器)没有更新,尽管命令是“D=AD”,这是为什么呢?
|time| inM | instruction |reset| outM |writeM |addre| pc |DRegiste|
a-instruc | store the number "12345"
|0+ | 0|0011000000111001| 0 | 0| 0 | 0| 0| 0 |
|1 | 0|0011000000111001| 0 | 0| 0 |12345| 1| 0 |
c-instru | comp: "A" | dest: "D" | jump: "no jump" | "D=A"
|1+ | 0|1110110000010000| 0 | 12345| 0 |12345| 1| 12345 |
|2 | 0|1110110000010000| 0 | 12345| 0 |12345| 2| |
a-instruc | "23456"
|2+ | 0|0101101110100000| 0 | -1| 0 |12345| 2| 12345 |
|3 | 0|0101101110100000| 0 | -1| 0 |23456| 3| 12345 |
c-instruc | comp: "A-D" | dest: "D" | jump: "no jump" | "D=A-D"
|3+ | 0|1110000111010000| 0 | 11111| 0 |23456| 3| 11111 |
|4 | 0|1110000111010000| 0 | 12345| 0 |23456| 4| 11111 |
a-instruc | "1000" WHY DREGISTE NOT CHANGE? v^v^
|4+ | 0|0000001111101000| 0 | -11111| 0 |23456| 4| 11111 |
|5 | 0|0000001111101000| 0 | -11111| 0 | 1000| 5| 11111 |
解决方案
如果您的 cpu.hdl 通过了所有测试,它可能运行正常。
据我所知(我构建 CPU 已经好几年了),Dreg 正在正确更新;它在 + 周期中更新。请注意,在周期 3 中,其值为 12345,而在 3+(在处理 D=AD 之后)为 11111(如您所料,为 23456-12345)。
我最好的猜测是,正在发生的事情是模拟器没有在 + 阶段更新 cpu 的输出值,但确实显示了内部状态。所以你看到 + 阶段的 Dreg 变化,但“addre”(它不是内部寄存器,它是外部地址线)仅在非 + 阶段发生变化。
推荐阅读
- python - __str__ 返回一个巨大的字符串而不是单个值。Python 新手
- docker - 构建烧瓶泊坞窗图像时分配端口
- google-sheets - 如何删除单行中的多个单元格,并继续删除 50 行
- html - 如何使用反应打字稿将来自 JSON 的长字符串数据显示为列表
- html - 在 HTML href 中生成动态 Localhost URL 路径
- coldfusion - 如何调试 Coldfusion Bad Gateway 错误?
- graphql - GraphQL:具有标量和 InputObjectType 的 UnionType
- visual-c++ - 使用 Microsoft Visual C++ 构建 libdav1d?
- r - 使 Flextable 适合 PowerPoint 中的幻灯片大小与官员
- python - 将新属性分配给函数时,如何抑制 mypy 中的“没有属性”错误?