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

📄 inv_sqrt.asm

📁 基于TMS320F2812的AMR+RS编解码+OFDM调制解调源程序。是stand alone运行版本
💻 ASM
字号:
*****************************************************************************
** Description:         inv_sqrt() in inv_sqrt.c                           
**                 														   
** Inputs:                                                                  
**                                                                         
**  ACC:	Word32 L_x                                                      
**                                                                         
** Outputs:                                                                
**                                                                         
** Return value:
**
**	ACC:	Word32 L_y                                               
**                                                                         
** Attribute:       Cycles: 456       Pm: 42                          
**                      
** Modified Registers:  XAR0,XAR3,XAR4                 
**                                                                         
** Programmer:      Liu Yang
**
** Complete time:   2003 3 18                                        
*****************************************************************************

        .global _inv_sqrt
        .global table

_inv_sqrt:
		
		ADDB	ACC,#0				; If L_x > 0
		SB		B1,GT               ; SB B1			

	   	MOV     AH,#0x3FFF			; Return the Max value
        MOV     AL,#0xFFFF
        
        LRETR
        
B1:     MOVB  	XAR3,#0				; Initialize XAR3 to zero
     
L1:		NORM	ACC,XAR3++          ; Normalize L_x
		SB  	L1,NTC				; XAR3 will contain shift value exp
		MOVL    @XAR4,ACC           ; XAR4 = ACC = L_x
		
		MOVB    ACC,#30				; ACC = 30 
		SUBRL   @XAR3,ACC			; XAR3 = exp = 30 - exp
		
		MOVB    ACC,#1              ; Bitwise AND 0x0001 with exp
		AND     AL,AR3				; if (exp & 1) != 0
		SB      B2,NEQ              ; SB B2 
		
		MOVL    ACC,@XAR4			; else
		SFR		ACC,#1				; Right shift L_x for 1 bit
		MOVL    @XAR4,ACC       	; XAR4 = ACC = L_x    

B2:     MOV     AL,@AR3             ; Arithmetic right shift exp for 1 bit 
		ASR 	AL,#1
		INC     AL		    		; exp = exp + 1
		MOV     @AR3,AL				; AR3 = AL = exp
		
		MOVL 	ACC,@XAR4			
		SFR     ACC,#9				; Right shift L_x for 9 bit
		MOVZ    AR0,AH				; AR0 = AH = i: extract bit25-bit31 of L_x
		SFR     ACC,#1           	; Right shift L_x for 1 bit
		MOV     @AR4,AL				; AR4 = AL = a: extract bit10-bit24 of L_x 
		
		AND		AL,@AR4,#0x7FFF 	; AL = AR4 & 0x7FFF = a
		MOV		T,@AL				; T = AL = a
		
		MOVL    ACC,XAR0			; ACC = XAR0 = i
		SUBB    ACC,#16				; ACC = i = i - 16
		
		MOVL    XAR0,#table         ; XAR0 = &table[0]
		ADDL	@XAR0,ACC  			; XAR0 = &talbe[i]
		MOV     ACC,*XAR0++ << 16	; ACC = table[i] << 16
		MOVL    @XAR4,ACC			; XAR4 = L_y
		
		SUB     AH,*XAR0 			; AH = tmp = table[i] - table[i+1]
		
		MPY     P,T,@AH             ; ACC = tmp * a * 2
		MOVL    ACC,P << PM			
		SUBL    @XAR4,ACC  			; XAR2 = L_y = L_y - tmp * a * 2
		
		MOVL    ACC,@XAR4
		MOV  	T,@AR3				; Store exp in T
		ASRL    ACC,T               ; ACC = Denormalized L_y
				       
        LRETR

⌨️ 快捷键说明

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