资源描述:
《四字节除以三字节无符号数除法程序》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、四字节除以三字节无符号数除法程序;看到网上有人求“四字节除以三字节”的子程序,随手把我以前写的程序改了改,发表在下面。;自我感觉不错,自认为是一个能够完成该功能的,_最_简_短_的程序。;程序如下,呵呵,献丑了。;=============================================================== ORG0000H LJMPSTART ORG0030H ;主程序开始START: MOVR7,#05H ;设定一个32位的被除数
2、 MOVR6,#0F5H ;05F5E0FFH MOVR5,#0E0H ;=99999999 MOVR4,#0FFH; MOVR3,#69H MOVR2,#98H ;设定一个24位的除数 MOVR1,#96H ;989680H MOVR0,#80H ;=10000000 CALLDIV_32_24 ;调用除法子程序 SJMP$ ;商,可以用计算器验证:00000009H
3、 ;余数为:98967FH=9999999;****************************************************;* 四字节/三字节无符号数除法程序 *;* 已经测试通过 *;****************************************************; R7R6R5R4/R2R1R0-->R7R6R5R
4、4...32H31H30H;;被除数R7R6R5R4,除数R2R1R0; 商R7R6R5R4,余数32H31H30H;因为数字较大,本程序使用了:A、B、33H和32H31H30H;对这些单元的保护工作,应该在主程序中进行;-----------------------------------------------------------DIV_32_24: CLRA MOV30H,A MOV31H,A MOV32H,A MOVR3,#32
5、 ;循环计数;--------------------------------------------------- CLRCDIV_LOOP: CALLSL_R7_R4 CALLSL_32_30 ;(32H31H30H<--R7R6R5R4<--C)左移一位 MOVF0,C;--------------------- CLRC ;IF(32H31H30H>=R2R1R0)32H31H30H-=R2R1R0;
6、 MOVA,30H SUBBA,R0 MOV33H,A MOVA,31H SUBBA,R1 MOVB,A MOVA,32H SUBBA,R2 JNCDIV_2 JNBF0,CPL_C ;不够减就不保存差 CPLCDIV_2: MOV30H,33H MOV31H,B MOV32H,ACPL_C: CPLC DJNZR3,DIV_L
7、OOP;---------------------------------------------------SL_R7_R4: MOVA,R4 RLCA MOVR4,A MOVA,R5 RLCA MOVR5,A MOVA,R6 RLCA MOVR6,A MOVA,R7 RLCA MOVR7,A RET;---------------------SL_32_30
8、: MOVA,30H RLCA MOV30H,A MOVA,31H RLCA MOV31H,A MOVA,32H RLCA MOV32H,A RET;---------------------------------------------