四字节除以三字节无符号数除法程序

发布者:mancozc最新更新时间:2018-05-08 来源: eefocus关键字:四字节  三字节  无符号数  除法程序 手机看文章 扫描二维码
随时随地手机看文章

;看到网上有人求“四字节除以三字节”的子程序,随手把我以前写的程序改了改,发表在下面。
;自我感觉不错,自认为是一个能够完成该功能的,_最_简_短_的程序。
;程序如下,呵呵,献丑了。
;===============================================================
    ORG  0000H
    LJMP START

    ORG  0030H       ;主程序开始
START:
    MOV  R7, #05H    ;设定一个32位的被除数
    MOV  R6, #0F5H   ;05 F5 E0 FFH
    MOV  R5, #0E0H   ;=99 999 999
    MOV  R4, #0FFH
;    MOV  R3, #69H
    MOV  R2, #98H    ;设定一个24位的除数
    MOV  R1, #96H    ;98 96 80H
    MOV  R0, #80H    ;=10 000 000


    CALL DIV_32_24   ;调用除法子程序

    SJMP $           ;商,可以用计算器验证:00 00 00 09H
                     ;余数为:98 96 7FH = 9 999 999
;****************************************************
;*      四字节/三字节无符号数除法程序               *
;*      已经测试通过                                *
;****************************************************
;   R7R6R5R4 / R2R1R0 --> R7R6R5R4...32H31H30H
;
;被除数 R7R6R5R4, 除数 R2R1R0
;    商 R7R6R5R4, 余数 32H31H30H
;因为数字较大, 本程序使用了:A、B、33H 和 32H 31H 30H
;对这些单元的保护工作, 应该在主程序中进行
;-----------------------------------------------------------
DIV_32_24:
    CLR  A
    MOV  30H, A
    MOV  31H, A
    MOV  32H, A
    MOV  R3, #32    ;循环次数
;---------------------------------------------------
    CLR C
DIV_LOOP:
    CALL SL_R7_R4
    CALL SL_32_30
        ;(32H31H30H <-- R7R6R5R4 <-- C) 左移一位
    MOV  F0, C
;---------------------
    CLR  C    ;IF (32H31H30H >= R2R1R0) 32H31H30H -= R2R1R0;
    MOV  A, 30H
    SUBB A, R0
    MOV  33H, A
    MOV  A, 31H
    SUBB A, R1
    MOV  B, A
    MOV  A, 32H
    SUBB A, R2
    JNC  DIV_2
    JNB  F0, CPL_C      ;不够减就不保存差
    CPL  C
DIV_2:
    MOV  30H, 33H
    MOV  31H, B
    MOV  32H, A
CPL_C:
    CPL  C
    DJNZ R3, DIV_LOOP
;---------------------------------------------------
SL_R7_R4:
    MOV  A, R4
    RLC  A
    MOV  R4, A
    MOV  A, R5
    RLC  A
    MOV  R5, A
    MOV  A, R6
    RLC  A
    MOV  R6, A
    MOV  A, R7
    RLC  A
    MOV  R7, A
    RET
;---------------------
SL_32_30:
    MOV  A, 30H
    RLC  A
    MOV  30H, A
    MOV  A, 31H
    RLC  A
    MOV  31H, A
    MOV  A, 32H
    RLC  A
    MOV  32H, A
    RET
;---------------------------------------------------
    END
;===============================================================


关键字:四字节  三字节  无符号数  除法程序 引用地址:四字节除以三字节无符号数除法程序

上一篇:查表指令中计算偏移量的简便方法
下一篇:MCS-51系列单片机指令如何判断字节数

热门资源推荐
热门放大器推荐
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
  • 学习ARM开发(16)
    ARM有很多东西要学习,那么中断,就肯定是需要学习的东西。自从CPU引入中断以来,才真正地进入多任务系统工作,并且大大提高了工作效率。采 ...
  • 学习ARM开发(17)
    因为嵌入式系统里全部要使用中断的,那么我的S3C44B0怎么样中断流程呢?那我就需要了解整个流程了。要深入了解,最好的方法,就是去写程序 ...
  • 学习ARM开发(18)
    上一次已经了解ARM的中断处理过程,并且可以设置中断函数,那么它这样就可以工作了吗?答案是否定的。因为S3C44B0还有好几个寄存器是控制中 ...
  • 嵌入式系统调试仿真工具
    嵌入式硬件系统设计出来后就要进行调试,不管是硬件调试还是软件调试或者程序固化,都需要用到调试仿真工具。 随着处理器新品种、新 ...
  • 最近困扰在心中的一个小疑问终于解惑了~~
    最近在驱动方面一直在概念上不能很好的理解 有时候结合别人写的一点usb的例子能有点感觉,但是因为arm体系里面没有像单片机那样直接讲解引脚 ...
  • 学习ARM开发(1)
  • 学习ARM开发(2)
  • 学习ARM开发(4)
  • 学习ARM开发(6)
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved