是不是做加法,凡是遇到上述情况都得修正?--是BCD码的加法,就必须修正。
那为什么我看到的某些加法运算没有修正啊?--那就不是BCD码的加法。
一般时,是用四位二进制数,表示一位16进制数(0~16),即0000~1111。
BCD码,是用四位二进制数,表示一位十进制数 (0~9),即0000~1001。
如果是BCD码的加法,就必须修正,否则就可能出现16进制数,这个结果就不是BCD码了。
由于BCD码在单片机中是以16进制的形式存储的,我们观测到的值和单片机实际存储的值是不一样的,例如BCD码10,我们看到的值是10,但是单片机实际存储的值16,单片机的运算也都是以16进制的形式进行的,因此用单片机进行BCD的运算都需要修正。不是BCD码的运算,就不需要修正了。例如两个正常的十进制数 15+17=32;15对应的16进制数是0Fh,17对应的16进制数是11H
相加写成
MOV A,#0FH
ADD A, #11H
结果为20H对应是进制数为32
也可以写成
MOV A,#15D
ADD A, #17D ;结果一样
单片机汇编的十进制调整指令, 是为了让编程简单化, 可以直接以 十进制 运算, 如
15+56=
MOV A, #15H ; A = 15H ( 注意 要以 十六进制 写成 15H)
ADD A, #56H ; A = 15H+56H = 6BH
DA A ; A = 6BH + 06H = 71H C = 0 进位标志
68+75=
MOV A, #68H
ADD A, #75H ; A = 68H+75H = DDH
DA A ; A = DDH + 66H = 43H C = 1 = 143
; 注 十进制调整指令 必须跟在加法指令后面
; 否则会出错。
如果是BCD码,就必须修正,这样得到的结果才是BCD码
只有BCD码相加才用