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

📄 flolog10.asm

📁 PIC单片机的汇编源码合集,应用比较广泛,设计程序时可做子程序来用
💻 ASM
字号:
;********************FLOLOG10********************
;本程序求标准浮点数以10为底的对数函数Log10(x)。
;入口参数:X在ARGBH1:ARGBL1:EXP1中。
;出口参数:Log10(X)在ARGBH1:ARGBL1:EXP1中。
;占用资源:W,STATUS,020H~02CH,3重堆栈。
;说明:     1.用户需指定AARGB4,AARGB5,BARGB3,EARGB3,DEXP,DARGB1,DARGB2,DARGB3,
;            CEXP,CARGB0,CARGB1,CARGB2


           IFNDEF       FLOLOG101
            #DEFINE     FLOLOG101 

            INCLUDE     "RND3224.ASM"
            INCLUDE     "FXM2424U.ASM"
            INCLUDE     "FPD32.ASM"
            INCLUDE     "DSTFLO.ASM"
            INCLUDE     "MUAD32.ASM"

FLOLOG10
            CLRF        AARGB2
            BTFSC       AARGB0,MSB  ;自变量是否为负数
            GOTO        DOMERR1024
            MOVF        AEXP,W      ;自变量是否为0
            BTFSC       STATUS,Z
            GOTO        DOMERR1024

            MOVF        FPFLAGS,W   ;保存RND标志
            MOVWF       DARGB3
            BCF         FPFLAGS,RND ;屏蔽RND

            MOVF        AEXP,W
            MOVWF       EARGB3
            MOVLW       .127-1
            SUBWF       EARGB3,F
            MOVWF       AEXP

            MOVLW       0xF3        ;0.70710678118655 = 7E3504F3
            SUBWF       AARGB2,W
            MOVLW       0x04
            MOVWF       TEMP
            BTFSS       STATUS,C
            INCFSZ      TEMP,W
            SUBWF       AARGB1,W
            MOVLW       0x35
            MOVWF       TEMP
            BTFSS       STATUS,C
            INCFSZ      TEMP,W
            SUBWF       AARGB0,W
            BTFSS       STATUS,C
            GOTO        LOG1024L

;	minimax rational approximation on [0,.sqrt(2)-1]

LOG1024H
            MOVLW       0x7F
            MOVWF       BEXP
            CLRF        BARGB0
            CLRF        BARGB1
            CLRF        BARGB2

            CALL        FPS32

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

            POLL1       LOG1024HQ,2,0

            MOVF        AEXP,W
            MOVWF       CEXP
            MOVF        AARGB0,W
            MOVWF       CARGB0
            MOVF        AARGB1,W
            MOVWF       CARGB1
            MOVF        AARGB2,W
            MOVWF       CARGB2

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

            POL         LOG1024HP,1,0

            MOVF        CEXP,W
            MOVWF       BEXP
            MOVF        CARGB0,W
            MOVWF       BARGB0
            MOVF        CARGB1,W
            MOVWF       BARGB1
            MOVF        CARGB2,W
            MOVWF       BARGB2

            CALL        FPD32

            GOTO        LOG1024OK

;	minimax rational approximation on [1/sqrt(2)-1,0]

LOG1024L
            INCF        AEXP,F 
            MOVLW       0x7F
            MOVWF       BEXP
            CLRF        BARGB0
            CLRF        BARGB1
            CLRF        BARGB2

            CALL        FPS32

            DECF        EARGB3,F

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

            POLL1       LOG1024LQ,2,0

            MOVF        AEXP,W
            MOVWF       CEXP
            MOVF        AARGB0,W
            MOVWF       CARGB0
            MOVF        AARGB1,W
            MOVWF       CARGB1
            MOVF        AARGB2,W
            MOVWF       CARGB2
            MOVF        DEXP,W
            MOVWF       AEXP
            MOVF        DARGB0,W
            MOVWF       AARGB0
            MOVF        DARGB1,W
            MOVWF       AARGB1
            MOVF        DARGB2,W
            MOVWF       AARGB2

            POL         LOG1024LP,1,0
            MOVF        CEXP,W
            MOVWF       BEXP
            MOVF        CARGB0,W
            MOVWF       BARGB0
            MOVF        CARGB1,W
            MOVWF       BARGB1
            MOVF        CARGB2,W
            MOVWF       BARGB2

            CALL        FPD32
