2014-01-30 43 views
2

辅助标志在下半字节产生进位到高位半字节时置位。例如:X86处理器中的辅助标志

1001 9 
    1001 9 
    ---- ---- 
1 0010 18 

在这种情况下,设置腋窝进位。

我也听说这个进位用于在BCD加法期间将0110加到低位半位,以便得到正确的BCD答案。

但考虑这种情况下

1001 9 
0011 3 
---- --- 
1100 12 

在这种情况下,不从这个四位产生的进位,辅助进位没有设置,但得到的答复是不正确的BCD加法。然后什么提示处理器纠正答案并得到正确的BCD答案?

+0

BCD 20世纪70年代要紧,回来的时候有是拇指轮,数码管和使用十进制数学的计算器。这一切都消失了。这些指令也是如此,它们并未在x64中推广。你正在浪费你的时间。 –

回答

3

其余的​​(或AAA)的语义。在满,他们是(对于​​):

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

你必须手动使用​​或AAA。如果> 9,这将调整当前的半字节,并将1加到较高的半字节。

+0

是否有任何其他用于辅助标志 – Danny

+0

这是一个新问题,并且回答太宽泛。您可以查看关于CF的[Intel文档](http://www.intel.com/content/www/us/en/processors/architectures-software-developer-manuals.html)。 – m0skit0