二进制加法指令不能完全适用于BCD码十进制的加法运算,故应对压缩的BCD码的加法结果需要进行有条件的修正。
出错原因及调整方法
BCD码(4位二进制编码)共有十六个编码,但只用了其中的10个,剩余六个就没有用到。而这六个没有用到的编码为无效编码。故1位BCD码加法运算出错的情况有两种:
1)相加结果大于9无进位,及已经进入无效编码区;
2)相加结果有进位,及已经跳过无效编码区;
无论哪一种出错情况,都是因为六个无效编码造成的。
调整方法是把运算结果加6调整,即所谓的十进制调整修正。
修正方法
1)累加器低四位大于9或辅助进位位Ac=1,则进行低四位加6修正。
2)累加器高四位大于9或进位位Cy=1,则进行高四位加6修正。
3)累加器高四位为9,低四位大于9,则高四位和低四位分别加6修正。
整个过程由DA A可自动实现
举例
(A)=56H,(R5)=67H,把他们看作两个压缩的BCD数进行BCD数加法。
执行指令:
ADD A,R5
DA A
0101 0110 (56H)
+) 0110 0111 (67H)
= 1011 1101 高四位和第四位都大于9 故要都加6来对结果修正、
+) 0110 0110
= 1 0010 0011
结果(A)=23H,Cy=1。
56+65=123 结果是正确的