除法32.asm
来自「基于51单片机的32位除法程序」· 汇编 代码 · 共 195 行
ASM
195 行
;**********32位/32位无符号除法子程序*********************
; 入口:BDIV-BDIV+3 (4AH 4BH 4CH 4DH) 被除数(高位在前)
; PDIV-PDIV+3 (32H 33H 34H 35H) 除数(低位在前)
; BDIVBYT (被除数字节数)
; R3:计数器 (32;被除数位数)
; 出口:BDIV-BDIV+3 (4AH 4BH 4CH 4DH) 商(高位在前)
; DIV_C-DIV_C+3 (3AH 3BH 3CH 3DH):部分余数
; 用到寄存器 PBDIV-PBDIV+2(37H 38H 39H) (暂存差数)
DIV32:
CLR A
MOV R0,#DIV_C
MOV R7,#BDIVBYT
CLRDIV_C:
MOV @R0,A
INC R0
DJNZ R7,CLRDIV_C
; mov DIV_C,a
; mov DIV_C+1,a
; mov DIV_C+2,a
; mov DIV_C+3,a
mov r3,#BDIVBYT
DIV1:
;ACALL RLC8
;mov r1,#PDIV
ACALL RLC64
MOV R1,#PDIV
MOV R0,#DIV_C
MOV R4,#PDIV
MOV R7,#bdivbyt
MOV R6,#PBDIV
DIV2:
MOV A,R4
MOV R1,A ;还原 PDIV (除数地址) R4
MOV A,@R0
SUBB A,@R1 ; DIV_C-PDIV
MOV R5,A ;暂存
MOV A,R1 ;暂存 PDIV
MOV R4,A
MOV A,R6 ;还原 PBDIV (暂存差地址) R1
MOV R1,A
MOV A,R5
MOV @R1,A
INC R0 ; 余数 DIV_C
INC R6 ; 暂存差 PBDIV 暂存差
INC R4 ; 除数 PDIV
DJNZ R7,DIV2
JC NEXT1
; mov a,DIV_C+3
; subb a,@r1
; mov PBDIV+2,a
; inc r1
;
; mov a,DIV_C+2
; subb a,@r1
; mov PBDIV+1,a
; inc r1
;
; mov a,DIV_C+1
; subb a,@r1
; mov PBDIV,a
; inc r1
;
; mov a,DIV_C
; subb a,@r1
;;
; JC NEXT1
; INC BDIV+3
; mov DIV_C,A
; mov DIV_C+1,PBDIV
; mov DIV_C+2,PBDIV+1
; mov DIV_C+3,PBDIV+2
INC BDIV ;*******
mov DIV_C,A
mov r1,#div_c+1
MOV R0,#PBDIV
mov r7,#bdivbyt
rdiv_c:
MOV A,@R0
MOV @R1,A
INC R0
INC R1
djnz r7,Rdiv_c
NEXT1:
DJNZ r3,DIV1
mov a,DIV_C ;取部分余数, 作四舍五入处理
rlc a
jC round1
mov a,DIV_C+2
rlC a
mOV DIV_C+2,a
mOV a,DIV_C+1
rlC a
mOV DIV_C+1,a
mOV a,DIV_C+1
rlC a
moV DIV_C+1,a
mOV a,DIV_C
rlC a
moV DIV_C,a
SUbb a,PDIV
jC donZ1
jnZ roUnd1
mOV a,DIV_C+1
SUbb a,PDIV+1
jC dOnZ1
jnz roUnd1
mOV a,DIV_C+2
SUbb a,PDIV+2
jC donZ1
jnZ roUnd1
moV a,DIV_C+3
Subb a,PDIV+3
jC donz1
rOUnd1:
lCall add41
dOnZ1:
Clr a
RET
RLC8:
CLR C
mOV a,BDIV+3
rlC a
moV BDIV+3,a
moV a,BDIV+2
rlc a
moV BDIV+2,a
moV a,BDIV+1
rlC a
mOV BDIV+1,a
moV a,BDIV
rlc a
mov BDIV,a
mov a,DIV_C+3
rlc a
mov DIV_C+3,a
mov a,DIV_C+2
rlc a
mov DIV_C+2,a
mov a,DIV_C+1
rlc a
mov DIV_C+1,a
mov a,DIV_C
rlc a
mov DIV_C,a
RET
;***************************
add41:
mov a,BDIV+3
add a,#01h
mov BDIV+3,a
mov a,BDIV+2
addc a,#00h
mov BDIV+2,a
mov a,BDIV+1
addc a,#00h
mov BDIV+1,a
mov a,BDIV
addc a,#00h
mov BDIV,a
ret
;************************************
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?