《单片机原理及接口技术》李朝青第三版有个求补码的程序不太懂

28、MOVA,R3;取该数高8位→AANLA,#80H;取出该数符号判断JZL1;是正数,转L1MOVA,R4;是负数,将该数低8位→ACPLA;低8位取反ADDA,#... 28、 MOV A,R3 ;取该数高8位→A
ANL A,#80H ;取出该数符号判断
JZ L1 ;是正数,转L1
MOV A,R4 ;是负数,将该数低8位→A
CPL A ;低8位取反
ADD A,#01H ;加1

MOV R4,A ;低8位取反加1后→R4
MOV A,R3 ;将该数高8位→A
CPL A ;高8位取反 (这里直接把高八位取反符号位不就变成0了吗?这不对吧)
ADDC A,#00H ;加上低8位加1时可能产生的进位
MOV R3,A ;高8位取反加1后→R3
L1: RET
拜托大神帮忙看看
展开
 我来答
做而论道
高能答主

2015-02-21 · 把复杂的事情简单说给你听
知道大有可为答主
回答量:3万
采纳率:80%
帮助的人:1.2亿
展开全部
假设 R3R4 中,是原码。

求补码的方法是:正数不变,负数则求反加一。
更多追问追答
追问
可是负数的反码和补码符号位不都是1吗?
从MOV A,R4 ;这条语句开始就是说明原数是负数也就是最高位是1,然后进行求补码,对吧。如果直接把高八位求反,不是把符号位变成0了吗?
追答
CPL  A           ;高8位取反 
(这里直接把高八位取反符号位不就变成0了吗?这不对吧)
----
你说的对。
符号位不应该取反。

或者,也可在后面,将符号位置一,如下:

……
ADDC A,#00H ;加上低8位加1时可能产生的进位

SETB ACC.7;----加上这句。

MOV R3,A ;高8位取反加1后→R3

L1: RET
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式