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