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

📄 floexp10.asm

📁 PIC单片机的汇编源码合集,应用比较广泛,设计程序时可做子程序来用
💻 ASM
字号:
;********************FLOEXP10********************
;本程序对标准浮点数求以10为底的指数函数EXP10(x)。
;入口参数:X在ARGBH1:ARGBL1:EXP1中。
;出口参数:EXP10(X)在ARGBH1:ARGBL1:EXP1中。
;占用资源:W,STATUS,020H~02CH,3重堆栈。
;说明:     1.用户需自行指定 AARGB4,AARGB5,AARGB7,DEXP,DARGB1,DARGB2,DARGB3
;          2.加载本文件的同时也加载了另外2个文件"FLOTDS.ASM","FLOOR.ASM"
;            故用户在使用这2个子程序时可直接调用,不必重新加载.
 
           IFNDEF       FLOEXP101
            #DEFINE     FLOEXP101

            INCLUDE     "RND3224.ASM"
            INCLUDE     "FXM2416U.ASM"         
            INCLUDE     "FLOFLOOR.ASM"         
            INCLUDE     "FLOTDS.ASM"
            INCLUDE     "MUAD32.ASM"

FLOEXP10     
            MOVLW       0x64        ; |x| < 2**(-24)/(2*LOG(10))
            SUBWF       EXP,W
            MOVWF       DARGB0
            BTFSC       DARGB0,MSB
            GOTO        EXP1024ONE  ;返回 10**x = 1

            BTFSC       AARGB0,MSB
            GOTO        TNEXP1024
TPEXP1024
            MOVF        AEXP,W
            SUBLW       MAXLOG1024EXP
            BTFSS       STATUS,C
            GOTO        DOMERR24
            BTFSS       STATUS,Z
            GOTO        EXP1024ARGOK

            MOVF        AARGB0,W
            SUBLW       MAXLOG1024B0
            BTFSS       STATUS,C
            GOTO        DOMERR24
            BTFSS       STATUS,Z
            GOTO        EXP1024ARGOK

            MOVF        AARGB1,W
            SUBLW       MAXLOG1024B1
            BTFSS       STATUS,C
            GOTO        DOMERR24
            GOTO        EXP1024ARGOK

TNEXP1024
            MOVF        AEXP,W
            SUBLW       MINLOG1024EXP
            BTFSS       STATUS,C
            GOTO        DOMERR24
            BTFSS       STATUS,Z
            GOTO        EXP1024ARGOK
            MOVF        AARGB0,W
            SUBLW       MINLOG1024B0
            BTFSS       STATUS,C
            GOTO        DOMERR24
            BTFSS       STATUS,Z
            GOTO        EXP1024ARGOK

            MOVF        AARGB1,W
            SUBLW       MINLOG1024B1
            BTFSS       STATUS,C
            GOTO        DOMERR24

EXP1024ARGOK
            MOVF        FPFLAGS,W
            MOVWF       DARGB3      ; 保存RND位
            BCF         FPFLAGS,RND ; 屏蔽圆整允许位

            CALL        RREXP1024

            MOVLW       0x7E
            SUBWF       AEXP,W
            BTFSS       STATUS,Z
            GOTO        EXP1024L

EXP1024H    BTFSS       AARGB0,MSB-1
            GOTO        EXP1024HL

            POL         EXP24HH,3,0 ;[.75,1]

            MOVF        EARGB3,W
            ADDWF       AEXP,F
            RETLW       0x00

EXP1024HL   POL         EXP24HL,3,0 ;[.5,.75]
                                    
            MOVF        EARGB3,W
            ADDWF       AEXP,F
            RETLW       0x00

EXP1024L    MOVLW       0x7D
            SUBWF       AEXP,W
            BTFSS       STATUS,Z
            GOTO        EXP1024LL

            POL         EXP24LH,3,0 ;[.25,.5]

            MOVF        EARGB3,W
            ADDWF       AEXP,F
            RETLW       0x00
EXP1024LL   POL         EXP24LL,3,0 ;[0,.25]

EXP1024OK
            MOVF        EARGB3,W
            ADDWF       AEXP,F
            BTFSS       DARGB3,RND
            RETLW       0x00
            BSF         FPFLAGS,RND ;恢复圆整允许位
            GOTO        RND3224

EXP1024ONE  MOVLW       .127        ;返回 e**x = 1.0
            MOVWF       AEXP
            CLRF        AARGB0
            CLRF        AARGB1
            CLRF        AARGB2
            RETLW       0x00
           

;**********************************************************************************************

;	Range reduction routine for the exponential function

;		x/log10(2) = z + n
            
RREXP1024
            MOVF        AARGB0,W
            MOVWF       EARGB3
            BSF         AARGB0,MSB

            MOVF        AARGB0,W
            MOVWF       BARGB0
            MOVF        AARGB1,W
            MOVWF       BARGB1

            MOVLW       0xD4        ; 1/log10(2) = 3.32192809489
            MOVWF       AARGB0
            MOVLW       0x9A
            MOVWF       AARGB1
            MOVLW       0x78
            MOVWF       AARGB2

            CALL        FXM2416U    ; x * (1/log10(2))
            INCF        AEXP,F
            INCF        AEXP,F

            BTFSC       AARGB0,MSB
            GOTO        RREXP1024YOK
            RLF         AARGB3,F
            RLF         AARGB2,F
            RLF         AARGB1,F
            RLF         AARGB0,F
            DECF        AEXP,F

