Z80标志 - 如何生成?

时间:2012-07-17 00:19:58

标签: microcontroller flags opcode z80 alu

我正在设计一个Z80兼容的项目。我要设计标志寄存器。

我原本以为标志是直接从ALU生成的,具体取决于输入和ALU操作的类型。

但是在查看指令和标志结果之后,标志似乎并不总是与此逻辑一致。

因此,我假设我还必须向ALU提供操作码,以便每次都生成正确的标志。但这似乎使设计过于复杂。在进行这个巨大的设计步骤之前,我想通过互联网查看。

我说错了吗?或者只是真的很困惑,它就像我原来想的一样简单?

2 个答案:

答案 0 :(得分:3)

当然,操作的类型很重要。在进行加法和减法时考虑溢出。比如,您正在添加或减去8位字节:

1 + 5 = 6 - 无溢出

255 + 7 = 6 - 溢出

1-5 = 252 - 溢出

200-100 = 100 - 无溢出

200 + 100 = 44 - 溢出

100-56 = 44 - 没有溢出

显然,进位标志的状态不仅取决于输入字节或结果字节值,还取决于操作。它表示无符号溢出。

逻辑非常一致。如果不是,那么就该阅读文档以了解官方逻辑。

您可能对this question感兴趣。

答案 1 :(得分:0)

您的代码是为CP / M操作系统编写的。 I / O通过BDOS(基本光盘操作系统)接口完成。基本上,您在C寄存器中加载操作代码,在其他寄存器中加载任何其他参数,并调用位置0x5。功能代码C = 2将E寄存器中的字符写入控制台(=屏幕)。您可以在第1200行看到这一点:

    ld  e,a
    ld  c,2
    call    bdos
    pop hl
    pop de
    pop bc
    pop af
    ret
 bdos   push    af
    push    bc
    push    de
    push    hl
    call    5
    pop hl
    pop de
    pop bc
    pop af
    ret 

有关BDOS呼叫的参考,请尝试here。 要模拟这个,你需要调用地址5的调用,并使用你可以使用的任何设施来实现它们。