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

📄 flot3s.asm

📁 PIC单片机的汇编源码合集,应用比较广泛,设计程序时可做子程序来用
💻 ASM
字号:
;********************FLOT3S********************
;本程序实现规格化浮点数转化为3字节有符号二进制整数。
;入口参数:原浮点数在ARGBH1:ARGBL1:EXP1中。
;出口参数:补码结果在RLT:SOUH:SOU中。
;占用资源:W,STATUS,020H,021H,023H,024H,025H,026H,一重堆栈。

           IFNDEF       FLOT3S1
            #DEFINE     FLOT3S1
 
FLOT3S      MOVLW       0C0H
            ANDWF       FPFLAGS,F
            MOVF        ARGBH1,W    ;作准备
            MOVWF       ARGBL2
            MOVF        ARGBL1,W
            MOVWF       ARGBH1
            CLRF        ARGBL1      
            MOVF        ARGBL2,W    ;保存符号位
            MOVWF       SIGN
            BSF         ARGBL2,MSB  ;最高位隐含的"1"
            MOVLW       .127+.23    ;从指数中去掉偏移量
            SUBWF       EXP1,F
            BTFSC       STATUS,C
            GOTO        SETIOV3
            COMF        EXP1,F
            INCF        EXP1,F
            MOVLW       8           ;若EXP1 >= 8,则右移一个字节得到保护位
            SUBWF       EXP1,W
            BTFSS       STATUS,C
            GOTO        TSHIFT1
            MOVWF       EXP1
            RLF         ARGBL1,F    ;得到保护位
            MOVF        ARGBH1,W
            MOVWF       ARGBL1
            MOVF        ARGBL2,W
            MOVWF       ARGBH1
            CLRF        ARGBL2
            MOVLW       8           
            SUBWF       EXP1,W
            BTFSS       STATUS,C
            GOTO        TSHIFT1
            MOVWF       EXP1
            RLF         ARGBL1,F    
            MOVF        ARGBH1,W
            MOVWF       ARGBL1
            CLRF        ARGBH1
            MOVLW       8           
            SUBWF       EXP1,W
            BTFSS       STATUS,C
            GOTO        TSHIFT1
            MOVWF       EXP1
            RLF         ARGBL1,F    
            CLRF        ARGBL1
            MOVF        EXP1,W
            BTFSS       STATUS,Z
            BCF         STATUS,C
            GOTO        SHIFTOK
TSHIFT1     MOVF        EXP1,W      ;若EXP1 = 0,则移位结束
            BTFSC       STATUS,Z
            GOTO        SHIFTOK
SHIFT1      BCF         STATUS,C
            RRF         ARGBL2,F    ;右移EXP1位
            RRF         ARGBH1,F    
            RRF         ARGBL1,F
            DECFSZ      EXP1,F
            GOTO        SHIFT1
SHIFTOK     BTFSC       FPFLAGS,RND
            BTFSS       ARGBL1,LSB
            GOTO        INTOK
            BTFSS       STATUS,C
            GOTO        INTOK
            INCF        ARGBL1,F
            BTFSC       STATUS,Z
            INCF        ARGBH1,F
            BTFSC       STATUS,Z
            INCF        ARGBL2,F
            BTFSC       ARGBL2,MSB  ;检测有无上溢
            GOTO        SETIOV3
INTOK       BTFSS       SIGN,MSB    ;负数
            RETLW       0
            COMF        ARGBL2,F
            COMF        ARGBH1,F
            COMF        ARGBL1,F
            INCF        ARGBL1,F
            BTFSC       STATUS,Z
            INCF        ARGBH1,F
            BTFSC       STATUS,Z
            INCF        ARGBL2,F
            RETLW       0
SETIOV3     BSF         FPFLAGS,IOV ;上溢标志置1
            BTFSS       FPFLAGS,SAT ;检测饱和允许位
            RETLW       0xFF        
            CLRW                    ;饱和
            BTFSS       SIGN,MSB    
            MOVLW       0xFF
            MOVWF       ARGBL2      ;SIGN = 0, 0x 7F FF FF
            MOVWF       ARGBH1      ;SIGN = 1, 0x 80 00 00
            MOVWF       ARGBL1
            RLF         SIGN,F
            RRF         ARGBL2,F
            RETLW       0xFF        
           ENDIF

⌨️ 快捷键说明

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