📄 mcs-51
字号:
MOV 60H, 23H
MOV 61H, 24H
MOV 62H, 25H
MOV A, 20H
XCH A, 23H
MOV 20H, A
MOV A, 21H
XCH A, 24H
MOV 21H, A
MOV A, 22H
XCH A, 25H
MOV 22H, A
CLR A
CLR C
MOV 20H, #00H
MOV 21H, #00H
MOV 22H, #00H
MOV R7, #18H
LOOP8: 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 LOOP5
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
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 LOOP6
LOP5: 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 LOOP7
MOV A, 23H
ADD A, 26H
MOV 23H, A
MOV A, 24H
ADDC A, 27H
MOV 24H, A
MOV A, 25H
ADDC A, 28H
MOV 25H, A
LOOP7: CPL C
LOOP6: DJNZ R7, LOOP8
MOV A, 20H
XCH A, 23H
MOV 20H, A
MOV A, 21H
XCH A, 24H
XCH 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, 25H
MOV 25H, A
MOV 20H, 60H
MOV 21H, 61H
MOV 22H, 62H
RET
;_____________________________________________________________________________
;Name: CHU10
;Func: 带符号双字节除单字节除法子程序
;Input: 被除数放在R1R0中,除数放在R4中.移位计数器放在R7中
;OutPut:商数放在R0,余数放在R1中
;Use: 使用内部RAM60H--62H单元存放被除数,除数和商的符号位
;_____________________________________________________________________________
DATA1 EQU 40H ; 被除数低字节
DATA2 EQU 00H ; 被除数高字节
DATB EQU 0F8H ; 除数
ORG 2000H
AJMP MAIN
MAIN: MOV R0, #DATA1
MOV R1, #DATA2
MOV R4, #DATB
MOV R7, #08H
ACALL CHU10
LOOP: SJMP LOOP
CHU10: MOV A, R4
JZ A, LOOP1
MOV A, R1
RLC A
MOV 60H, C
MOV A, R4
RLC A
MOV 61H, C
ANL C, 60H
JC C, LOOP2
MOV C, 60H
ORL C, 61H
SJMP LOOP3
LOOP2: CPL C
LOOP3: MOV 62H, C
MOV A, R4
JB ACC.7, LOOP4
LOOP9: MOV A, R1
JB ACC.7 LOOP5
LOOP7: ACALL CHU4
JB 62H, LOOP6
LOOP8: CLR A
RET
LOOP4: MOV A, R4
CPL A
ADD A, #01H
MOV R4, A
SJMP LOOP9
LOOP5: MOV A, R0
CPL A
ADD A, #01H
MOV R0, A
MOV A, R1
CPL A
ADDC A, #00H
MOV R1, A
SJMP LOOP7
LOOP6: MOV A, R0
CPL A
ADD A, #01H
MOV R0, A
SJMP LOOP8
LOOP1: MOV A, #0FFH
RET
;_____________________________________________________________________________
;Name: SQRT
;Func: 双字节平方根子程序
;Input: 待开平方根放在R1R0中
;OutPut:平方根放在R3R2中
;Use:
;_____________________________________________________________________________
ORG 2000H
AJMP LOOP0
LOOP0: SJMP LOOP
SQRT: CLR A
MOV R2, A
MOV R3, A
SETB C
LOOP: MOV A, R0
SUBB A, R2
MOV R0, A
MOV A, R1
SUBB A, R3
MOV R1, A
JC C, LOOP2
MOV A, R0
SWUBB A, R2
MOV R0, A
MOV A, R1
SUBB A, R3
MOV R1, A
JC C, LOOP2
MOV A, R2
ADD A, #01H
MOV R2, A
MOV A, R3
ADDC A, #00H
MOV R3, A
SJMP LOOP1
LOOP2: RET
;___________________________________________________________________________
;Name: BCDAD1
;Func: 单字节BCD码加法子程序
;Input: R0指向两个加数的首地址
;OutPut: 和数为双字节,放在加数后的地址单元中
;Use:
;_____________________________________________________________________________
20H EQU 99H
21H EQU 99H
22H DEFB 02H
ORG 2000H
AJMP MAIN
MAIN: MOV R0, #20H
ACALL BCDAD1
LOOP: SJMP LOOP
BCDAD1: CLR C
MOV A, @R0
INC R0
ADD A, @R0
DA A
INC R0
MOV @R0, A
RLC A
ANL A, #01H
INC R0
MOV @R0, A
RET
;___________________________________________________________________________
;Name: BCDAD2
;Func: 四字节BCD码加法子程序
;Input: 被加数首地址由R0指向内部RAM20H单元,加法首地址由R1指向内部RAM24H单元
;OutPut: 和数放在内20H---24H单元中
;Use:
;_____________________________________________________________________________
20H DEFB 99H ;被加数低字节
21H DEFB 99H
22H DEFB 99H
23H DEFB 99H ;被加数高字节
24H DEFB 99H ;加数低字节
25H DEFB 99H
26H DEFB 99H
27H DEFB 99H ;加数高字节
ORG 2000H
AJMP MAIN
MAIN: MOV R0, #20H
MOV R1, #24H
MOV R7, #04H
CALL BCDAD2
LOOP: SJMP LOOP
BCDAD2: CLR C
LOOP1: MOV A, @R0
ADDC A, @R1
DA
MOV @R0, A
INC R0
INC R1
DJNZ R7, LOOP1
RLC A
ANL A, #01H
MOV @R0, A
RET
;___________________________________________________________________________
;Name: BCDSUB3
;Func: 单字节BCD码减法子程序
;Input: 被减数和减数分别放在内部RAM21H和11H单元中
;OutPut: 差数放在内部RAM12H单元中
;Use:
;_____________________________________________________________________________
21H DEFB 60 ;被减数
11H DEFB 62 ;减数
ORG 2000H
AJMP MAIN
MAIN: MOV R1, #21H
MOV R0, #11H
ACALL DSUB1
LOOP: SJMP LOOP
DSUB: CLR C
MOV A, #9AH
SUBB A, @R0
ADD A, @R1
DA
MOV 12H, A
RET
;_____________________________________________________________________________
; 被减数 减数 差数
; 99 99 00
; 78 67 1
; 60 62 补码98
;_____________________________________________________________________________
;___________________________________________________________________________
;Name: DSUB2
;Func: 四字节BCD码减法子程序
;Input: 被减数首地址R1指向内部RAM21H单元
;OutPut: 差数放在被减数单元
;Use:
;_____________________________________________________________________________
21H DEFB 66 ;被减数最低字节
22H DEFB 77
23H DEFB 88
24H DEFB 99 ;被减数最高字节
11H DEFB 55 ;减数最低字节
12H DEFB 22
13H DEFB 33
14H DEFB 44 ;减数最高字节
ORG 2000H
AJMP MAIN
MAIN: MOV R1, #21H
MOV R0, #11H
MOV R7, #04H
ACALL DSUB2
LOOP: SJMP LOOP
DSUB2: CLR C
LOOP1: MOV A, 9AH
SUBB A, @R0
ADD A, @R1
DA A
MOV @R1, A
INC R0
INC R1
DJNZ R7, LOOP1
RET
;_____________________________________________________________________________
;Name: BCDSUB4
;Func: 单字节BCD码乘法子程序
;Input: 被乘数和乘数分别放在内部RAM20H和21H单元
;OutPut: 积为双字节放在20H和21H单元
;Use:
;_____________________________________________________________________________
20H DEFB 33 ;被乘数
21H DEFB 11 ;乘数
ORG 2000H
AJMP MAIN
MAIN: ACALL DCHFA1
LOOP: SJMP LOOP
DCHFAF1: MOV R0, #20H
MOV A, @R0
MOV R1, A
MOV R7, #02H
CLR A
MOV @R0, A
LOOP0: MOV R0, #20H
XCHD A, @R0
MOV R4, A
MOV A, @R0
RR A
RR A
RR A
RR A
MOV @R0, A
INC R0
MOV A, R4
XCHD A, @R0
MOV R2, A
MOV A, @R0
RR A
RR A
RR A
RR A
MOV @R0, A
MOV A, R2
JZ A, LOOP3
DEC R0
MOV A, @R0
MOV R3, #00H
LOOP1: CLR C
ADD A, R1
DA A
JNC LOOP2
INC R3
LOOP2: JNZ R2, LOOP1
MOV @R0, A
MOV A, R3
LOOP3: JNZ R7, LOOP0
RET
;_____________________________________________________________________________
; 被乘数 乘数 积数
; R0 R1 R0R1
10 10 0100
; 33 11 0363
;_____________________________________________________________________________
;_____________________________________________________________________________
;Name: DCHFA
;Func: 十进制数8位乘8位(四字节BCD码乘四字节BCD码)乘法子程序
;Input: 被乘数放在内部RAM20H--23H单元中,乘数放在2A--2DH单元中
;OutPut:乘积放在内部RAM10H--17H单元中
;Use: 使用内部24H-27H为被乘数运算单元
;_____________________________________________________________________________
20H EQU 55 ;被乘数低字节
21H EQU 55
22H EQU 55
23H EQU 55 ;被乘数高字节
2AH EQU 57 ;乘数低字节
2BH EQU 09
2CH EQU 00
2DH EQU 00 ;乘数高字节
ORG 2000H
AJMP MAIN
MAIN: ACALL DCHFA4
LOOP: SJMP LOOP
ORG 2200H
DCHFA4: MOV R6, #01H
MOV R0 #10H
MOV R7, #08H
LOOP1: MOV @R0, #00H
INC R0
DJNZ R7, LOOP2
MOV R0, #2EH
MOV R3, #08H
LOOP10: DC R0
LOOP9: MOV 28H, R0
CLR A
MOV A, @R0
SWAP A
MOV @R0, A
CLR A
XCHD A, @R0
MOV R4, A
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -