⑴ 单片机程序里 带进位减法怎样进行十进制调整
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数.
;完
⑵ 汇编中为什么要有ADD与ADDC两个指令。知道他们区别,但不知道为什么要有另一个指令。
在汇编语言编程的时候,ADDC指令,即是带进位的加法指令,用于多字节加法运算,低位字节相加可能产生进位,所以高位字节运算时,必须使用带进位的加法运算。
汇编中的ADD指令是加法指令,其功能是把源操作所指出的内容加到累加器A,其结果存在A中。但是对于多字节数相加,就必须用ADDC指令了。因为ADDC指令的功能是把源操作数所指出的内容和累加器内容及进位标志CY相加,结果存于A中。
单片机中的汇编指令包括,算术操作类指令,布尔变量操作类指令,逻辑操作数指令,控制转移类指令。其中算术操作类指令,又包括,加法、减法、加一、减一和乘法、除法运算指令。借助溢出标志可以对有符号数进行补码运算,借助进位标志,可进行多精度加、减运算。
(2)51单片机daa指令为什么不能减法扩展阅读
两数相加运算步骤:
1)把第一个数从它的存贮单元(Location)中取出来,送至运算器。
2)把第二个数从它所在的存贮单元中取出来,送至运算器;
3)相加;
4)把相加完的结果,送至存贮器中指定的单元。
ADD运算中的注意事项:
1)如果位7有进位,则进位标志Cy置“1”,否则清0;
2)如果位3有进位,则辅助进位标志Ac置“1”,否则清0;
3)溢出标志位OV:如果位6有进位,而位7没有进位;或者位7有进位,而位6 没有,则溢出标志位OV置“1”,否则清0。OV状态,只有在带符号数加法运算时才有意义。