2014-01-30 44 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