当较低的咬口产生一进位到更高阶的咬口时,辅助标志被设置。例如:
1001 9
1001 9
---- ----
1 0010 18在这种情况下,腋窝的移动是设定的。
我还听说,在BCD加法期间,这个进位被用来将0110添加到低阶咬边,以便得到正确的BCD答案。
但考虑一下这个案子
1001 9
0011 3
---- ---
1100 12在这种情况下,进位不是从这个咬口产生的,辅助进位没有设置,但是答案不是正确的BCD加法。那么是什么促使处理器更正答案并得到正确的BCD答案呢?
发布于 2014-01-30 16:05:14
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。
发布于 2014-01-30 16:01:44
您必须使用DAA或AAA手动完成此操作。如果>9,这将调整当前的咬口,并将1添加到较高的咬口。
https://stackoverflow.com/questions/21461285
复制相似问题