关于单片机编程问题,题目如下:将寄存器R1,、R0的内容取补送R3、R2。 答得好的话我还会加分的哦

老师给的答案是:
MOV A,R0
CPL A
ADD A,#1
MOV R2,A
MOV A,R1
CPL A
ADDC A,#0 ;我所疑惑就在这里,为什么是加0呢?不是应该家1么,还有为什么上 ;边的用的是ADD,这里是ADDC (另外我这注释用得对不)
MOV R3,A

寄存器R1,、R0的内容共有16位二进制数,取反后,要加1,二进制就是加上:
0000 0000 0000 0001
上面左边的8个二进制0,就是程序里面,楼主所疑惑的0。追问

可是开始他只是对R0取反,就算他把R0和R1中存的是当成一个16位数,那对高位取补的时候,取反还是应该+1啊,为什么+0呢?还是不懂,求指教

追答

把16位数取反,对R0、R1都进行了,可见两条CPL指令。
把16位数加一,就是加上:00000000 00000001,共15个0、1个1。
故此,对高8位的R1来说,确实只用加0;而对低8位的R0加1即可。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-09-20
ADDC将进位也算进去了,也就是说,先对低8位取反,在对高8位取,低8位有进位才加一。
第2个回答  2011-04-05
ADD只是两个数相加,忽略以前加法运算的进位。
ADDC把进位也算进去了

呵呵,好久没用汇编语言了,网上查的,你再看一下。

参考资料:http://zhidao.baidu.com/question/69602277.html

相似回答