找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 63|回复: 2
打印 上一主题 下一主题
收起左侧

双字节二进制无符号数除法的疑问

[复制链接]
跳转到指定楼层
楼主
ID:72088 发表于 2026-2-26 18:13 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
入口条件:被除数在R2、R3、R4、R5中,除数在R6、R7中。
出口信息:OV=0 时,双字节商在R2、R3中,OV=1 时溢出。
影响资源:PSW、A、B、R1~R7 堆栈需求: 2字节

DIVD: CLR C ;比较被除数和除数
        MOV A,R3
        SUBB A,R7
        MOV A,R2
        SUBB A,R6
        JC DVD1
        SETB OV ;溢出
        RET
DVD1: MOV B,#10H ;计算双字节商
DVD2: 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 ;计算(R2R3-R6R7)
        MOV R1,A
        MOV A,R2
        SUBB A,R6
        ANL C,/F0 ;结果判断
        JC DVD3
        MOV R2,A ;够减,存放新的余数
        MOV A,R1
        MOV R3,A
        INC R5 ;商的低位置一
DVD3: DJNZ B,DVD2 ;计算完十六位商(R4R5)
        MOV A,R4 ;将商移到R2R3中
        MOV R2,A
        MOV A,R5
        MOV R3,A
        CLR OV ;设立成功标志
        RET
被除数这里是4位,为啥只比较R2/R3的值,和除数
4位被除数哪个是低位,如果只有两位被除数咋办,R4R5是低位吗?

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:72088 发表于 2026-2-26 21:01 | 只看该作者
最后采用单片机自带的硬件除法器计算,只保留整数
;用硬件16位除法器计算16位/16位
        MOV  P_SW2,#80h
        MOV  A,#2fh;被除数装入2f99H
        MOV  DPTR,#MD1
        MOVX @DPTR,A
        MOV  A,#99H;
        MOV  DPTR,#MD0
        MOVX @DPTR,A

        MOV  A,ADC_RES;除数装入
        MOV  DPTR,#MD5
        MOVX @DPTR,A
        MOV  A,ADC_RESL;
        MOV  DPTR,#MD4
        MOVX @DPTR,A

        MOV  A,#10100000B;16/16模式
        MOV  DPTR,#ARCON
        MOVX @DPTR,A
        MOV  A,#00000001B;开始计算
        MOV  DPTR,#OPCON
        MOVX @DPTR,A
TTT:
        MOV  DPTR,#OPCON
        MOVX A,@DPTR
        ANL A,#01H
        JNZ TTT         ;不为0转移,查询

        MOV  DPTR,#MD1
        MOVX A,@DPTR
        MOV 35H,A
        MOV  DPTR,#MD0
        MOVX A,@DPTR
        MOV 34H,A
        MOV  P_SW2,#00h


        MOV A,35H;解压成BCD码供显示验证
        SWAP A
        ANL A,#0FH
        MOV 33H,A
        MOV A,35H
        ANL A,#0FH
        MOV 32H,A

        MOV A,34H
        SWAP A
        ANL A,#0FH
        MOV 31H,A
        MOV A,34H
        ANL A,#0FH
        MOV 30H,A

        RET


结果正确,那就这样吧,该帖结束!

回复

使用道具 举报

板凳
ID:883242 发表于 2026-2-27 07:41 | 只看该作者
比较被除数的高位和除数就行了,很明显MSB是R2最高位,LSB是R5最低位。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表