0

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

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

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

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

我对么?或者只是真的很困惑,它和我最初想的一样简单?

4

2 回答 2

3

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

1+5=6 - 没有溢出

255+7=6 - 溢出

1-5=252 - 溢出

200-100=100 - 没有溢出

200+100=44 - 溢出

100-56=44 - 没有溢出

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

逻辑非常一致。如果不是,是时候阅读文档来学习官方逻辑了。

您可能对这个问题感兴趣。

于 2012-07-17T01:12:31.213 回答
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 调用的参考,请在此处尝试。要模拟这一点,您需要捕获对地址 5 的调用,并使用您可用的任何工具来实现它们。

于 2012-10-11T08:50:22.787 回答