📄 mcs-51
字号:
JZ A, LOOP3
LOOP5: PUSH PSW
MOV R7, #08H
MOV R0, #10H
MOV R1, #20H
CLR C
NOP
LOOP4: MOV A, @R1
ADDC A, @R0
MOV @R0, A
DA A
MOV @R0, A
IMNC R0
INC R1
DJNZ R7, LOOP4
POP PSW
DEC R4
MOV A, R4
JNZ A, LOOP5
LOOP3: DEC R3
MOV A, R3
JZ A, LOOP6
MOV R5, #04H
LOOP8: MOV R0, #10H
MOV R7, #08H
CLR C
LOOP7: MOV A, @R0
RLC A
MOV @R0, A
INC R0
DJNZ R7, LOOP7
DEC R5
MOV A, R5
JNZ A, LOOP8
MOV R0, 28H
MOV A, R6
CPL A
MOV R6, A
JNB ACC0,LOOP9
SJMP LOOP10
LOOP6: RET
;_____________________________________________________________________________
; 被乘数 乘数 积数
; 23H--20H 2DH--2AH 17H--10H
; 00 00 45 67 00 00 10 00 00 00 00 00 04 56 70 00
; 55 55 55 55 00 00 09 57 00 00 05 31 66 66 61 35
; 99 88 77 66 10 00 00 00 09 98 87 76 60 00 00 00
;_____________________________________________________________________________
;_____________________________________________________________________________
;Name: DCHU1
;Func: 单字节BCD码除法子程序
;Input: 被除数放在R1中,除数放在R0中
;OutPut:商数放在R1,商小数放在R0
;Use: 使用R2R3R4内部RAM25H单元做暂存器
;_____________________________________________________________________________
ORG 2000H
AJMP MAIN
MAIN: MOV R1, #76H
MOV R0, #25H
ACALL DCHU1
SJMP $
DCHU1: MOV A, R1
MOV 25H, #00H
CLR C
ACALL LOOP2
MOV R1, 25H
MOV 25H, #00H
MOV R2, A
CLR A
LOOP0: MOV R3, A
CLR A
ADD A, R2
JZ A, LOOP1
MOV A, #9AH
SUBB A, #01H
ADD A, R2
DA A
MOV R2, A
CPL C
MOV A, #9AH
SUBB A, R0
ADD A, R3
DA A
CPL C
ACALL LOOP4
CLR C
ACALL LOOP2
SJMP LOOP0
LOOP4: MOV R0, 25H
RET
LOOP2: MOV R4, A
MOV A, #9AH
SUBB A, R0
ADD A, R4
DA A
CPL C
JC C, LOOP3
ACALL LOOP4
SJMP LOOP2
LOOP3: ADD A, R0
DA A
RET
LOOP4: PUSH ACC
PUSH PSW
MOV A, 25H
ADD A, #01H
DA A
MOV 25H, A
POP PSW
POP ACC
RET
;_____________________________________________________________________________
; 被除数 除数 商数
; R1 R0 R1R0
; 76 25 03 04
; 99 02 49 50
;_____________________________________________________________________________
;_____________________________________________________________________________
;Name: DCHU2
;Func: 四字节BCD码除法子程序
;Input: 被除数放在内部RAM21H--24H单元,除数放在内部RAM2AH-2DH
;OutPut:商数入在内部RAM11H--18H单元
;Use: 内部RAM25H--28H 设定为工作单元
;_____________________________________________________________________________
21H DEFB 78 ;被除数最低字节
22H DEFB 56
23H DEFB 34
24H DEFB 12 ;被除数最高字节
2AH DEFB 78
2BH DEFB 56 ;除数最低字节
2CH DEFB 34
2DH DEFB 12 ;除数最高字节
ORG 2000H
AJMP MAIN
MAIN: ACALL DCHU2
SJMP $
DCHU2: MOV R0, #11H
MOV R7, #08H
LOOP1: MOV @R0, #00H
INC R0
DJNZ R7, LOOP1
MOV R0, #25H
MOV R7, #04H
LOOP2: MOV @R0, #00H
INC R0
DJNZ R7, LOOP2
MOV R3, #10H
LOOP12: MOV R4, #04H
LOOP4: MOV R0, #21H
MOV R7, #08H
CLR C
LOOP3: MOV A, @R0
RLC A
MOV @R0, A
INC R0
DJNZ R7, LOOP3
DEC R4
MOV A, R4
JNZ A, LOOP4
LOOP7: MOV R1, #25H
MOV R0, #2AH
MOV R7, #04H
CLR C
LOOP5: MOV A, #9AH
SUBB A, @R0
ADD A, @R1
DA A
MOV @R1 A
INC R0
INC R1
CPL C
DJNZ R7, LOOP5
JC C, LOOP6
MOV R0, #11H
INC @R0
SJMP LOOP7
LOOP6: MOV R1, #25H
MOV R0, #2AH
MOV R7, #04H
CLR C
LOOP3: MOV A, @R1
ADDC A, @R0
DA A
MOV @R1, A
INC R0
INC R1
DJNZ R7, LOO8
DEC R3
MOV A, R3
JZ A, LOOP9
MOV R2, #04H
LOOP11: MOV R0, #11H
MOV R7, #08H
CRL C
LOOP10: MOV A, @R0
RLC A
MOV @R0, A
INC R0
DJNZ R7, LOOP10
DEC R2
MOV A, R2
JNZ A, LOOP11
AJMP LOOP12
LOOP9: RET
;_____________________________________________________________________________
;Name: DSQR1
;Func: 单字节BCD码平方根子程序
;Input: 待开平方根数放在R1中
;OutPut: 平方根放在R7中
;Use: 使用R5,R6,R0寄存器
;_____________________________________________________________________________
ORG 2000H
AJMP MAIN
MAIN: MOV R1, #81H
ACALL DSQR1
SJMP $
DSQR1: MOV R7, #01H
MOV A, R1
LOOP0: MOV R6, A
MOV A, R7
ADD A, R7
DA A
MOV R0, A
MOV A, #9AH
SUBB A, #01H
ADD A, R0
DA A
CPL C
MOV R5, A
MOV A, #9AH
SUBB A, R5
ADD A, R6
DA A
CPL C
JZ A, LOOP1
INC R7
SJMP LOOP0
LOOP1: DEC R7
RET
;_____________________________________________________________________________
; 待开平方数 平方根
; R1 R7
; 81 09
; 99 09
; 64 08
;_____________________________________________________________________________
;_____________________________________________________________________________
;Name: DSQR2
;Func: 双字节BCD码平方根子程序
;Input: 待开平方根数放在R2R3
;OutPut:平方根放在R4中
;Use: 使用R0R1作暂存器
;_____________________________________________________________________________
ORG 2000H
AJMP MAIN
MAIN: R2, #10H
MOV R3, #00H
ACALL DSQR2
SJMP $
DSQR2: CLR A
MOV R0, A
MOV R1, A
MOV R4, #01H
LOOP3: MOV A, R4
MOV R1, A
ADD A, R1
DA A
MOV R1, A
MOV A, #9AH
SUBB A, #01H
ADD A, R1
DA A
CPL C
MOV R1, A
INC C, LOOP1
INC R0
LOOP1: CLR C
MOV A, #9AH
SUBB A, R1
ADD A, R3
DA A
CPL C
MOV R3, A
MOV A, #9AH
SUBB A, R0
ADD A, R2
DA A
CPL C
MOV R2, A
JC C, LOOP2
MOV A, R4
ADD A, #01H
DA A
MOV R4, A
SJMP LOOP3
LOOP2: CLR C
MOV A, #9AH
SUBB A, #01H
ADD A, R4
DA A
CPL C
MOV R4, A
RET
;_____________________________________________________________________________
; 待开平方数 平方根
; R2R3 R4
; 10 00 31
; 01 00 10
; 99 99 99
;_____________________________________________________________________________
;_____________________________________________________________________________
;Name: DSQR3
;Func: 三字节BCD码平方根子程序
;Input: 待开平方根数放在R1R2R3
;OutPut: 平方根放在R4R5
;Use: 使用R0R6R7作暂存器
;_____________________________________________________________________________
AJMP MAIN
MAIN: CLR A
MOV R0, A
MOV R6, A
MOV R7, A
MOV R1, #06H
MOV R2, #80H
MOV R3, #96H
ACALL DSQR3
LOOP: SJMP LOOP
DSQR3: CLR C
MOV R4, #01H
MOV R, #00H
LOOP3: MOV A, R4
ADD A, R4
DA A
MOV R6, A
MOV A, R5
ADDC A, R5
DA A
MOV R7, A
CLR C
MOV A, #9AH
SUBB A, #01H
ADD A, R6
DA A
CPL C
MOV R0, A
MOV A, #9AH
SUBB A, #00H
ADD A, R7
DA A
CPL C
MOV R7, A
INC C, LOOP1
INC R0
CLR A
ADD A, R6
DA A
MOV R6, A
LOOP1: CLR C
MOV A, #9AH
SUBB A, R6
ADD A, R3
DA A
CPL C
MOV R3, A
MOV A, #9AH
SUBB A, R7
ADD A, R2
DA A
CPL C
MOV R2, A
MOV A, #9AH
SUBB A, R0
ADD A, R1
DA A
CPL C
MOV R1, A
JC C, LOOP2
CLR C
MOV A, R4
ADD A, #01H
DA A
MOV R4, A
MOV A, R5
ADDC A, #000H
DA A
MOV R5, A
SJMP LOOP3
LOOP2: CLR C
MOV A, #9AH
SUBB A, #01H
ADD A, R4
DA A
CPL C
MOV R4, A
MOV A, #9AH
SUBB A, #00H
ADD A, R5
DA A
CPL C
MOV R5, A
RET
;_____________________________________________________________________________
; 待开平方数 平方根
; R1R2R3 R5R4
; 06 80 96 02 60
; 06 55 36 02 56
;_____________________________________________________________________________
;_____________________________________________________________________________
;Name: ASBIN1
;Func: ASCII码--->>二进制数转换子程序
;Input: 待转换的ASCII码放在R0中
;OutPut: 换后的二进制数仍放在R0中
;ALGO: 若待转换的是0--9的ASCII码,则减30H即得0--9的二进制数;若转换的ASCII码是
A--F,减37H即得二进.若转换的ASCII码不在0--9与A--F之间,则存放错误标志:FF
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -