📄 bcdmul.asm
字号:
TEMP_STR EQU 30H
ORG 0000
STAR: NOP
NOP
NOP
NOP
MOV TEMP_STR,#99H
MOV TEMP_STR+1,#99H
MOV TEMP_STR+2,#99H
MOV TEMP_STR+3,#99H
MOV TEMP_STR+8,#99H
MOV TEMP_STR+9,#99H
MOV TEMP_STR+10,#99H
MOV TEMP_STR+11,#99H
MOV R0,#TEMP_STR
MOV R1,#TEMP_STR+8
MOV R3,#04H
NOP
NOP
CALL BCD_MUL
NOP
NOP
JMP STAR
BCD_MUL: MOV A,R3 ;BCD乘法,结果存入(R0)--(R0)+2*(R3)-1
MOV R6,A ;R6=4
ADD A,R3 ;A=8
MOV R2,A ;R2=8=2*R3
MOV A,R3 ;A=4
ADD A,R0 ;A-->TEMP_STR+4
MOV R0,A ;R0-->TEMP_STR+4
MOV A,R1
ADD A,R3
DEC A
MOV R1,A ;R1-->TEMP_STR+11
CLR A
;Q4D88:
BCD_MUL20: MOV @R0,A ;#0-->(R0)+(R3)---(R0)+2*(R3)-1
INC R0
DJNZ R6,BCD_MUL20
MOV A,R2
MOV R6,A
DEC R0
;Q4D8F:
BCD_MUL40: CLR A
;Q4D90:
BCD_MUL60: XCH A,@R0 ;((R0)--2*(R0)-1)<<4,((R0))高4位-->A
SWAP A
XCHD A,@R0
XCH A,@R0
DEC R0
DJNZ R2,BCD_MUL60
MOV R7,A
JZ BCD_MUL140
;Q4D9A:
BCD_MUL80: MOV A,R3 ;4-->A
MOV R2,A ;R2=4
ADD A,R3 ;8-->A
ADD A,R0
MOV R0,A ;R0-->R0+2*R3(TEMP_STR+8)
CLR C
;Q4DA0:
BCD_MUL100: MOV A,@R0;((R1)--(R1)+(R3)-1)+((R0)+(R3)--(R0)+2*(R3)-1)
;-->(R0)+2*(R3)-1
ADDC A,@R1
DA A
MOV @R0,A
DEC R0
DEC R1
DJNZ R2,BCD_MUL100
MOV A,R3
MOV R2,A
;Q4DAA:
BCD_MUL120: CLR A ;((R0)--(R0)+(R3)-1)+CY-->(R0)--(R0)+(R3)-1
ADDC A,@R0
DA A
MOV @R0,A
DEC R0
DJNZ R2,BCD_MUL120
MOV A,R3
ADD A,R1
MOV R1,A
DJNZ R7,BCD_MUL80
;Q4DB6:
BCD_MUL140: MOV A,R3
ADD A,R3
MOV R2,A
ADD A,R0
MOV R0,A
DJNZ R6,BCD_MUL40
INC R0
CLR C
MOV A,R0
SUBB A,R3
SUBB A,R3
MOV R0,A
NOP
NOP
NOP
RET
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -