我正在设计一个Z80兼容的项目。我要设计标志寄存器。
我原本以为标志是直接从ALU生成的,具体取决于输入和ALU操作的类型。
但是在查看指令和标志结果之后,标志似乎并不总是与此逻辑一致。
因此,我假设我还必须向ALU提供操作码,以便每次都生成正确的标志。但这似乎使设计过于复杂。在进行这个巨大的设计步骤之前,我想通过互联网查看。
我说错了吗?或者只是真的很困惑,它就像我原来想的一样简单?
答案 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的调用,并使用你可以使用的任何设施来实现它们。