rt
如DAA,(1)如al中的低4位在a~f之间,或af为1,则al=(al)+6,且af位置1
....
它们作这样的调整的依据是什么?为什么这样调整是合理的?
其实我还没有搞明白这些指令有什么用....
------解决方案--------------------------------------------------------
现在 BCD 码使用得少, 所以相关的指令也少有用途的. DAA 指令是用在压缩的 BCD 码数值的加运算之后. 由于数值运算是基于 16 进制的, 进位条件过 0fh, 而 压缩的 BCD 码的进位则应该是过 09 就应该进位. 所以, 结果的低位在 a-f 间时, 对压缩 BCD 就应该进位了; af=1 时, 依据 16 进制的运算已经发生了低位向高位的进位, 但这个进位对压缩 BCD 来说, 还是不够的, 所以, 也需要进行再次进位的调整. 其实, 说起来是有些乱. 拿几个数值来验算下就简单了:
12h
+) 12h
------
= 24h ; 结果 24 = 12+12, 正确
18h
+) 12h
------
= 2ah ; 低位为 a, 需要调整, 2ah+6 = 30h. 30=12+18, 正确
18h
+) 19h
------
= 31h ; 低位正常, 但 af=1, 所以调整, 31h+6=37h. 37=18+19, 正确
至于为什么是加 6 来进行调整, 这是因为 BCD 码是 10 进制, 内部运算是 16 进制, 两进制间单位值相差就是 6