;-------------------------------------------
;无符号16位乘法子程序
;入口条件:被乘数-58H57H,乘数-56H55H
;出口条件:乘积-58H57H5AH59H
;计数器:5DH
;56H55H×58H57H=58H57H5AH59H
;-------------------------------------------
D_MPYS MOVLW 10H ;循环计数器
MOVWF 6DH ;
MOVF 68H,W ;乘数进6CH6BH
MOVWF 6CH ;
MOVF 67H,W ;
MOVWF 6BH ;
CLRF 68H ;
CLRF 67H ;
MLOOP RRF 6CH,F ;乘数右移
RRF 6BH,F ;
BTFSC STATUS,C ;
CALL D_ADD1 ;积+被乘数
RRF 68H,F ;积右移
RRF 67H,F ;
RRF 6AH,F ;
RRF 69H,F ;
DECFSZ 6DH,F ;
GOTO MLOOP ;继续循环
RETURN ;
D_ADD1 MOVF 65H,W ;
ADDWF 67H,F ;
BTFSC STATUS,C ;
INCF 68H,F ;
MOVF 66H,W ;
ADDWF 68H,F ;
RETURN ;
|