?? 除法32.asm
字號:
;**********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 + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -