16位二进制加法如何设置辅助标志

how to set auxiliary flag for 16bits binary addition

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

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

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

0011 0000 1010 0010 + 1111 0001 1010 1100

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

我不知道去哪里查看

进位标志的"posititon"取决于运算符指令,它总是最高位

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

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

BCD operations在 8086 上仅为 8 位,BCD 调整操作仅在 AL 寄存器上运行。

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

进位标志(位0)取决于操作是8位还是16位。如果它是 16 位,那么如果结果 > 65535 它将进位。如果它是 8 位,那么如果结果 > 255 它将进位。

来自 James W. Coffron 的 "Programming the 8086/8088":

AF auxiliary carry flag. If this flag is set, there has been a carry of the low nibble to the high nibble or a borrow from the high nibble to the low. The high or low nibble refers to the low order byte of a 16-bit value.

在我的时代,我们会编写一小段代码来观察处理器的行为。您可以通过添加或减去两个 16 位数字来检查它,然后是 pushfpop ax 以随意检查状态标志。

编辑。

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

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

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