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

📄 decode_2i40_9bits.asm

📁 基于TMS320F2812的AMR+RS编解码+OFDM调制解调源程序。是stand alone运行版本
💻 ASM
字号:
*****************************************************************************
** Description:     decode_2i40_9bits() in d2_9pf.c
**
** Inputs
**
**   	AR1:		Word16 subNr
**	 	AR2:		Word16 sign
**   	AR3:		Word16 index
**   	XAR4:	    Word16 &cod[0]
**
** Outputs:
**
**		&cod[0]
**
** Return value:
**
** 		none
**
** Attribute:   Cycles: 242      Pm: 50
**
** Modified Registers:  all                           
**                                                                         
** Programmer: Liu Yang
**
** Complete time: 2003 4 12
*****************************************************************************

		.global		_decode_2i40_9bits
		.ref		startpos
		.ref		L_SUBFR

_decode_2i40_9bits:

		; Decode the positions
		
		AND		AL,@AR3,#0x0040			; AL = index & 64
		ASR		AL,#6					; AL = j = shr((index & 64),6)
		AND		AH,@AR3,#0x0007			; AH = i = index & 7
		MOV		@AR5,AH					; AR5 = i
		
		; pos0 =i*5+startPos[j*8+subNr*2]
		
		LSL		AH,#2					; AH = shl(i, 2)
		ADD		@AR5,AH					; AR5 = i = i = add(i, shl(i, 2))
		LSL		AL,#3					; AL = shl(j, 3)
		MOV		AH,@AR1					; AH = subNr
		LSL		AH,#1					; AH = shl(subNr, 1)
		ADD		AL,@AH					; AL = add(shl(j, 3), shl(subNr, 1))
		MOV		ACC,@AL					; ACC = add(shl(j, 3), shl(subNr, 1))
		MOVL	XAR0,#startpos			; XAR0 = &starpos[0]
		ADDL	@XAR0,ACC				; XAR0 = &starpos[add(shl(j, 3), shl(subNr, 1))]
		MOV		AL,*XAR0				; AL = k = starpos[add(shl(j, 3), shl(subNr, 1))]
		ADD		@AR5,AL					; AR5 = pos[0] = add(i, k)
		
		MOV		AL,@AR3					; AL = index
		ASR		AL,#3					; AL = index = shr(index, 3)
		ANDB	AL,#0x0007				; AL = i = index & 7
		MOV		@AR6,AL					; AR6 = i

		; pos1 =i*5+startPos[j*8+subNr*2+1]
		
		LSL		AL,#2					; AL = shl(i, 2)
		ADD		@AR6,AL					; AR6 = i = add(i, shl(i, 2))
		ADDB	XAR0,#1					; XAR0 = &startpos[add(add(shl(j, 3), shl(subNr, 1)), 1)]		
		MOV		AL,*XAR0				; AL = k = startpos[add(add(shl(j, 3), shl(subNr, 1)), 1)]
		ADD		@AR6,AL					; AR6 = pos[1] = add(i, k)
		
		; Decode the signs  and build the codeword
		
		MOVL	XAR0,@XAR4				; XAR0 = &cod[0]
		NOP
		NOP
		RPT		#L_SUBFR-1				; cod[i] = 0
	  ||MOV		*XAR0++,#0
	  
	  	MOVL	ACC,@XAR4				; ACC = &cod[0]
	  	ADD		ACC,@AR5				; ACC = &cod[pos[0]]
	  	MOVL	@XAR0,ACC				; XAR0 = &cod[pos[0]]
	  	
	  	AND		AL,@AR2,#0x0001			; AL = i = sign & 1 
	  	MOV		AH,@AR2					; AH = sign
	  	ASR		AH,#1					; AH = shr(sign, 1)
	  	MOV		@AR2,AH					; AR2 = sign
	  	
		CMP		AL,#0					; if i != 0
		SB		B1,EQ
		MOV		*XAR0,#8191				; cod[pos[0]] = 8191
		SB		B2,UNC

B1:		MOV		*XAR0,#-8192			; else cod[pos[j]] = -8192

B2:		MOVL	ACC,@XAR4				; ACC = &cod[0]
	  	ADD		ACC,@AR6				; ACC = &cod[pos[1]]
	  	MOVL	@XAR0,ACC				; XAR0 = &cod[pos[1]]
	  	
	  	AND		AL,@AR2,#0x0001			; AL = i = sign & 1 
	  									; if i != 0
		SB		B3,EQ
		MOV		*XAR0,#8191				; cod[pos[0]] = 8191
		
		LRETR

B3:		MOV		*XAR0,#-8192			; else cod[pos[j]] = -8192

		LRETR

⌨️ 快捷键说明

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