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

📄 int3224.asm

📁 PIC单片机的汇编源码合集,应用比较广泛,设计程序时可做子程序来用
💻 ASM
字号:
;**********************************************************************************************
; 32位浮点数转化为24位整形数
;----------------------------------------------------------------------------------------------
           IFNDEF       INT32241

            #DEFINE     INT32241
INT3224
            MOVF        EXP,W       ;检测是否为0
            BTFSC       STATUS,Z
            RETLW       0x00
            MOVF        AARGB0,W    ;保护符号位
            MOVWF       SIGN
            BSF         AARGB0,MSB  ;MSB=1
            MOVLW       .127+D'23'  ;去掉偏移
            SUBWF       EXP,F
            BTFSS       EXP,MSB
            GOTO        SETIOV3224
            COMF        EXP,F
            INCF        EXP,F
            MOVLW       8           ; do byte shift if EXP >= 8
            SUBWF       EXP,W
            BTFSS       STATUS,C
            GOTO        TSHIFT3224
            MOVWF       EXP
            RLF         AARGB2,F    ; rotate next bit for rounding
            MOVF        AARGB1,W
            MOVWF       AARGB2
            MOVF        AARGB0,W
            MOVWF       AARGB1
            CLRF        AARGB0
            MOVLW       8           ; do another byte shift if EXP >= 8
            SUBWF       EXP,W
            BTFSS       STATUS,C
            GOTO        TSHIFT3224
            MOVWF       EXP
            RLF         AARGB2,F    ; rotate next bit for rounding
            MOVF        AARGB1,W
            MOVWF       AARGB2
            CLRF        AARGB1
            MOVLW       8           ; do another byte shift if EXP >= 8
            SUBWF       EXP,W
            BTFSS       STATUS,C
            GOTO        TSHIFT3224
            MOVWF       EXP
            RLF         AARGB2,F    ; rotate next bit for rounding
            CLRF        AARGB2
            MOVF        EXP,W
            BTFSS       STATUS,Z
            BCF         STATUS,C
            GOTO        SHIFT3224OK
TSHIFT3224  MOVF        EXP,W       ; shift completed if EXP = 0
            BTFSC       STATUS,Z
            GOTO        SHIFT3224OK
SHIFT3224   BCF         STATUS,C
            RRF         AARGB0,F    ; right shift by EXP
            RRF         AARGB1,F
            RRF         AARGB2,F
            DECFSZ      EXP,F
            GOTO        SHIFT3224
SHIFT3224OK BTFSC       FPFLAGS,RND
            BTFSS       AARGB2,LSB
            GOTO        INT3224OK
            BTFSS       STATUS,C
            GOTO        INT3224OK
            INCF        AARGB2,F
            BTFSC       STATUS,Z
            INCF        AARGB1,F
            BTFSC       STATUS,Z
            INCF        AARGB0,F
            BTFSC       AARGB0,MSB  ; test for overflow
            GOTO        SETIOV3224
INT3224OK   BTFSS       SIGN,MSB    ; if sign bit set, negate
            RETLW       0
            COMF        AARGB0,F
            COMF        AARGB1,F
            COMF        AARGB2,F
            INCF        AARGB2,F
            BTFSC       STATUS,Z
            INCF        AARGB1,F
            BTFSC       STATUS,Z
            INCF        AARGB0,F
            RETLW       0
IRES03224   CLRF        AARGB0      ; integer result equals zero
            CLRF        AARGB1
            CLRF        AARGB2
            RETLW       0
SETIOV3224  BSF         FPFLAGS,IOV ; set integer overflow flag
            BTFSS       FPFLAGS,SAT ; test for saturation
            RETLW       0xFF        ; return error code in WREG
            CLRF        AARGB0      ; saturate to largest two's
            BTFSS       SIGN,MSB    ; complement 24 bit integer
            MOVLW       0xFF
            MOVWF       AARGB0      ; SIGN = 0, 0x 7F FF FF
            MOVWF       AARGB1      ; SIGN = 1, 0x 80 00 00
            MOVWF       AARGB2
            RLF         SIGN,F
            RRF         AARGB0,F
            RETLW       0xFF        ;带错误码返回
            
           ENDIF

⌨️ 快捷键说明

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