单片机里的 ADDC 这条指令有什么意义? 它能实现那些工能? 它带进位位加法有什么用

单片机里的 ADDC 这条指令有什么意义? 它能实现那些工能? 它带进位位加法有什么用,第1张

ADDC表示在ADD加法的基础上再加上进位位CY。就是如果CY=1就再在ACC上加1。

它用用途就是可以很方便地进行多字节加法。

比如5678H+9ABCH,8051是8位机,只能做字节加法,所以就先做78H+BCH=134H,34H存在ACC,高位1放在CY中。然后把ACC中值取出,再做56H+9AH=F0H,再加CY,为F1H,连上刚才取出的,结果就是F134H。

您说的可能是汇编语言中“带进位加法”指令吧?它的含义是:做加法时,如果上文留下来有进位标志,则要多加1。在多字长的运算中,这是一个很常用的指令。例如,您要计算两个双倍字长的整数的和,可以如下:(1)先用普通加法指令,将加数和被加数的低位字相加,得到的机器和作为和的低位字,如有进位,同时会产生进位标志。(2)再用ADDC指令,将加数和被加数的高位字相加,得到的机器和作为和的高位字。在这个过程中,如果第(1)步产生了进位,自然就会在第二步的时候,将这个进位进上去。注意在执行ADDC的时候,如果又有进位,还会产生进位标志。故这个方法可以推广到三倍字长、四倍字长、……等等计算中。另外还有一个灵活应用:可以用它实现“连同进位标志的循环左移”,即:用ADDC指令对累加器(或具有累加器作用的某寄存器)作“自己加自己”的 *** 作,效果就是:该寄存器内容左移一位,上文留下的进位标志移入该寄存器的最低位,该寄存器的原最高位移入进位标志。

这是51单片机的一条加法指令,可以完成带进位Cy的加法运算。指令的形式是:ADDC A ,源 *** 作数,加法是在A 中完成的,加法计算时的两个数一个数是A 中原有的数,另一个数即是源 *** 作数,同时连同进位Cy一起加进来。还是举例说明吧:如计算56A8H+2368H,这么写程序:MOV A , #0A8H ;先把第一个数的低8位A8H送AADD A , #68H;与另一个数的低8位相加,即A(A8H)+68H,加法结果是A=10H,因结果超过了255(FFH)则进位Cy=1,即结果是110HMOV 30H, A ;把低8位结果送到30H单元保存起来MOV A , #56H ;再把第一个数的高8位送A,准备计算高8位数ADDC A,#23H ;与另一个数的高8位相加,这时要同时把低8位的进位Cy=1加进来,即A(56H)+23H+1(因Cy1),则A=7AH,MOV 31H, A ;最后将高8位的计算结果送到31H单元保存。最终结果是7A10H,这必须要计算两次,也要用两个单元来保存。如上可见,先计算低8位时,用ADD,是不带进位,因低8位加时还没有进位,而计算高8位时,就必须带进位的加法了,必须用ADDC了,因低8位加时有进位,假如没有进位,也要用ADDC,但这时的Cy=0,加上0就是低8位没有进位。还有一种情况是多个8位数相加,因相加的结果超过了8位数(255),所以,每一次加法也必须用带进位加法计算,即必须用ADDC了。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://www.outofmemory.cn/dianzi/8966025.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-23
下一篇 2023-04-23

发表评论

登录后才能评论

评论列表(0条)

保存