单片机程序里 带进位减法怎样进行十进制调整

如题所述

51单片机的DA A指令,放在SUBB指令后面,是不起作用的;
必须把SUBB指令变换成ADD指令,才能用DA A指令进行调整。

这里提到了“减法”变换成“加法”,就要借用时钟“倒拨”变成“正拨”的方法,倒拨15分钟,和正拨45分钟,效果相同。15和45就是以60为模的互补的数。
两位十进制数,是以100为模的,减去60,和加上40,效果是相同的。
100,可以分解,写成99+1,按照十六进制,可以写成9AH。

那么,将A和60相减,程序如下:
MOV R0, A ;保存被减数.
MOV A, #9AH ;100
CLR C
SUBB A, #60H ;减去减数,得到100的补数.
ADD A, R0 ;使用加法即可.
DA A ;调整为BCD数.
;完
温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-06-13
如果是51单片机的话,做十进制减法运算,只能用ADD和ADDC指令做,因为只有这两条加法指令运算的结果才能用DA A指令进行十进制调整。方法是:如Y=A-B,变成Y=A+(-B),做加法之前将-B变成补码就可以了。提倡用KeilC写程序,就不用考虑什么十进制调整了,也不管是加法还是减法了,多好哇。
相似回答