RREXP1024YOK
            BTFSS       EARGB3,MSB
            BCF         AARGB0,MSB
		
            MOVF        AEXP,W
            MOVWF       BEXP        
            MOVF        AARGB0,W
            MOVWF       BARGB0
            MOVF        AARGB1,W
            MOVWF       BARGB1
            MOVF        AARGB2,W
            MOVWF       BARGB2

            CALL        FLOFLOOR

            MOVF        AEXP,W      ;n保存在DARG中
            MOVWF       DEXP        
            MOVF        AARGB0,W
            MOVWF       DARGB0
            MOVF        AARGB1,W
            MOVWF       DARGB1
            CALL        FLOTDS      ;n = [ x * (1/ln2) ]
		
            MOVF        AARGB1,W
            MOVWF       EARGB3      ;定点整数n保存在EARG中

            MOVF        DEXP,W
            MOVWF       AEXP
            MOVF        DARGB0,W
            MOVWF       AARGB0
            MOVF        DARGB1,W
            MOVWF       AARGB1
            CLRF        AARGB2

            MOVLW       0x80
            XORWF       AARGB0,F

            CALL        FPA32

            MOVF        AEXP,W
            MOVWF       DEXP        ;Z保存在 DARG
            MOVF        AARGB0,W
            MOVWF       DARGB0
            MOVF        AARGB1,W
            MOVWF       DARGB1
            MOVF        AARGB2,W
            MOVWF       DARGB2

            RETLW       0x00
;----------------------------------------------------------------------------------------------
;	Maximum argument to EXP1024

MAXLOG1024EXP	equ	0x84		; 38.531839445 = log10(2**128)

MAXLOG1024B0	equ	0x1A

MAXLOG1024B1	equ	0x21

;	Minimum argument to EXP1024

MINLOG1024EXP	equ	0x84		; -37.9297794537 = log10(2**-126)

MINLOG1024B0	equ	0x97

MINLOG1024B1	equ	0xB8

;	third degree minimax polynomial coefficients for 2**(x) on [.75,1]

EXP24HH0	EQU		0x7E		; EXP24HH0 = .99103284632
EXP24HH00	EQU		0x7D
EXP24HH01	EQU		0xB4
EXP24HH02	EQU		0x54

EXP24HH1	EQU		0x7E		; EXP24HH1 = .73346850266
EXP24HH10	EQU		0x3B
EXP24HH11	EQU		0xC4
EXP24HH12	EQU		0x97

EXP24HH2	EQU		0x7C		; EXP24HH2 = .17374128273
EXP24HH20	EQU		0x31
EXP24HH21	EQU		0xE9
EXP24HH22	EQU		0x3C

EXP24HH3	EQU		0x7B		; EXP24HH3 = .10175678143
EXP24HH30	EQU		0x50
EXP24HH31	EQU		0x65
EXP24HH32	EQU		0xDC

;	third degree minimax polynomial coefficients for 2**(x) on [.5,.75]

EXP24HL0	EQU		0x7E		; EXP24HL0 = .99801686089
EXP24HL00	EQU		0x7F
EXP24HL01	EQU		0x7E
EXP24HL02	EQU		0x08

EXP24HL1	EQU		0x7E		; EXP24HL1 = .70586404164
EXP24HL10	EQU		0x34
EXP24HL11	EQU		0xB3
EXP24HL12	EQU		0x81

EXP24HL2	EQU		0x7C		; EXP24HL2 = .21027360637
EXP24HL20	EQU		0x57
EXP24HL21	EQU		0x51
EXP24HL22	EQU		0xF7

EXP24HL3	EQU		0x7B		; EXP24HL3 = .85566912730E-1
EXP24HL30	EQU		0x2F
EXP24HL31	EQU		0x3D
EXP24HL32	EQU		0xB5

;	third degree minimax polynomial coefficients for 2**(x) on [.25,.5]

EXP24LH0	EQU		0x7E		; EXP24LH0 = .99979384559
EXP24LH00	EQU		0x7F
EXP24LH01	EQU		0xF2
EXP24LH02	EQU		0x7D

EXP24LH1	EQU		0x7E		; EXP24LH1 = .69545887384
EXP24LH10	EQU		0x32
EXP24LH11	EQU		0x09
EXP24LH12	EQU		0x98

EXP24LH2	EQU		0x7C		; EXP24LH2 = .23078300446
EXP24LH20	EQU		0x6C
EXP24LH21	EQU		0x52
EXP24LH22	EQU		0x61

EXP24LH3	EQU		0x7B		; EXP24LH3 = .71952910179E-1
EXP24LH30	EQU		0x13
EXP24LH31	EQU		0x5C
EXP24LH32	EQU		0x0C

;	third degree minimax polynomial coefficients for 2**(x) on [0,.25]

EXP24LL0	EQU		0x7E		; EXP24LL0 = .99999970657
EXP24LL00	EQU		0x7F
EXP24LL01	EQU		0xFF
EXP24LL02	EQU		0xFB

EXP24LL1	EQU		0x7E		; EXP24LL1 = .69318585159
EXP24LL10	EQU		0x31
EXP24LL11	EQU		0x74
EXP24LL12	EQU		0xA1

EXP24LL2	EQU		0x7C		; EXP24LL2 = .23944330933
EXP24LL20	EQU		0x75
EXP24LL21	EQU		0x30
EXP24LL22	EQU		0xA0

EXP24LL3	EQU		0x7A		; EXP24LL3 = .60504944237E-1
EXP24LL30	EQU		0x77
EXP24LL31	EQU		0xD4
EXP24LL32	EQU		0x08

              ENDIF

⌨️ 快捷键说明

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