关于单片机编程问题,题目如下:将寄存器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
展开
 我来答
做而论道
高能答主

2011-04-05 · 把复杂的事情简单说给你听
知道大有可为答主
回答量:3万
采纳率:80%
帮助的人:1.2亿
展开全部
寄存器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即可。
fly飞翔98
2012-09-20
知道答主
回答量:1
采纳率:0%
帮助的人:1589
展开全部
ADDC将进位也算进去了,也就是说,先对低8位取反,在对高8位取,低8位有进位才加一。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2011-04-05
展开全部
ADD只是两个数相加,忽略以前加法运算的进位。
ADDC把进位也算进去了

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

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

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式