1

我正在编写一个 Z80 仿真器,我对指令寄存器的大小感到困惑。

在 Z80 手册中说指令长度为 1 到 4 个字节,我是否假设 Z80 具有 32 位指令寄存器?如果不是,那么它如何执行这样的指令?

在此处输入图像描述

4

3 回答 3

13

没有指令寄存器,您不会一次获取整个指令。相反,你一块一块地取它。

让我们看一下您的示例说明:

  • 您的模拟器首先从当前 PC 获取一个字节,然后递增 PC。
  • 它查看字节,即 0xDD,并且模拟器知道这是“IX 指令前缀”(因为您知道这一点,因此已经对您的模拟器进行了编程以了解它)。然后,您的模拟器会获取另一个字节以获取实际的操作码。
  • 操作码字节是 0x36,并且您的模拟器知道以 0xDD 为前缀的 0x36 是LD (IX+d),n编码0xDD 0x36 dd nn
  • 然后,您的仿真器获取ddandnn字节,写入nn(IX+dd)递增循环计数器并继续执行下一条指令。

如果您想编写一个周期精确的仿真器,事情会变得有点复杂,但如果您是仿真初学者,我不建议您这样做。

于 2013-10-11T14:38:39.973 回答
2

它只是说指令可以是 1-4 个字节长。这不会自动允许关于指令寄存器的假设。它说它是 M Cycles: 5。这清楚地表明它需要 2 个字节来获取指令(M Cycles 1 和 2)。然后它读取下一个字节(M Cycle 3)将其添加到 IX 寄存器,然后读取另一个字节(M Cycle 4),然后将其写入计算地址(M Cycle 5)。

于 2013-10-11T14:39:36.237 回答
-3

实际上 IR 寄存器存在,但程序员无法访问。查看 Rodnay Zaks 书籍如何对 Z80 进行编程(第 56 页)。它清楚地解释了如何获取和解码 1 字节指令,但是我仍然不明白如何处理 2 字节、3 字节或 4 字节指令。如果有一个分步示例说明如何使用 IR 寄存器处理 2、3 或 4 字节指令,那就太好了。

于 2013-10-18T15:38:23.090 回答