?? 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 + -