📄 mcobcdmul.asm
字号:
;********************MCOBCDMUL********************
;本程序实现多字节压缩BCD码数乘法。
;入口参数:被乘数地址在SADR中,乘数地址在DADR中,字节数在CNT中(小于32字节),2W
; 个字节的结果地址在SADRH中。
;出口参数:结果在指定单元中,字节数在CNT中,地址在SADR中。
;占用资源:W,FSR,STATUS,020H~02B,三重堆栈。
;说 明: 1.结果与被乘数所占用的RAM单元不要重合
; 2.加载本文件的同时也加载了另外2个文件"MCOBCDADD.ASM",
; "MCOBCDSHR.ASM",故用户在使用这个子程序时可直接调用,不必重新加载。
; 3.程序并未对原数据造成影响。
IFNDEF MCOBCDMUL1
#DEFINE MCOBCDMUL1
MCOBCDMUL MOVF CNT,W
MOVWF TEMP4 ;TEMP4作为循环计数器
MOVWF RLT
MOVF SADR,W
MOVWF SOUH ;SADR将被占用,用SOUH保护
MOVF SADRH,W
ADDWF CNT,W
MOVWF FSR ;结果中间地址
LOOP38 CLRF INDF ;结果清0
INCF FSR,F
DECFSZ RLT,F
GOTO LOOP38
NEXT12 MOVF SOUH,W
MOVWF FSR
MOVF INDF,W
CALL ADDSHR ;加乘数并右移
MOVF SOUH,W
MOVWF FSR
SWAPF INDF,W
CALL ADDSHR
INCF SOUH,F
DECFSZ TEMP4,F
GOTO NEXT12
RETURN
;********************ADDSHR*****************
ADDSHR CLRF SOU
ANDLW 0FH
BTFSC STATUS,Z
GOTO NEXT13
MOVWF RLTH ;相加次数N在RLTH中
MOVF SADRH,W
ADDWF CNT,W
MOVWF SADR ;中间地址
LOOP39 CALL MCOBCDADD
BTFSC STATUS,C
INCF SOU,F ;加进位
SUBWF DADR,F ;恢复DADR
DECFSZ RLTH,F
GOTO LOOP39
NEXT13 MOVF SADRH,W
MOVWF SADR
BCF STATUS,C
RLF CNT,F ;传递参数
CALL MCOBCDSHR ;结果带SOU右移
BCF STATUS,C
RRF CNT,F
RETURN
INCLUDE MCOBCDADD.ASM
INCLUDE MCOBCDSHR.ASM
ENDIF
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -