⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 flodiv.asm

📁 PIC单片机的汇编源码合集,应用比较广泛,设计程序时可做子程序来用
💻 ASM
字号:
;********************FLODIV********************
;本程序实现标准浮点数除法。
;入口参数:被除数在ARGBH1:ARGBL1:EXP1中,除数在ARGBH2:ARGBL2:EXP2中。
;出口参数:结果在ARGBH1:ARGBL1:EXP1中。
;占用资源:W,STATUS,020H~02BH,两重堆栈。
;说    明: 1.加载本文件的同时也加载了另外2个文件"DUSUB.ASM","DUADD.ASM"
;            故用户在使用这2个子程序时可直接调用,不必重新加载.

           IFNDEF       FLODIV1
            #DEFINE     FLODIV1

FLODIV      MOVF        EXP2,W      ;检测是否除数为0
            BTFSC       STATUS,Z
            GOTO        SETFDZ
            MOVF        EXP1,W
            BTFSC       STATUS,Z
            GOTO        RES024
DBNE0       MOVF        ARGBH1,W
            XORWF       ARGBH2,W
            MOVWF       SIGN        ;保护结果符号位
            BSF         ARGBH1,MSB  ;最高位隐含的1
            BSF         ARGBH2,MSB
TALIGN      CLRF        TEMP1       ;TEMP1作为增阶标志
            CALL        DUSUB       ;比较尾数大小
            CALL        DUADD
            CLRF        TEMP2
            CLRF        TEMP3
            BTFSC       STATUS,C
            GOTO        DALIGNOK
            BCF         STATUS,C    ;调整尾数
            RRF         ARGBH1,F
            RRF         ARGBL1,F
            RRF         TEMP2,F
            MOVLW       0x01
            MOVWF       TEMP1       ;增阶标志置1
DALIGNOK    MOVF        EXP2,W      ;计算EXP
            SUBWF       EXP1,F
            BTFSS       STATUS,C
            GOTO        ALTB  
AGEB        MOVLW       .127-1      
            ADDWF       TEMP1,W
            ADDWF       EXP1,F
            BTFSC       STATUS,C
            GOTO        SETFOV      ;上溢
            GOTO        DARGOK      
ALTB        MOVLW       .127-1
            ADDWF       TEMP1,W
            ADDWF       EXP1,F
            BTFSS       STATUS,C
            GOTO        SETFUN      ;下溢
DARGOK      MOVLW       D'16'       ;初使化计数器
            MOVWF       TEMP4
DLOOP       RLF         TEMP3,F     ;被除数和结果左移
            RLF         TEMP2,F
            RLF         ARGBL1,F
            RLF         ARGBH1,F
            RLF         TEMP1,F
            CALL        DUSUB        ;相减
            RLF         ARGBH2,W
            IORWF       TEMP1,F
            BTFSS       TEMP1,LSB   ;检测是否需要恢复被除数
            GOTO        DREST  
            BSF         TEMP3,LSB
            GOTO        DOK  
DREST       CALL        DUADD       ;恢复被除数
            BCF         TEMP3,LSB
DOK         DECFSZ      TEMP4,F
            GOTO        DLOOP
DROUND      BTFSC       FPFLAGS,RND
            BTFSS       TEMP3,LSB
            GOTO        DIVOK
            BCF         STATUS,C
            RLF         ARGBL1,F    ;计算保护位
            RLF         ARGBH1,F    ;以便圆整
            RLF         TEMP1,F
            CALL        DUSUB       ;相减
            RLF         ARGBH2,W
            IORWF       TEMP1,W
            ANDLW       0x01
            ADDWF       TEMP3,F
            BTFSC       STATUS,C
            INCF        TEMP2,F
            BTFSS       STATUS,Z    ;检测圆整过程是否产生进位
            GOTO        DIVOK
            RRF         TEMP2,F
            RRF         TEMP3,F
            INCF        EXP1,F
            BTFSC       STATUS,Z    ;是否上溢
            GOTO        SETFOV  
DIVOK       BTFSS       SIGN,MSB
            BCF         TEMP2,MSB   ;隐藏MSB
            MOVF        TEMP2,W
            MOVWF       ARGBH1      ;结果送ARG1
            MOVF        TEMP3,W
            MOVWF       ARGBL1
            RETLW       0
            INCLUDE     "DUADD.ASM"
            INCLUDE     "DUSUB.ASM"
           ENDIF

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -