Z80指令寄存器大小

时间:2013-10-11 14:06:15

标签: assembly emulation z80

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

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

enter image description here

3 个答案:

答案 0 :(得分:11)

没有指令寄存器,您不能立即获取整个指令。相反,你可以逐件获取它。

让我们来看看你的示例说明:

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

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

答案 1 :(得分:1)

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

答案 2 :(得分:-1)

实际上IR寄存器存在,但程序员无法访问。查看Rodnay Zaks的书籍如何编程Z80(第56页)。它清楚地解释了如何获取1字节指令&解码后,我仍然不知道如何处理2字节,3字节或4字节指令。如果有一个分步示例,显示如何使用IR寄存器处理2,3或4字节指令,那将是一件好事。