LOG1024OK   MOVF        DEXP,W
            MOVWF       BEXP
            MOVF        DARGB0,W
            MOVWF       BARGB0
            MOVF        DARGB1,W
            MOVWF       BARGB1
            MOVF        DARGB2,W
            MOVWF       BARGB2

            CALL        FPM32

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

            CLRF        AARGB0
            MOVF        EARGB3,W
            MOVWF       AARGB1
            BTFSC       AARGB1,MSB
            COMF        AARGB0,F
            CALL        DSTFLO
            CLRF        AARGB2

            MOVF        DEXP,W
            MOVWF       BEXP
            MOVF        DARGB0,W
            MOVWF       BARGB0
            MOVF        DARGB1,W
            MOVWF       BARGB1
            MOVF        DARGB2,W
            MOVWF       BARGB2

            CALL        FPA32

;	fixed point multiplication by log(2)

            MOVF        AARGB0,W
            MOVWF       EARGB3
            BSF         AARGB0,MSB

            MOVLW       0x9A
            MOVWF       BARGB0
            MOVLW       0x20
            MOVWF       BARGB1
            MOVLW       0x9B
            MOVWF       BARGB2

            CALL        FXM2424U
	    DECF	AEXP,F
            BTFSC       AARGB0,MSB
            GOTO        LOG1024DONE
            RLF         AARGB3,F
            RLF         AARGB2,F
            RLF         AARGB1,F
            RLF         AARGB0,F
            DECF        AEXP,F

LOG1024DONE BTFSS       EARGB3,MSB
            BCF         AARGB0,MSB

            BTFSS       DARGB3,RND
            RETLW       0x00

            BSF         FPFLAGS,RND
            GOTO        RND3224
DOMERR1024  BSF         FPFLAGS,DOM ; domain error
            RETLW       0xFF

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

;	minimax rational coefficients for log2(1+x)/x on [1/sqrt(2)-1,0]

LOG1024HP0	EQU		0x81		; LOG1024HP0 = .73551298732E+1
LOG1024HP00	EQU		0x6B
LOG1024HP01	EQU		0x5D
LOG1024HP02	EQU		0x39

LOG1024HP1	EQU		0x81		; LOG24HP1 = .40900513905E+1
LOG1024HP10	EQU		0x02
LOG1024HP11	EQU		0xE1
LOG1024HP12	EQU		0xB3

LOG1024HQ0	EQU		0x81		; LOG24HQ0 = .50982159260E+1
LOG1024HQ00	EQU		0x23
LOG1024HQ01	EQU		0x24
LOG1024HQ02	EQU		0x96

LOG1024HQ1	EQU		0x81		; LOG24HQ1 = .53849258895E+1
LOG1024HQ10	EQU		0x2C
LOG1024HQ11	EQU		0x51
LOG1024HQ12	EQU		0x50

LOG1024HQ2	EQU		0x7F		; LOG24HQ2 = 1.0
LOG1024HQ20	EQU		0x00
LOG1024HQ21	EQU		0x00
LOG1024HQ22	EQU		0x00

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

;	minimax rational coefficients for log2(1+x)/x on [0,sqrt(2)-1]

LOG1024LP0	EQU		0x82		; LOG24LP0 = .103115556038E+2
LOG1024LP00	EQU		0x24
LOG1024LP01	EQU		0xFC
LOG1024LP02	EQU		0x22

LOG1024LP1	EQU		0x81		; LOG24LP1 = .457749066375E+1
LOG1024LP10	EQU		0x12
LOG1024LP11	EQU		0x7A
LOG1024LP12	EQU		0xCE

LOG1024LQ0	EQU		0x81		; LOG24LQ0 = .714746549793E+1
LOG1024LQ00	EQU		0x64
LOG1024LQ01	EQU		0xB8
LOG1024LQ02	EQU		0x0A

LOG1024LQ1	EQU		0x81		; LOG24LQ1 = .674551124538E+1
LOG1024LQ10	EQU		0x57
LOG1024LQ11	EQU		0xDB
LOG1024LQ12	EQU		0x3A

LOG1024LQ2	EQU		0x7F		; LOG24LQ2 = 1.0
LOG1024LQ20	EQU		0x00
LOG1024LQ21	EQU		0x00
LOG1024LQ22	EQU		0x00

              ENDIF

⌨️ 快捷键说明

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