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

📄 log_10.asm

📁 CCS3.3自带的TI 5400系列DSP的dsplib文件。文档说明可以在TI公司网站上下载。
💻 ASM
字号:
;***********************************************************
; Version 2.20.01                                           
;***********************************************************
;*********************************************************************************
;  Function:	log_10
;  Description: Calculate log of 16-bit Q15 number
;
;  Copyright Texas instruments Inc, 1998
;--------------------------------------------------------------------------------
; Revision History:
;  1.00, A. Aboagye, 8/31/98 - Original release. Started from code by P. Dorster
;  1.10, A. Aboagye, 10/6/99 - Fixed far mode bug - replaced *SP(17) with *SP(17+offset)
;  1.20, A. Aboagye, 04/27/00 - Fixed "SXM not set" bug
;********************************************************************************

	.if __far_mode
OFFSET	.set 1
	.else
OFFSET	.set 0
	.endif

	.asg    *sp(0), x_ptr
	.asg    *sp(1), Exp
	.asg    *sp(2), Mant
	.asg    *sp(3), U
	.asg    *sp(4), Temp
	.asg    *sp(5), CST_4000
	.asg    *sp(6), LB6
	.asg    *sp(7), LB5
	.asg    *sp(8), LB4
	.asg    *sp(9), LB3
	.asg    *sp(10), LB2
	.asg    *sp(11), LB1
	.asg    *sp(12), LB0
	.asg    *sp(13), CST_1
	.asg    *sp(14), CST_ln2
	.asg    *sp(18+OFFSET), y_ptr

	.mmregs		; assign Memory-Mapped Register names as global symbols
	.def		_log_10

	.text		; begin assembling into .text section
	
_log_10:
        PSHM    ST0                                 ; 1 cycle
        PSHM    ST1                                 ; 1 cycle
        RSBX    OVA                                 ; 1 cycle
        RSBX    OVB                                 ; 1 cycle

	FRAME	#-15
	nop
**initialization for Logarithm calculation                                     

        RSBX    FRCT
        SSBX    SXM
	ST	#04000h,CST_4000
	ST	#0DC56h,LB6
	ST	#54adh,LB5
	ST	#9e8ah,LB4
	ST	#50d5h,LB3
	ST	#0c056h,LB2
	ST	#3ffdh,LB1
	ST	#062dh,LB0
	ST	#58B9h,CST_ln2		
	ST	#1h,CST_1
	STL	A, x_ptr

	LD	*SP(19+OFFSET), A
	SUB     #1,A
	STLM    A,BRC      
	MVDK	y_ptr, *(AR4)
	MVDK	x_ptr, *(AR3)

	RPTB	endlog
**************
* Normalize x
**************

	LD		*AR3+,16,A		; A = x<<16
	EXP		A		; T = number of leading bits
	ST		T,Exp		; Exp = number of leading bits
	NORM	A			; A = A<<T
	STH		A,Mant		; Mant = M (between 0.5 and 1.0)

***************************
* Polynomial approximation 
***************************
   
	LDM		SP, A
	ADD		#5, A
	STLM		A, AR2	
	;STM		#CST_4000,AR2
	LD		Mant,1,A	; A <- 2*M  
	SUB		*AR2+,1,A	; A <- (2*M-1) Q15 
	STLM		A,T  		; U <- (2*M-1) Q15 (between 0.0 and 1.0)           
	LD		*AR2+,16,A
	LD		*AR2+,16,B 
	POLY		*AR2+		; A(32-16) <- B6*U + B5
					; Q34 + Q18<<16 = Q34				
	POLY		*AR2+          	; A <- (B6*U + B5)*U + B4
					; Q33 + Q17<<16 = Q33					
	POLY		*AR2+		; A <- ((B6*U + B5)*U + B4)*U + B3
					; Q32 + Q16<<16 = Q32							
	POLY		*AR2+	       	;  A <- (((B6*U + B5)*U + B4)*U + B3)*U + B2
					; Q31 + Q15<<16 = Q31                               							
	POLY		*AR2           	; A <- ((((B6*U + B5)*U + B4)*U + B3)*U + B2)*U + 
 					; B1
					; Q30 + Q14<<16 = Q30							
	SFTA		A,1,A		; Q14<<1 = Q15 (accumulator high)	
	MPYA		A										
	ADD		*AR2+,A		; A <- (((((B6*U + B5)*U + B4)*U + B3)*U + B2)*U + 
 					; B1)*U + B0
					; Q30 + Q30 = Q30                                               
	STH		A,1,Temp	; Temp <- (((((B6*U + B5)*U + B4)*U + B3)*U + B2)*U  + B1)*U + B0
					; = f(2*M-1)
					; Q14<<1 = Q15 (accumulator high)					
*******************
* Process exponent
*******************

	LD		Exp,A		; A <- number of leading bits
	NEG		A		; A <- exponent = P
	SUB		*AR2+,A		; A <- P-1                
	STLM		A,T         	; T <- P-1
	MPY		*AR2,A		; A <- (P-1)*ln(2)
					; Q0*Q15 = Q15
                                  
*************************
* Add both contributions
*************************

	ADD		Temp,A		; A <- f(2*M(x)-1) + (P(x)-1)*ln(2)
	LD		A, B
	AND		#7FFFh, B
	STL		B, *AR4
	STM		#03797h, T
	SSBX		FRCT
	SFTA		A, 1
	MPYA		A
	MPY		*AR4, B
	SFTA		A, -1
	SFTA		B, -16
	ADD		B, A
	DST		A, *AR4+
endlog	RSBX		FRCT

************************
* Return overflow flag
************************

	FRAME		#15
	LD		#0,A
	XC		1,AOV
	LD		#1,A
        POPM    ST1
        POPM    ST0
        .if __far_mode
           FRET                                     ; 6 cycles
        .else
	   RET                                      ; 5 cycles
        .endif

;end of file. please do not remove. it is left here to ensure that no lines of code are removed by any editor

⌨️ 快捷键说明

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