chebps.asm
来自「基于TMS320F2812的AMR+RS编解码+OFDM调制解调源程序。是sta」· 汇编 代码 · 共 116 行
ASM
116 行
*****************************************************************************
** Description: Chebps() in az_lpc.c **
** **
** Inputs **
** **
** ar6---Word16 x **
** xar2---Word16 f[] **
** ar7---Word16 n **
** **
** Outputs: **
** **
** Return value : ah **
** **
** Attribute : Cycles:420 Pm: 47 **
** Modified Registers: acc,p,t,ar0,ar1,xar3-5 **
** **
** Programmer : YANG zhiwei **
*****************************************************************************
.global _Chebps
_Chebps:
mov acc,#0x0100
lsl acc,#16
movl xar5,acc ;b2_h = 256,b2_l = 0;
zapa
mpy p,ar6,#512 ;p = x * 512
mov ar0,#1 ;i = 1
mpya p,*+xar2[ar0],#8192 ;acc = L_mult (x, 512),p = f[1] * 8192
addl acc,p<<pm
lsr al,1 ;L_Extract( acc ) to b1
movl xar4,acc
_loop_77:
inc ar0 ;i++
bar _line_93,ar0,ar7,eq ;i = n ,jump to _line_93
;movl acc,xar4 ;acc = b1_h,b1_l
mov ar1,ah
zapa
mov t,ar6 ;t = x
mpya p,t,ar1
mpya p,t,ar4
movh t,p
add acc,t<<1 ;Mpy_32_16 (b1_h, b1_l, x)
lsl acc,#1
movl xt,xar5 ;t = b2_h
;push xar5
push ar5
mov ar5,#0x8000
mpy p,t,ar5
;mpy p,t,#0x8000
;pop xar5
pop ar5
addl acc,p<<Pm ;L_mac (t0, b2_h, (Word16) 0x8000)
mpy p,ar5,#1
subl acc,p<<pm ;L_msu (t0, b2_l, 1)
mpy p,*+xar2[ar0],#8192
addl acc,p<<Pm ;L_mac (t0, f[i], 8192)
lsr al,1
movl xar3,acc ;L_Extract (t0, &b0_h, &b0_l)
movl xar5,xar4 ;/* b2 = b1; */
movl xar4,xar3 ;/* b1 = b0; */
bf _loop_77,unc ;jump to _loop_77
_line_93:
;movl acc,xar4 ;acc = b1_h,b1_l
mov ar1,ah
zapa
mov t,ar6 ;t = x
mpya p,t,ar1
mpya p,t,ar4
movh t,p
add acc,t<<1 ;Mpy_32_16 (b1_h, b1_l, x)
movl xt,xar5 ;t = b2_h
;push xar5
push ar5
mov ar5,#0x8000
;mpy p,t,#0x8000
mpy p,t,ar5
;pop xar5
pop ar5
addl acc,p<<Pm ;L_mac (t0, b2_h, (Word16) 0x8000)
mpy p,ar5,#1
subl acc,p<<pm ;L_msu (t0, b2_l, 1)
mpy p,*+xar2[ar0],#4096
addl acc,p<<Pm ;L_mac (t0, f[i], 4096)
sbf _end,eq ;if ( acc = 0 ) ,jump to _end
bf _orig_pos,gt ;if (acc > 0),jump to _orig_pos
lsl acc,#6 ;else,N = 0,negative
bf _end,lt ;if ( N < 0 ),sign not changed ;else orig neg
mov ah,#0x8000
;movb al,#0
bf _end,unc
_orig_pos:
lsl acc,#6
bf _end,gt ;if ( N > 0 ),sign not changed
mov ah,#0x7fff
;mov al,#0xffff
_end:
LRETR
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?