[51单片机] 求双字节补码的问题

[复制链接]
2423|3
 楼主| 一颗心的思考 发表于 2015-2-4 16:19 | 显示全部楼层 |阅读模式
本帖最后由 一颗心的思考 于 2015-2-4 17:05 编辑

复习汇编下的51,遇见了一个问题,强迫症犯了,老想知道为什么是这样:
首先对低字节取补,然后判其结果是否为全“ 0”。 若是,则高字节取补,
否则高字节取反。

代码如下:
START: MOV R0, #addr1              ;原码低字节地址送 R0
        MOV R1, #addr2              ;补码低字节地址送 R1
        MOV A, @R0                  ;原码低字节送 A
        CPL A                        ; A 内容取补
        INC A
        MOV @R1, A                  ;存补码低字节
        INC R0                       ;调整地址,指向下一单元
        INC R1
        JZ ZERO                      ;( A) =0 时转 ZERO
        MOV A, @R0                  ;原码高字节送 A
        CPL A
        MOV @R1, A                  ;高字节反码存入 addr2+1 单元
        SJMP LOOP1
  ZERO: MOV A, @R0                 ;高字节取补存入 addr2+1 单元
        CPL A
        INC A
        MOV @R1, A
        LOOP1: RET




不明白的地方是对高字节求补码的方法:“判其结果是否为全“ 0”。 若是,则高字节取补,
否则高字节取反。

ZALIN 发表于 2015-2-5 01:28 | 显示全部楼层
取补就是取反加1,低字节取反加1后等于0说明有进位,所以高字节也要取反后加1,否则高字节只需要取反
 楼主| 一颗心的思考 发表于 2015-2-5 13:43 | 显示全部楼层
ZALIN 发表于 2015-2-5 01:28
取补就是取反加1,低字节取反加1后等于0说明有进位,所以高字节也要取反后加1,否则高字节只需要取反
...

谢谢
 楼主| 一颗心的思考 发表于 2015-2-5 13:46 | 显示全部楼层
找不到结贴了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

13

主题

104

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部