PIC16F系列单片机没有乘除法指令,乘除法运算需用程序完成。师兄UPS2015介绍了8位乘除法运算的汇编语言解决方案,一下是本人常用的16位乘除法汇编语言程序,供大家参考,指正。
…………
TEMP EQU 2AH ;临时工作
BAHI EQU 33H
BALO EQU 34H
BBHI EQU 35H
BBLO EQU 36H
BCHI EQU 37H
BCLO EQU 38H
BDHI EQU 39H
BDLO EQU 3AH
BEHI EQU 3BH
BELO EQU 3CH
…………
;=====双精度乘法
;16位被乘数 BBHI,BBLO
;16位乘数 BAHI,BALO
;32位乘积 BBHI,BBLO,BCHI,BCLO
MPYS CALL SETUP
MLOOP CLRWDT
RRF BDHI,F
RRF BDLO,F
BTFSC STATUS,C
CALL D_ADD
RRF BBHI,F
RRF BBLO,F
RRF BCHI,F
RRF BCLO,F
DECFSZ TEMP,F
GOTO MLOOP
RETURN
SETUP MOVLW 010H
MOVWF TEMP
MOVF BBHI,W
MOVWF BDHI
MOVF BBLO,W
MOVWF BDLO
CLRF BBHI
CLRF BBLO
RETURN
D_ADD MOVF BALO,W
ADDWF BBLO,F
BTFSC STATUS,C
INCF BBHI,F
MOVF BAHI,W
ADDWF BBHI,F
RETURN
;--------------------------------------
;=====双精度除法
;32位被除乘数 BBHI,BBLO,BCHI,BCLO
;16位乘除数 BAHI,BALO
;16位商 BBHI,BBLO,余数 BCHI,BCLO
DIVS CALL SETUPD
DLOOP CLRWDT
BCF STATUS,C
RLF BELO,F
RLF BEHI,F
RLF BDLO,F
RLF BDHI,F
RLF BCLO,F
RLF BCHI,F
MOVF BAHI,W
SUBWF BCHI,W
BTFSS STATUS,Z
GOTO NOCHK
MOVF BALO,W
SUBWF BCLO,W
NOCHK BTFSS STATUS,C
GOTO NOGO
MOVF BALO,W
SUBWF BCLO,F
BTFSS STATUS,C
DECF BCHI,F
MOVF BAHI,W
SUBWF BCHI,F
BSF STATUS,C
NOGO RLF BBLO,F
RLF BBHI,F
DECFSZ TEMP,F
GOTO DLOOP
RETURN
SETUPD MOVLW 020H
MOVWF TEMP
MOVF BBHI,W
MOVWF BDHI
MOVF BBLO,W
MOVWF BDLO
MOVF BCHI,W
MOVWF BEHI
MOVF BCLO,W
MOVWF BELO
CLRF BBHI
CLRF BBLO
CLRF BCHI
CLRF BCLO
RETURN
;=====双精度减加法
;16位被减数 BBHI,BBLO
;16位减数 BAHI,BALO
;16位差 BBHI,BBLO
DSUB CALL NEGA
;=====双精度加法
;16位被加数 BBHI,BBLO
;16位加数 BAHI,BALO
;16位和 BBHI,BBLO
DADD MOVF BALO,W
ADDWF BBLO,F
BTFSC STATUS,C
INCF BBHI,F
MOVF BAHI,W
ADDWF BBHI,F
RETURN
NEGA COMF BALO,F
INCF BALO,F
BTFSC STATUS,Z
DECF BAHI,F
COMF BAHI,F
RETURN
;----------------------
|