我正在编写一个 Z80 仿真器,我对指令寄存器的大小感到困惑。
在 Z80 手册中说指令长度为 1 到 4 个字节,我是否假设 Z80 具有 32 位指令寄存器?如果不是,那么它如何执行这样的指令?
没有指令寄存器,您不会一次获取整个指令。相反,你一块一块地取它。
让我们看一下您的示例说明:
LD (IX+d),n
编码0xDD 0x36 dd nn
。dd
andnn
字节,写入nn
,(IX+dd)
递增循环计数器并继续执行下一条指令。如果您想编写一个周期精确的仿真器,事情会变得有点复杂,但如果您是仿真初学者,我不建议您这样做。
它只是说指令可以是 1-4 个字节长。这不会自动允许关于指令寄存器的假设。它说它是 M Cycles: 5。这清楚地表明它需要 2 个字节来获取指令(M Cycles 1 和 2)。然后它读取下一个字节(M Cycle 3)将其添加到 IX 寄存器,然后读取另一个字节(M Cycle 4),然后将其写入计算地址(M Cycle 5)。
实际上 IR 寄存器存在,但程序员无法访问。查看 Rodnay Zaks 书籍如何对 Z80 进行编程(第 56 页)。它清楚地解释了如何获取和解码 1 字节指令,但是我仍然不明白如何处理 2 字节、3 字节或 4 字节指令。如果有一个分步示例说明如何使用 IR 寄存器处理 2、3 或 4 字节指令,那就太好了。