打印
[国产单片机]

移位除法,余数不对,请高手帮忙

[复制链接]
2965|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
fzy_666|  楼主 | 2010-11-4 12:51 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
SysFlag  ==  0x12
   Carry ==  0
  
  SangSuH  ==  0x20  ;商高位
  SangSuL  ==  0x21  ;商低位
  YuShu  ==  0x22  ;余数
  MulUnit  ==  0x23  ;相乘次数
  DivUnit  ==  0x23  ;相除次数
  BeiSuH  ==  0x24  ;被乘数高位
  BeiSuL  ==  0x25  ;被乘数低位
  ChenSu  ==  0x26  ;乘数
  ChuSuH  ==  0x26  ;除数高位
  ChuSuL  ==  0x27  ;除数低位
  psw   ==  0x03
  c   ==  0
  
  
  DataTempL ==  0X28
  DataTempH ==  0x29
  
  org  0x00
  jmp  start
Start:
  mov  a, @0x01   ;右移1次
  mov  DivUnit, a
  clr  SangSuL    ;商清零
  clr  SangSuH    ;商高位清零
  clr  YuShu    ;余数清零
  clr  DataTempL
  clr  DataTempH
  mov  a,@0xff
  mov  BeiSuL,a   ;送进被除数
  mov  a,@0x04
  mov  BeiSuH,a   ;送进被除数高位
  mov  a,@0x64    ;0x64
  mov  ChuSuL,a   ;送进除数
  clr  ChuSuH    ;除数高位清零
  bc  SysFlag,Carry  ;清除备份进位位
  clr  SysFlag
ChuSuDuiQi:
  jbc  ChuSuH,7   ;除数最高位是否为1
  jmp  Div16Start
  bc  psw,c
  rlc  ChuSuL    ;最高位不为1,除数右移补齐最高位
  rlc  ChuSuH
  inc  DivUnit    ;增加一次相除次数
  jmp  ChuSuDuiQi
Div16Start:
  mov  a,BeiSuH   ;暂存被除数高位
  mov  DataTempH,a
  mov  a,ChuSuL   ;取除数低位
  sub  a,BeiSuL   ;被除数低位-除数低位
  mov  DataTempL,a   ;放到暂存器低位
  jbs  psw,c
  dec  DataTempH   ;不够减,被除数高位减1
  mov  a,ChuSuH   ;取除数高位
  sub  a,DataTempH   ;被除数高位-除数高位
  mov  DataTempH,a
  jbc  psw,c
  jmp  BsCarryGo   ;不够减,判断进位位
JudgeCarry:
  jbs  SysFlag,Carry
  jmp  BcCarryGo   ;进位位为零,被除数不替换
  bc  SysFlag,Carry
BsCarryGo:
  mov  a,DataTempL   ;够减,差值放到被除数
  mov  BeiSuL,a
  mov  a,DataTempH
  mov  BeiSuH,a
  bs  psw,c
  rlc  SangSuL    ;商左移
  rlc  SangSuH
  jmp  DivUnitDec
BcCarryGo:
  bc  psw,c    ;商补0左移
  rlc  SangSuL
  rlc  SangSuH
DivUnitDec:
  bc  psw,c
  rlc  BeiSuL    ;被除数左移
  rlc  BeiSuH
  bc  SysFlag,Carry
  jbc  psw,c
  bs  SysFlag,Carry  ;保存进位位
  djz  DivUnit
  jmp  Div16Start
Div16Finish:
  bc  psw,c
; rrc  BeiSuH
; rrc  BeiSuH
  mov  a,BeiSuH
  mov  YuShu,a
Div16Ret:
  nop
  ret

相关帖子

沙发
fzy_666|  楼主 | 2010-11-4 12:52 | 只看该作者
QQ:1048496813

使用特权

评论回复
板凳
fzy_666|  楼主 | 2010-11-4 12:52 | 只看该作者
运行结果,商正确,余数不对

使用特权

评论回复
地板
老鱼探戈| | 2010-11-4 13:01 | 只看该作者
余数是不是负数了

使用特权

评论回复
5
fzy_666|  楼主 | 2010-11-4 13:05 | 只看该作者
不是负数的

使用特权

评论回复
6
fzy_666|  楼主 | 2010-11-4 13:06 | 只看该作者
运行后,余数应该是0x4F,但仿真结果是0X3C

使用特权

评论回复
7
fzy_666|  楼主 | 2010-11-4 13:08 | 只看该作者
老鱼探哥,可以加你QQ不?

使用特权

评论回复
8
xxdcq| | 2010-11-15 16:53 | 只看该作者
给你来点全面的

;被除数在r5,r6中,除数在r4中,商在r6中,余数在r3
divd:
                mov        r7,#16
                mov        r2,#00h
                mov        r3,#00h
divd1:
                clr        c
                mov        a,r6
                rlc        a
                mov        r6,a
                mov        a,r5
                rlc        a
                mov        r5,a
                mov        a,r3
                rlc        a
                mov        r3,a
                mov        a,r2
                rlc        a
                mov        r2,a
                clr        c
                mov        a,r3
                subb        a,r4
                mov        b,a
                mov        a,r2
                subb        a,#00h
                jc        divd2
                mov        r2,a
                mov        r3,b
                inc        r6
divd2:
                djnz        r7,divd1
                ret
;******************************************************************************
;被除数在r2,r3,r4,r5中,除数在r6,r7中,双字节商在r2,r3中
divd:
                mov        b,#16
divd1:
                clr        c
                mov        a,r5
                rlc        a
                mov        r5,a
                mov        a,r4
                rlc        a
                mov        r4,a
                mov        a,r3
                rlc        a
                mov        r3,a
                xch        a,r2
                rlc        a
                xch        a,r2
                mov        f0,c                                ;保存溢出位
                clr        c
                subb        a,r7
                mov        r1,a
                mov        a,r2
                subb        a,r6
                anl        c,/f0                                ;结果判断
                jc        divd2
                mov        r2,a                                ;够减,存放新的余数
                mov        a,r1
                mov        r3,a
                inc        r5
divd2:
                djnz        b,divd1                                ;计算完十六位商
                mov        a,r4                                ;将商移到R2R3中
                mov        r2,a
                mov        a,r5
                mov        r3,a
                ret
;******************************************************************************
;被除数在r2,r3,r4,r5中,除数在r6,r7中,三字节商在r3,r4,r5中,余数在temp1,r2
divd:
                mov        b,#24
                mov        temp1,#00h
divd1:
                clr        c
                mov        a,r5
                rlc        a
                mov        r5,a
                mov        a,r4
                rlc        a
                mov        r4,a
                mov        a,r3
                rlc        a
                mov        r3,a
                mov        a,r2
                rlc        a
                mov        r2,a
                mov        a,temp1
                rlc        a
                mov        temp1,a
                mov        f0,c                                ;保存溢出位
                mov        a,r2
                clr        c
                subb        a,r7
                mov        temp,a
                mov        a,temp1
                subb        a,r6
                anl        c,/f0                                ;结果判断
                jc        divd2
                mov        temp1,a                                ;够减,存放新的余数
                mov        a,temp
                mov        r2,a
                inc        r5
divd2:
                djnz        b,divd1                                ;计算完24位商
                ret
;******************************************************************************

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

37

主题

327

帖子

4

粉丝