当低半字节产生进位到高阶半字节时,辅助标志变为置位。例如:
1001 9
1001 9
---- ----
1 0010 18
在这种情况下,腋窝携带被设定。
我还听说这个进位用于在BCD添加过程中将0110添加到低位半字节,以获得正确的BCD答案。
但请考虑这个案例
1001 9
0011 3
---- ---
1100 12
在这种情况下,不会从此半字节生成进位,未设置辅助进位,但答案不是正确的BCD添加。然后是什么提示处理器纠正答案并得到正确的BCD答案?
答案 0 :(得分:3)
DAA
(或AAA
)的其余语义。完整的,它们是(DAA
):
IF 64-Bit Mode
THEN
#UD;
ELSE
old_AL ← AL;
old_CF ← CF;
CF ← 0;
IF (((AL AND 0FH) > 9) or AF = 1)
THEN
AL ← AL + 6;
CF ← old_CF or (Carry from AL ← AL + 6);
AF ← 1;
ELSE
AF ← 0;
FI;
IF ((old_AL > 99H) or (old_CF = 1))
THEN
AL ← AL + 60H;
CF ← 1;
ELSE
CF ← 0;
FI;
FI;
所以你看,重要的不仅仅是AF,它还会检查数字是否为> 9。
答案 1 :(得分:1)
您必须使用DAA
或AAA
手动执行此操作。如果>这将调整当前半字节。 9并将较高的半字节加1。