科技人员在开发51单片机应用系统过程中,往往遇到多字节除法及倒数问题。但目前一些资料中所介绍的有关程序,复杂且功能单一、精度低。本人在研制((GZ93多功能程控测试仪》过程中,自行设计的4字节除4字节程序具有功能多、精度高、简短、运行速度快等特点,可用于求4字节倒数,求商的整数(结果为4字节),求商的小数部分(结果为4字节),调用两次即可求8字节商。 一、使用方法 1.求商的整数 (1)16进制被除数送51内部RAM中20(低位)至23(高位)单元,除数送50(低位)至53(高位)单元,扩充单元24至27清零。 ’ (2)调子程序DIV。 (3)20(低位)至23(商位)单元为所求商,24至27单元为余数。 2.求八字节商 (1)先求商的整数部分 方法同上,然后将20至23单元的整数商送其它单元保存。 (2)求商的小数部分 20至23单元清零;其余单元内容不变;调DIV子程序;小数商在23至20单元中,小数点位于23单元 前。 3.求倒数 (1)20至23单元及25至27单元清零,01H送24单元,除数送50(低位)至53(高位)单元。 (2)调子程序DIV。 (3)倒数在23至20单元,小数点位于23单元前。 二、程序清单 ORG 0500H DIV: CLR 7EH MOV R0,#50H MOV R7,#03H DV0: MOV A,@R0 INC R0 ORL A,@R0 JNZ DV1 DJNZ R7,DV0 SETB 7EH SJMP DV8 DV1: MOV R6,#20H CLRC DV2: MOV R0,#20H MOV R7,#08H DV3: MOV A,@R0 RLC A MOV @R0,A INC R0 DJNZ R7,DV3 MOV 0F0H,C CLR C MOV R0,#24H MOV R1,#50H MOV R7,#04H DV4: MOV A,@R0 SUB A,@R1 MOV @R0,A INC R0 INC Rl DJNZ R7,DV4 JNB 0F0H,DV5 CLR C SJMP DV6 DV5: JNC DV6 MOV A,24H ADD A,50H MOV 24H,A MOV A,25H ADDC A,51H MOV 25H,A MOV A,26H ADDC A,52H MOV 26H,A MOV A,27H ADDC A,53H MOV 27H,A DV6: CPL C DJNZ R6,DV2 MOV R0,#20H MOV R7,#04H DV7: MOV A,@R0 RLC A MOV @R0,A INC R0 DJNZ R7,DV7 DV8: RET END
|