📄 dsmul.asm
字号:
;********************DSMUL********************
;本程序实现双字节有符号数乘法。
;入口参数:被乘数在SOUH:SOU中,乘数在RLTH:RLT中。
;出口参数:结果在RLTH:RLT:SOUH:SOU中。
;占用资源:W,STATUS,020H,023H~02BH,两重堆栈。
;说明: 加载本文件的同时也加载了另外三个文件"DUADD.ASM","DSNEG.ASM",
; "MSNEG.ASM",故用户在使用这个子程序时可直接调用,不必重新加载.
IFNDEF DSMUL1
#DEFINE DSMUL1
DSMUL MOVLW .16
MOVWF CNT
MOVF SOUH,W
XORWF RLTH,W
MOVWF SADR ;暂存结果符号
BTFSC SOUH,7
CALL DSNEG ;被乘数取绝对值
MOVF SOU,W
MOVWF TEMP3
MOVF SOUH,W
MOVWF TEMP4
CLRF SOU ;用于暂
CLRF SOUH ;存
CLRF TEMP1 ;结
CLRF TEMP2 ;果
BTFSS RLTH,7
GOTO LOOP5
COMF RLT,F
COMF RLTH,F
INCF RLT,F
BTFSC STATUS,Z
INCF RLTH,F ;乘数取绝对值
LOOP5 RRF TEMP4,F
RRF TEMP3,F ;将乘数的某一位送到C中
BTFSC STATUS,C
CALL DUADD ;将SOUH:SOU中的被乘数加上
RRF SOUH,F
RRF SOU,F
RRF TEMP2,F
RRF TEMP1,F ;被乘数右移
DECFSZ CNT,F
GOTO LOOP5
MOVF SOUH,W
MOVWF RLTH
MOVF SOU,W
MOVWF RLT
MOVF TEMP2,W ;保存结果
MOVWF SOUH
MOVF TEMP1,W
MOVWF SOU
BTFSS SADR,7
RETURN
MOVLW SOU
MOVWF SADR
MOVLW 4
MOVWF CNT
CALL MSNEG
RETURN
INCLUDE "DUADD.ASM"
INCLUDE "DSNEG.ASM"
INCLUDE "MSNEG.ASM"
ENDIF
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -