gpt4 book ai didi

assembly - Z80 溢出 DAA

转载 作者:行者123 更新时间:2023-12-02 03:42:44 27 4
gpt4 key购买 nike

我正在编写一个 Z80 仿真器,但一直试图理解小数调整指令对某些操作数的作用。这些操作码在真实 Z80 上的结果(在寄存器 A 和 F 中)是什么?

LD   A,1h
ADD A,99h
DAA

我的代码当前以 A 寄存器中的 0xA0 和半进位和溢出位设置结束。但它应该返回 0 吗?

最佳答案

之后:

LD A, 1h
ADD A, 99h

A 应包含 9Ah。进位、半进位和溢出都应重置,因为从第 3 位到第 4 位或从第 7 位开始没有进位,并且在带符号的解释中,您将正数添加到负数,因此不可能发生溢出。

当您随后执行 DAA 时,处理器将发现低半字节的值大于 0x9。因此,它将决定添加 0x6 以从低位创建合适的十进制进位。

鉴于它要将 0x9 添加到低半字节,它将检查它是否会期望高半字节创建十进制进位。测试高四位字节是否大于0x8。这是。因此 DAA 也会决定将 0x6 添加到高半字节。

因此总体而言,DAA 将决定添加 0x66。

(0x9a + 0x66) MOD 0x100 = 0x00

因此 A 中的结果将为 0x00。

DAA 决定将 0x6 添加到顶部半字节。所以进位现在将被设置。

DAA 还决定将 0x6 添加到底部半字节。所以半进位也将被设置。

符号、零等将根据 0x00 结果设置。

如果我不得不猜测的话,看起来您的代码发现低半字节不正确并计划创建半进位。但是它随后无法检查顶部半字节是否会因此变得不正确(即它是否为 0x8 或更大),并且也没有计划创建顶部半字节进位。

关于assembly - Z80 溢出 DAA,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19099892/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com