| 
 | 
 
;-------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 |   
 
 
 
 |