1

我知道在执行 8 位二进制加法时,如果从第 3 位到第 4 位有进位,则辅助标志设置为 1;但是添加 2 个 16 位数字呢?我在网上看不到任何明确的答案。

我正在研究intel 8086微处理器...

例如,当我添加这两个数字时,0x30a2 和 0xf1ac

0011 0000 1010 0010 + 1111 0001 1010 1100

CF=1
ZF=0
PF=1
SF=0
OF=1
AF=? 

我不知道在哪里检查它

4

3 回答 3

4

来自 James W. Coffron 的“8086/8088 编程”:

AF辅助进位标志。如果设置了此标志,则低半字节进位到高半字节或从高半字节借位到低半字节。高半字节或低半字节是指 16 位值的低位字节。

在我的日子里,我们会写一小段代码来观察处理器的行为。您可以通过添加或减去两个 16 位数字,后跟 a来检查它pushf,并pop ax随意检查状态标志。

编辑。

(获取标志的另一种方法是LAHF加载 5 位AH带标志,AF转到第 4 位。)

所以AF表示从第 3 位到第 4 位的进位,无论操作数的大小如何。

请注意,没有依赖于AF. 指令在内部使用它在DAA指令之后立即进行小数调整ADD,通常使用AL.

于 2016-04-08T08:07:30.837 回答
2

在 8086 上adjust flag (bit 4),当第 3 位到第 4 位有进位或第 4 位到第 3 位有借位时,置位BCD operation support

BCD operations8086 上只有 8 位,BCD调整操作只对AL寄存器进行。

对于 16 位操作,我希望它的行为与 8 位操作相同。

进位标志(位 0)基于操作是 8 位还是 16 位。如果是 16 位,则结果 > 65535 将进位。如果是 8 位,则结果 > 255 将进位。

于 2016-04-08T06:33:53.553 回答
0

进位标志的“位置”取决于操作员指令,它将始终是最高位

例如 add ax,bx :由于操作数是 16 位,进位将表示第 16 位相加的进位,即使您添加 ax(值为 3)和 9(这些值将被视为 0000000000000011 和 0000000000000101 )

于 2016-04-08T06:14:51.333 回答