《单片机原理及接口技术》李朝青第三版有个求补码的程序不太懂
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
拜托大神帮忙看看 展开
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
拜托大神帮忙看看 展开
展开全部
假设 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
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询