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

📄 flofloor.asm

📁 PIC单片机的汇编源码合集,应用比较广泛,设计程序时可做子程序来用
💻 ASM
字号:
;********************FLOFLOOR********************
;本程序实现标准浮点数取整FLOOR(x)。
;入口参数:X在ARGBH1:ARGBL1:EXP1中。
;出口参数:FLOOR(X)在ARGBH1:ARGBL1:EXP1中。
;占用资源:W,STATUS,020H~02CH,两重堆栈。
;说明:     用户需自行指定 AARGB4,AARGB7,DARGB1,DARGB2

           IFNDEF             FLOOR1

                #DEFINE       FLOOR1
FLOFLOOR
		CLRF		AARGB2			; test for zero argument
		MOVF		AEXP,W
                BTFSC                   STATUS,Z
		RETLW		0x00

		MOVF		AARGB0,W
		MOVWF		AARGB3			; save mantissa
		MOVF		AARGB1,W
		MOVWF		AARGB4

		MOVLW		.127			; computed unbiased exponent
		SUBWF		AEXP,W
                        MOVWF                   DARGB2
                        BTFSC                   DARGB2,MSB
		GOTO		FLOOR24ZERO

		SUBLW		0x10-1
                        MOVWF                   DARGB1                              ; save number of zero bits in DARGB1
                        MOVWF                   DARGB2

                        BTFSC                   DARGB2,LSB+3                        ; divide by eight
		GOTO		FLOOR24MASKH

FLOOR24MASKL
		MOVLW		0x07			; get remainder for mask pointer
                        ANDWF                   DARGB1,F
		MOVLW		LOW FLOOR24MASKTABLE
                        ADDWF                   DARGB1,F
		MOVLW		HIGH FLOOR24MASKTABLE
                        BTFSC                   STATUS,C
		ADDLW		0x01
		MOVWF		PCLATH
                        INCF                    DARGB1,W

		CALL		FLOOR24MASKTABLE	; access table for mask

		ANDWF		AARGB1,F
		BTFSS		AARGB0,MSB		; if negative, round down
		RETLW		0x00

		MOVWF		AARGB7
		MOVF		AARGB4,W
		SUBWF		AARGB1,W
                        BTFSS                   STATUS,Z
		GOTO		FLOOR24RNDL
		RETLW		0x00

FLOOR24RNDL
		COMF		AARGB7,W
                        MOVWF                   DARGB2
                        INCF                    DARGB2,W
		ADDWF		AARGB1,F
                BTFSC           STATUS,Z
                INCF            AARGB0, F
                        BTFSS                   STATUS,Z                                  ; has rounding caused carryout?
		RETLW		0x00
		RRF		AARGB0,F
		RRF		AARGB1,F
		INCFSZ		AEXP,F			; check for overflow
		RETLW		0x00
		GOTO		SETFOV

FLOOR24MASKH
		MOVLW		0x07			; get remainder for mask pointer
                        ANDWF                   DARGB1,F
		MOVLW		LOW FLOOR24MASKTABLE
                        ADDWF                   DARGB1,F
		MOVLW		HIGH FLOOR24MASKTABLE
                        BTFSC                   STATUS,C
		ADDLW		0x01
		MOVWF		PCLATH
                        INCF                    DARGB1,W

		CALL		FLOOR24MASKTABLE	; access table for mask

		ANDWF		AARGB0,F
		CLRF		AARGB1
		BTFSS		AARGB0,MSB		; if negative, round down
		RETLW		0x00

		MOVWF		AARGB7
		MOVF		AARGB4,W
		SUBWF		AARGB1,W
                        BTFSS                   STATUS,Z
		GOTO		FLOOR24RNDH
		MOVF		AARGB3,W
		SUBWF		AARGB0,W
                        BTFSS                   STATUS,Z
		GOTO		FLOOR24RNDH
		RETLW		0x00

FLOOR24RNDH
		COMF		AARGB7,W
                        MOVWF                   DARGB2
                        INCF                    DARGB2,W
		ADDWF		AARGB0,F
                        BTFSS                   STATUS,C                                  ; has rounding caused carryout?
		RETLW		0x00
		RRF		AARGB0,F
		RRF		AARGB1,F
		INCFSZ		AEXP,F
		RETLW		0x00
		GOTO		SETFOV		; check for overflow

FLOOR24ZERO
		BTFSC		AARGB0,MSB
		GOTO		FLOOR24MINUSONE
		CLRF		AEXP
		CLRF		AARGB0
		CLRF		AARGB1
		RETLW		0x00

FLOOR24MINUSONE
		MOVLW		0x7F
		MOVWF		AEXP
		MOVLW		0x80
		MOVWF		AARGB0
		CLRF		AARGB1
		RETLW		0x00

;----------------------------------------------------------------------------------------------

;	table for least significant byte requiring masking, using pointer from 
;	the remainder of the number of zero bits divided by eight.

FLOOR24MASKTABLE
		MOVWF		PCL
		RETLW		0xFF
		RETLW		0xFE
		RETLW		0xFC
		RETLW		0xF8
		RETLW		0xF0
		RETLW		0xE0
		RETLW		0xC0
		RETLW		0x80
		RETLW		0x00
              ENDIF              

⌨️ 快捷键说明

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