📄 mcs-51
字号:
INC R0
DJNZ R7, LOOP
CLR C
MOV R0, #25H; 被除数减除数(此被除数是扩充位)
MOV R1, #DATB1
MOV R7, #05H
LOOP5: MOV A, @R0
SUBB A, @R1
MOV @R0, A
INC R0
INC R1
DJNZ R7, LOOP5
JNC C, LOOP6
MOV 66H, C ;暂存进位位
MOV R0, #25H ;不够减恢复余数
MOV R1, #DATB1
MOV R7, #05H
CLR C
LOOP7: MOV A, @R0
ADDC A, @R1
MOV @R0, A
INC R0
INC R1
DJNZ R7, LOOP7
MOV C, 60H
LOOP6: CPL C
DJNZ R6, LOOP8
MOV R1, #20H
MOV R1, #25H
MOV 7, #05H
LOOP9: MOV A, @R0
RLC A
MOV R3, A
MOV A, @R1
MOV @R0, A
MOV A, R3
MOV @R1, A
INC R0
INC R1
DJNZ R7, LOOP9
LOOP2: RET
;_____________________________________________________________________________
;Name: CHU4
;Func: 双字节除单字节除法子程序
;Input: 被除数放在R0,R1 R0放被除数低字节,除数放在R4,R7为字节长度
;OutPut: 商数庆在R0中,余数放在R1中
;Use:
;_____________________________________________________________________________
DATA1 EQU 6DH 被除数低字节
DATA2 EQU 32H 被除数高字节
DATB EQU 47H 除数
ORG 2000H
AJMP MAIN
MAIN: MOV R0, #DATA1
MOV R1, #DATA2
MOV R4, #DATB
MOV R7, #08H
ACALL CHU4
LOOP: SJMP LOOP
CHU4: MOV A, R0
ADD A, R0
MOV R0, A
ADDC A, R1
MOV R1, A
SUBB A, R4
JC C, LOOP1
MOV R1, A
INC R0
LOOP1: DJNZ R7, CHU4
RET
END
;__________________________________________________________________________
; 被除数 除数 商数 余数
; R1R0 R4 R0 R1
; 326D 47 B5 3A
; 00FF 10 0F 0F
; 7FFF FG 80 7F
; 0040 F8 00 40
; FFC0 08 FF D2
;__________________________________________________________________________
;_____________________________________________________________________________
;Name: CHU5
;Func: 双字节除单字节商为双字节除法子程序
;Input: 被除数放在R0,R1中,除数放在R3中,R2为被除数扩充位
;OutPut: 商数放在R4,R5中,R4放低位,余数放在R2中
;_____________________________________________________________________________
DATA1 EQU 01H 被除数低字节
DATA2 EQU 10H 被除数高字节
DATB EQU 10H 除数
ORG 2000H
AJMP MAIN
MAIN: MOV R0, #DATA1
MOV R1, #DATA2
MOV R2, #00H
MOV R3, #DATB
MOV R4, #00H
MOV R5, #00H
MOV R7, 10H
ACALL CHU5
LOOP: SJMP LOOP
CHU5: MOV A, R0
ADD A, R0
MOV R0, A
MOV A, R1
ADDC A, R1
MOV R1, A
MOV A, R2
ADDC A, R2
MOV R2, A
MOV A, R4 ;商数左移
ADD A, R4
MOV R4, A
MOV A, R5
ADDC A, R5
MOV R5, A
CJNE R2, #DATB, LOOP0
LOOP0: JC C, LOOP1
MOV A, R2; 建立新的余数
SUBB A, R3
MOV R2, A
MOV A, R4
ADD A, #01H
MOV R4, A
MOV A, R5
ADDC A, #00H
MOV R5, ,A
LOOP1: DJNZ R7, CHU5
RET
;_____________________________________________________________________________
; 被乘数 乘数 商数 余数
; R1R0 R2 R5R4 R2
; 1001 10 0100 01
; 17FF 10 007F 0F
;_____________________________________________________________________________
;_____________________________________________________________________________
;Name: CHU6
;Func: 三字节除单字节商为三字节除法了程序
;Input: 被除数放在R0R1R2中, 除数放在R4中,R3存放被除数扩充位,也是余数存放数
;OutPut:商数放在内部RAM20H-22H单元中,其中20H单元放最低位
;Use:
;_____________________________________________________________________________
DATA1 EQU 08H ; 被除数最低位
DATA2 EQU 00H ; 被除数最高位
DATA3 EQU D0H
DATB EQU 20H ; 除数
ORG 2000H
AJMP LOOP0
LOOP0 MOV R0, #DATA1
MOV R1, #DATA2
MOV R2, #DATA3
MOV R3, #DATAB
MOV R4, #DATA1
MOV R3, #00H
MOV 20H, #00H
MOV 21H, #00H
MOV 22H, #00H
MOV R7, #18H
ACALL CHU6
LOOP2: SJMP LOOP2
CHU6: MOV A, R0
ADD A, R0 ; 被除数左移,包括扩充位
MOV R0, A
MOV A, R1
ADDC A, R1
MOV R1, A
MOV A, R2
ADDC A, R2
MOV R2, A
MOV A, R3
ADDC A, R3
MOV R3, A
MOV A, 20H; 商数左移
RLC A
MOV 20H, A
MOV A, 21H
RLC A
MOV 21H, A
MOV A, 22H
RLC A
MOV 22H, A
MOV A, R3
SUBB A, R4
JC C, LOOP1
MOV R3, A
JNC 20H
AJMP LOOP2
LOOP1: ADD A, R4
LOOP2: DJNZ R7, CHU6
RET
;_____________________________________________________________________________
;Name: CHU7
;FUNC: 三字节除双字节商为三字节除法子程序
:INPUT: 被除数放在内部RAM20H--22H单元中,除数放在R4,R5中
;OUTPUT:商数放在内部RAM26H--28H单元中,余数放在23H,24H单元中.
;_____________________________________________________________________________
20H EQU 00H ;被除数最低字节
21H EQU 00H ;被除数低字节
22H EQU F0H ;被除数最高字节
DATB1 EQU 1DH ;除数低字节
DATB2 EQU 23H ;除数高字节
ORG 2000H
AJMP LOOP0
LOOP0: MOV R4, #DATB1
MOV R5, #DATB1
MOV R7, #18H
MOV 20H, #00H
MOV 21H, #60H
MOV 22H, #0F0H
MOV 23H, #00H
MOV 24H, #00H
ACALL CHU7
LOOP: SJMP LOOP
CHU7: CLR C
MOV A, 20H ;被除和扩充位左移
RLC A
MOV 20H, A
MOV A, 21H
RLC A
MOV 21H, A
MOV A, 22H
RLC A
MOV 22H, A
MOV A, 23H
RLC A
MOV 23H, A
MOV A, 24H
RLC A
MOV 24H, A
MOV A, 26H ;商数左移
RLC A
MOV 26H, A
MOV A, 27H
RLC A
MOV 27H, A
MOV A, 28H
RLC A
MOV 28H, A
CLR C
MOV A, 23H ;判断
SUBB A, R4
MOV R1, A
MOV A, 24H
SUBB A, R5
MOV R2, A
JC C, LOOP1
INC 26H
MOV A, R1 ;建立余数
MOV 23H, A
MOV A, R2
MOV 24H, A
LOOP1: DJNZ R7, CHU7
RET
;_____________________________________________________________________________
;Name: CHU8
;Func: 四字节除双字节商为二字节除法子程序
;Input: 被除数放在R3R2R1R0,除数放在R5R4,R7为被除数扩充位
;OutPut:商数放在R1R0中,余数放在R3R2
;_____________________________________________________________________________
DATA1 EQU 00H ;被除数最低字节
DATA2 EQU 00H ;被除数低字节
DATA3 EQU 00H ;被除数低字节
DATA4 EQU 0FFH ;被除数最高字节
DATB1 EQU 00H ;除数低字节
DATB2 EQU 0FFH ;除数高字节
ORG 2000H
AJMP MAIN
MAIN: MOV R0, #DATA1
MOV R1, #DATA2
MOV R2, #DATA3
MOV R3, #DATA4
MOV R4, #DATB1
MOV R5, #DATB2
ACALL CHV8
SJMP $
CHV8: MOV R7, #10H
LOOP3: CLR C
MOV A, R0 ;被除数左移
ADD A, R0
MOV R0, A
MOV A, R1
ADDC A, R1
MOV R1, A
MOV A, R2
ADDC A, R2
MOV R2, A
MOV A, R3
ADDC A, R3
MOV R3, A
JC LOOP1
MOV A, R2 ;高位被除数减除数
SUBB A, R4
MOV R2, A
MOV A, R3
SUBB A, R5
MOV R3, A
JNC C, LOOP2
MOV A, R2 ;恢复被除数
ADD A, R4
MOV R2, A
MOV A, R3
ADDC A, R5
MOV R3, A
DJNZ R7, LOOP3
RET
LOOP1: CLR C
MOV A, R2
SUBB A, R4
MOV R2, A
MOV A, R3
SUBB A, R5
MOV R3, A
LOOP2: INC R0
DJNZ R7, LOOP3
RET
;_____________________________________________________________________________
;Name: CHU9
;Func: 三字节或二字节的倒数结果为三字节除法子程序
;Input: 待求倒数的数,即除数放在内部RAM26H-28H单元,被除数均为1放在20H单元.
;OutPut:结果即商的小数清确小数点后三字节,放在23H--25H单元
;Use: 使用21H--24H,60H--62H单元为工作寄存器
;_____________________________________________________________________________
ORG 2000H
AJMP MAIN
MAIN: MOV 20H, #01H
MOV 21H, #00H
MOV 22H, #00H
MOV 23H, #00H
MOV 24H, #00H
MOV 25H, #00H
MOV 26H, #00H
MOV 27H, #00H
MOV 28H, #00H
MOV 60H, #00H
MOV 61H, #00H
MOV 62H, #00H
MOV R7, #18H
ACALL CHU9
LOOP: SJMP LOOP
CHU9: CLR C
LOOP4: MOV A, 20H ;被除数及扩充位左移
RLC A
MOV 20H, A
MOV A, 21H
RLC A
MOV 21H, A
MOV A, 22H
RLC A
MOV 22H, A
MOV A, 23H
RLC A
MOV 23H, A
MOV A, 24H
RLC A
MOV 24H, A
MOV A, 25H
RLC A
MOV 25H, A
JNC LOOP1 ;判断扩充
MOV A, 23H
SUBB A, 26H ;位减
MOV 23H, A ;除数
MOV A, 24H
SUBB A, 27H
MOV 24H, A
MOV A, 25H
SUBB A, 28H
MOV 25H, A
MOV A, 23H ;商加1
ADD A, #01H
MOV 23H, A
MOV A, 24H
ADDC A, #00H
MOV 24H, A
MOV A, 25H
ADDC A, #00H
MOV 25H, A
SETB C
SJMP LOOP2
LOOP1: MOV A, 23H ;扩充位减除数
SUBB A, 26H
MOV 23H, A
MOV A, 24H
SUBB A, 27H
MOV 24H, A
MOV A, 25H
SUBB A, 28H
MOV 25H, A
JNC LOOP3
MOV A, 23H ;恢复除数
MOV 23H, A
MOV A, 24H
ADDC A, 27H
MOV 24H, A
MOV A, 25H
ADDC A, 28H
MOV 25H, A
LOOP3: CPL C
LOOP2: DJNZ R7, LOOP4;
MOV A, 20H
XCH A, 23H
MOV 20H, A
MOV A, 21H
SXCH A, 24H
MOV 21H, A
MOV A, 22H
XCH A, 25H
MOV 22H, A
MOV A, 23H
ADDC A, 23H
MOV 23H, A
MOV A, 24H
ADDC A, 24H
MOV 24H, A
MOV A, 25H
ADDC A, 25
MOV 25H, A
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -