X86处理器中的辅助标志

时间:2014-01-30 15:57:26

标签: x86 bcd carryflag

当低半字节产生进位到高阶半字节时,辅助标志变为置位。例如:

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

在这种情况下,腋窝携带被设定。

我还听说这个进位用于在BCD添加过程中将0110添加到低位半字节,以获得正确的BCD答案。

但请考虑这个案例

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

在这种情况下,不会从此半字节生成进位,未设置辅助进位,但答案不是正确的BCD添加。然后是什么提示处理器纠正答案并得到正确的BCD答案?

2 个答案:

答案 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)

您必须使用DAAAAA手动执行此操作。如果>这将调整当前半字节。 9并将较高的半字节加1。