winnie 发表于 2009-5-25 15:43:12

16位除法的问题

;-------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
      DECFSZCOUNT,F
      GOTO    DIVFWLOOP;继续
DIVFWEXIT
ENDM
页: [1]
查看完整版本: 16位除法的问题