📄 dcobcdmul.asm
字号:
;********************DCOBCDMUL********************
;本程序实现双字节压缩BCD码乘法。
;入口参数:被乘数在SOUH:SOU中,乘数在RLTH:RLT中。
;出口参数:结果在RLTH:RLT:SOUH:SOU中。
;占用资源:W,STATUS,FSR,020H,023H~02BH,三重堆栈。
;说 明: 1.加载本文件的同时也加载了另外2个文件"DCOBCDTB.ASM","DUMUL.ASM",
; 故用户在使用这2个子程序时可直接调用,不必重新加载.
IFNDEF DCOBCDMUL1
#DEFINE DCOBCDMUL1
DCOBCDMUL
BANKSEL SOU
CALL DCOBCDTB ;被乘数转化为二进制数
MOVF RLT,W
MOVWF TEMP3
MOVF RLTH,W
MOVWF TEMP4 ;暂存乘数
MOVF SOU,W
MOVWF RLT
MOVF SOUH,W
MOVWF RLTH ;保存转化后的被乘数
MOVF TEMP3,W
MOVWF SOU
MOVF TEMP4,W
MOVWF SOUH ;待转化的乘数
CALL DCOBCDTB ;乘数转化为二进制
CALL DUMUL ;二进制乘法
;二进制结果转化为BCD码
CLRF TEMP1
CLRF TEMP2
CLRF TEMP3
CLRF TEMP4
BCF STATUS,C
MOVLW .32
MOVWF CNT
LOOPC2 RLF SOU,F
RLF SOUH,F
RLF RLT,F
RLF RLTH,F
RLF TEMP1,F
RLF TEMP2,F
RLF TEMP3,F
RLF TEMP4,F
DECFSZ CNT,F
GOTO ADJDEC3
MOVF TEMP1,W
MOVWF SOU
MOVF TEMP2,W
MOVWF SOUH
MOVF TEMP3,W
MOVWF RLT
MOVF TEMP4,W
MOVWF RLTH ;结果传递
RETLW 0 ;整个子程序结束
ADJDEC3 MOVLW TEMP1
MOVWF FSR
CALL ADJBCD3 ;调整TEMP1
MOVLW TEMP2
MOVWF FSR
CALL ADJBCD3 ;调整TEMP2
MOVLW TEMP3
MOVWF FSR
CALL ADJBCD3 ;调整TEMP3
MOVLW TEMP4
MOVWF FSR
CALL ADJBCD3 ;调整TEMP4
GOTO LOOPC2
;********************调整BCD********************
ADJBCD3 MOVLW 03H
ADDWF INDF,W ;低四位加3
MOVWF SADR ;暂存
BTFSC SADR,3 ;结果大于7,
MOVWF INDF ;则存起来
MOVLW 30H
ADDWF INDF,W ;高四位加3
MOVWF SADR
BTFSC SADR,7 ;结果大于7,
MOVWF INDF ;则存起来
RETLW 0
INCLUDE "DCOBCDTB.ASM"
INCLUDE "DUMUL.ASM"
ENDIF
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -