📄 lsfwt.asm
字号:
*****************************************************************************
** Description: Lsf_wt() in lsfwt.c **
** **
** Inputs: **
** *XAR2---Word16 *lsf, : LSF vector **
** **
** Outputs: **
** *XAR3---Word16 *wf : square of weighting factors **
** **
** Return value : **
** **
** Attribute : Cycles: 882 Pm: 29 **
** Modified Registers: AR1,XAR2,XAR3,xar4 **
** ACC,P,T **
** @_buffer1 **
** **
** Programmer : ZHOU Bei (ok! Mar 6th,2003) **
*****************************************************************************
.global _lsf_wt
.ref _buffer1
_lsf_wt:
PUSH XAR3 ; Temp save srart addr of wf
MOVL XAR4,XAR2 ; XAR4=XAR2=lsf
ADDB XAR2,#1
MOV AL,*XAR2++ ; wf[0]=lsf[1]
MOV *XAR3++,AL ; wf++,lsf++
MOV AR1,#7 ; wf[i]=lsf[i+1]-lsf[i-1] (i=1 to 8)
_LOOP_84:
MOV ACC,*XAR2++
SUB ACC,*XAR4++
MOV *XAR3++,AL
BANZ _LOOP_84,AR1--
MOV ACC,#4000H ; wf[9]=0.5-lsf[8]
SUB ACC,*XAR4
MOV *XAR3,AL
POP XAR3 ; Resume start addr of wf
MOV AR1,#9 ; Loop to operate on wf[i] (i=0 to 9)
_LOOP_91:
CMP *XAR3,#733H ;Compare wf[i] with 1843
B _LINE_101,GEQ
MPY P,*XAR3,#6E00H ; Branch for (wf[i] < 1843)
MOVH @_buffer1,P ; _buffer1=(wf[i]*28160)>>15
MOV ACC,#0D63H ; ACC=3427
SB _LINE_104,UNC ; Branch finished,jump to _LINE_104
_LINE_101: ; Branch for (wf[i]>=1843)
MOV ACC,#733H ; ACC=1843
SUB *XAR3,AL ; wf[i]=wf[i]-1843
MPY P,*XAR3,#1862H ; _buffer1=(wf[i]*6242)>>15
MOVH @_buffer1,P
_LINE_104:
SUB ACC,@_buffer1 ; ACC=ACC-_buffer1
LSL ACC,#3 ; ACC<<3
MOV *XAR3++,AL ; Save result to wf[i],i++
BANZ _LOOP_91,AR1-- ; Loop if AR1!= 0, AR1--
LRETR
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -