5

抱歉,这是我的第二个 Z80 DAA 问题——我现在已经几乎实现了这条指令,但有一点我不确定——这条指令是否设置了 H 标志?Z80 手册说“看指令”,但它只提到了 DAA 之前的标志,而不是在它执行之后。

我将标志设置如下:

如果结果为负(0x80 和结果等于 0x80)则设置 S 如果结果为零则设置 Z H(不确定因此这个问题) P/V 设置为结果的奇偶校验(如果是偶数则为 1,如果为奇数则为 0)N如果修改了原始累加器值的较高半字节,则设置 C

除此之外,该指令似乎按照我的预期执行:-) 我希望有人可以为我解决这个问题,非常感谢。

4

2 回答 2

3

我只能在这里找到半进位/借位标志由DAA修改。

我建议将此标志设置为与 x86 CPU 上的 DAA 和 DAS 指令设置的 AF(辅助进位)标志完全相同。我认为 i8080/i8085/Z80 和 i8086 的 DAA/DAS 之间的操作没有任何区别。

如果 x86 DAA/DAS 将累加器的最低 4 位调整 6,则将 AF 设置为 1。如果不调整它们,则将 AF 重置为 0。

请参阅英特尔(或 AMD)x86 CPU 手册中的 DAA 和 DAS 伪代码。

于 2011-12-01T08:51:10.140 回答
2

这是个好问题。是的,H 标志的行为没有明确记录,因为它的行为与DAA.

如果 A 的低半字节(最低有效四位)是非基 10 数(大于 9,如 A、B、C、D、E 或 F)设置了 H 标志,则将 6 添加到寄存器。这意味着即使低半字节在 0-9 范围内,您也可以通过设置 H 标志强制将 6 添加到 A 寄存器。

当谈到你的问题时,根据我的经验,H 标志通常保持不变,但你不能依赖它,因为据说“效果是非标准的”,这意味着 H 标志可能会根据情况改变或可能不会改变。在这种情况下,您应该始终认为 H 标志在执行后会受到DAA指令的影响,即使您在测试中看到它没有受到影响。

于 2011-12-01T08:03:40.443 回答