Assembly Z80指令寄存器大小

Assembly Z80指令寄存器大小,assembly,emulation,z80,Assembly,Emulation,Z80,我正在写一个Z80模拟器,我对指令寄存器有多大感到困惑 在Z80手册中,说明指令长度为1到4字节,我是否假设Z80有32位指令寄存器?如果没有,它如何执行这样的指令 没有指令寄存器,您不能一次获取整个指令。取而代之的是,你一件一件地去拿 让我们浏览一下您的示例说明: 仿真器从当前PC获取一个字节开始,然后递增PC 它查看字节,即0xDD,仿真器知道这是“IX指令前缀”(因为您知道这一点,因此已将仿真器编程为知道它)。然后,仿真器获取另一个字节以获得实际的操作码 操作码字节为0x36,您的模拟器

我正在写一个Z80模拟器,我对指令寄存器有多大感到困惑

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


没有指令寄存器,您不能一次获取整个指令。取而代之的是,你一件一件地去拿

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

  • 仿真器从当前PC获取一个字节开始,然后递增PC
  • 它查看字节,即0xDD,仿真器知道这是“IX指令前缀”(因为您知道这一点,因此已将仿真器编程为知道它)。然后,仿真器获取另一个字节以获得实际的操作码
  • 操作码字节为0x36,您的模拟器使用编码
  • 然后,仿真器获取
    dd
    nn
    字节,将
    nn
    写入
    (IX+dd)
    ,增加周期计数器并继续执行下一条指令

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

没有指令寄存器,而且你不能一次获取整个指令。取而代之的是,你一件一件地去拿

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

  • 仿真器从当前PC获取一个字节开始,然后递增PC
  • 它查看字节,即0xDD,仿真器知道这是“IX指令前缀”(因为您知道这一点,因此已将仿真器编程为知道它)。然后,仿真器获取另一个字节以获得实际的操作码
  • 操作码字节为0x36,您的模拟器使用编码
  • 然后,仿真器获取
    dd
    nn
    字节,将
    nn
    写入
    (IX+dd)
    ,增加周期计数器并继续执行下一条指令

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

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

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

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

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

没有指令“寄存器”。CPU获取操作码字节(在某些情况下是前缀),然后根据已解码的操作码获取操作数。您所说的操作码字节是什么意思?这不是图中操作数列表下的第一行/第二行吗?没有指令“寄存器”。CPU获取操作码字节(在某些情况下是前缀),然后根据已解码的操作码获取操作数。您所说的操作码字节是什么意思?这不是图中操作数列表下的第一行/第二行吗?这里有太多错误。“IR寄存器存在”,但它与“指令寄存器”无关。它们是两个独立的寄存器,每个寄存器具有唯一的功能,与“指令”无关(I表示中断,R表示刷新)。“不可访问”,不正确:
LD A,R
LD A,I
用于读取,反之用于写入。“.使用IR寄存器”-完全错误。@Jongware,我不同意你的看法,如果你读了Rodnay Zaks的书,他明确指出IR(指令寄存器)确实是Z80内部的一个物理寄存器,它与I和R寄存器(一个处理中断,另一个处理内存刷新)不同。IR寄存器对程序员是隐藏的,但它用于存储获取的操作码。这里有太多错误。“IR寄存器存在”,但它与“指令寄存器”无关。它们是两个独立的寄存器,每个寄存器具有唯一的功能,与“指令”无关(I表示中断,R表示刷新)。“不可访问”,不正确:
LD A,R
LD A,I
用于读取,反之用于写入。“.使用IR寄存器”-完全错误。@Jongware,我不同意你的看法,如果你读了Rodnay Zaks的书,他明确指出IR(指令寄存器)确实是Z80内部的一个物理寄存器,它与I和R寄存器(一个处理中断,另一个处理内存刷新)不同。红外寄存器