X86处理器中的辅助标志

X86处理器中的辅助标志,x86,bcd,carryflag,X86,Bcd,Carryflag,当低半字节产生到高阶半字节的进位时,辅助标志被设置。例如: 1001 9 1001 9 ---- ---- 1 0010 18 在这种情况下,设置腋下进位 我还听说,为了得到正确的BCD答案,在BCD加法过程中,此进位用于将0110添加到低阶半字节 但请考虑本案 1001 9 0011 3 ---- --- 1100 12 在这种情况下,进位不是从这个半字节生成的,辅助进位没有设置,但答案不是正确的BCD加法。那么是什么提示处理器更正答案并获得正确的BCD答案?您

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

  1001   9
  1001   9
  ---- ----
1 0010  18
在这种情况下,设置腋下进位

我还听说,为了得到正确的BCD答案,在BCD加法过程中,此进位用于将0110添加到低阶半字节

<>但请考虑本案

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

在这种情况下,进位不是从这个半字节生成的,辅助进位没有设置,但答案不是正确的BCD加法。那么是什么提示处理器更正答案并获得正确的BCD答案?

您必须使用
DAA
AAA
手动执行此操作。如果大于9,这将调整当前半字节,并将1添加到较高的半字节。

您必须使用
DAA
AAA
手动执行此操作。如果大于9,这将调整当前半字节,并将1添加到较高的半字节。

DAA(或
AAA
)的其余语义。全部内容如下(对于
DAA
):


所以你看,重要的不仅仅是AF,它还检查数字是否大于9。

DAA(或
AAA
)的其余语义。全部内容如下(对于
DAA
):


所以你看,重要的不仅仅是AF,它还检查数字是否大于9。

辅助标志还有其他用途吗这是一个新问题,太宽泛了,无法回答。您可以查看CF。辅助标志还有其他用途吗?这是一个新问题,范围太广,无法回答。你可以看看1970年代的CF.BCD,那时有拇指轮、数码管和使用十进制数学的计算器。都没了。说明也是如此,它们没有在x64中进行。这是在浪费时间。BCD在20世纪70年代很重要,当时有拇指轮、数码管和使用十进制数学的计算器。都没了。说明也是如此,它们没有在x64中进行。你这样做是在浪费时间。
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;