|
;-------16位除法宏定义-----------------------
;入口
; COUNT 计数器
; DIVBH 被除数高8位
; DIVBL 被除数低8位
; DIVCH 除数高8位
; DIVCL 除数低8位
;出口
; COUNT=0 成功
; COUNT=16失败
; DIVSH 商高8位
; DIVSL 商低8位
; DIVYH 余数高8位
; DIVYL 余数低8位
;--------------------------------------------------------------------------------
Macro_DivWordVar MACRO DIVBL,DIVBH,DIVCL,DIVCH,DIVSL,DIVSH,DIVYL,DIVYH,COUNT
LOCAL DIVFWLOOP,DIVFWNEXT,DIVFWRLC,DIVFWEXIT
MOVLW 16;
MOVWF COUNT;16位除法
MOVF DIVCH,W
IORWF DIVCL,W
BTFSC STATUS,Z
GOTO DIVFWEXIT;除数为0
CLRF DIVSH;清除商
CLRF DIVSL
CLRF DIVYH;清除余数
CLRF DIVYL
BCF STATUS,C
DIVFWLOOP
RLF DIVBL,F;被除数左移1位
RLF DIVBH,F
RLF DIVYL,F;余数左移1位
RLF DIVYH,F
MOVF DIVCH,W;取除数高8位
SUBWF DIVYH,W;余数-除数
BTFSS STATUS,Z
GOTO DIVFWNEXT;余数<>除数
MOVF DIVCL,W
SUBWF DIVYL,W
DIVFWNEXT
BTFSS STATUS,C
GOTO DIVFWRLC;
MOVF DIVCL,W
SUBWF DIVYL,F
BTFSS STATUS,C
DECF DIVYH,F;借位
MOVF DIVCH,W
SUBWF DIVYH,F
DIVFWRLC
RLF DIVSL,F;商左移1位
RLF DIVSH,F
DECFSZ COUNT,F
GOTO DIVFWLOOP;继续
DIVFWEXIT
ENDM |
|