关于单片机编程问题,题目如下:将寄存器R1,、R0的内容取补送R3、R2。 答得好的话我还会加分的哦
老师给的答案是:MOVA,R0CPLAADDA,#1MOVR2,AMOVA,R1CPLAADDCA,#0;我所疑惑就在这里,为什么是加0呢?不是应该家1么,还有为什么上;...
老师给的答案是:
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 展开
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 展开
3个回答
展开全部
寄存器R1,、R0的内容共有16位二进制数,取反后,要加1,二进制就是加上:
0000 0000 0000 0001
上面左边的8个二进制0,就是程序里面,楼主所疑惑的0。
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即可。
展开全部
ADDC将进位也算进去了,也就是说,先对低8位取反,在对高8位取,低8位有进位才加一。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2011-04-05
展开全部
ADD只是两个数相加,忽略以前加法运算的进位。
ADDC把进位也算进去了
呵呵,好久没用汇编语言了,网上查的,你再看一下。
ADDC把进位也算进去了
呵呵,好久没用汇编语言了,网上查的,你再看一下。
参考资料: http://zhidao.baidu.com/question/69602277.html
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询