我知道当执行8位二进制加法时,如果有从第3位到第4位的进位,则辅助标志设置为1;但是增加2个16位数呢?我在网上看不到任何明确的答案。
我正在研究intel 8086微处理器......
例如,当我添加这两个数字时,0x30a2和0xf1ac
<00> 0011 0000 1010 0010 + 1111 0001 1010 1100CF=1
ZF=0
PF=1
SF=0
OF=1
AF=?
我不确定在哪里查看
答案 0 :(得分:4)
来自James W. Coffron的“编程8086/8088”:
AF 辅助进位标志。如果设置了此标志,则表示存在进位 低半字节到高半字节或从高半字节借用 到了低谷。高或低半字节是指a的低位字节 16位值。
在我的日子里,我们会写一小段代码来观察处理器的行为。您可以通过添加或减去两个16位数字来检查它,然后是pushf
和pop ax
来检查状态标记。
修改强>
(获取标志的另一种方法是使用LAHF
加载带有标志的AH
的5位,AF
加到第4位。)
所以AF
表示从第3位到第4位的执行,无论操作数的大小如何。
请注意,没有依赖AF
的分支指令。 DAA
指令在内部使用它在ADD
指令后立即进行小数调整,通常使用AL
。
答案 1 :(得分:2)
在8086上,当第3位到第4位有一个进位或从第4位到第3位借位时,adjust flag (bit 4)
被设置为BCD operation support
。
BCD operations
仅为8位,BCD
调整操作仅在AL
寄存器上运行。
对于16位操作,我希望它的行为与8位操作相同。
进位标志(位0)基于操作是8位还是16位。如果它是16位,那么如果结果> gt,它将携带。 65535.如果它是8位,那么如果结果> gt,它将携带。 255。
答案 2 :(得分:0)
进位标志的“posititon”取决于运算符指令,它始终是最高位
e.g。 add ax,bx:由于操作数是16位,进位将代表第16位加法的进位 即使你添加了ax(值为3)和9(这些值将被视为0000000000000011和0000000000000101)