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 位数字来检查它,然后是 pushf
和 pop ax
以随意检查状态标志。
编辑。
(另一种获取标志的方法是使用 LAHF
,它用标志加载 AH
的 5 位,AF
到位 4。)
所以 AF
表示从第 3 位到第 4 位的进位,无论操作数的大小如何。
请注意,没有依赖于 AF
的分支指令。 DAA
指令在内部使用它在 ADD
指令之后立即进行小数调整,通常使用 AL
.
我知道在进行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 位数字来检查它,然后是 pushf
和 pop ax
以随意检查状态标志。
编辑。
(另一种获取标志的方法是使用 LAHF
,它用标志加载 AH
的 5 位,AF
到位 4。)
所以 AF
表示从第 3 位到第 4 位的进位,无论操作数的大小如何。
请注意,没有依赖于 AF
的分支指令。 DAA
指令在内部使用它在 ADD
指令之后立即进行小数调整,通常使用 AL
.