📄 cor_h.asm
字号:
*****************************************************************************
** Description: cor_h() in cor_h.c **
** **
** Inputs **
** **
** xar1---Word16 h[] **
** xar3---Word16 sign[] **
** **
** Outputs: **
** **
** xar7---Word16 rr[][] **
** **
** **
** **
** Return value : none **
** **
** Attribute : Cycles: 134252 Pm: 128 **
** Modified Registers: all **
** **
** Programmer : Qi Ying **
*****************************************************************************
.global _cor_h
.ref _inv_sqrt
.ref _buffer1
.ref _buffer2
.ref _buffer3
_cor_h:
push xar7
movl xar7, xar1
movl xar4, #_buffer2+40 ;h2
ZAPA ;Zero ACC, P, OVC
mov al, #2
mov ah, #0 ;acc=s
;by skiff
nop
nop
nop
RPT #39 ;循环次数40
||SQRA *XAR7++
;||mac P, *xar7++, *xar7++
addl acc, p<<pm
pop xar7
movl xar5, acc ;xar5=s
sub ah, #32767 ;ah=j
cmp ah, #0
sb _Line_162, NEQ
mov ar0, #0 ;ar0=i
_Loop_157:
cmp ar0, #40
sb _Line_176, GEQ
mov al, *+xar1[ar0] ;h[i]
lsr al, #1
mov *+xar4[ar0], al ;h2[i]
inc ar0
sb _Loop_157, UNC
_Line_162:
mov al, #1
mov T, al
movl acc, xar5
lsrl acc, T ;s右移后放入acc
push xar3
push xar4
LCR _inv_sqrt ;acc=Inv_sqrt(s)
pop xar4
pop xar3
lsl acc, #7 ;ah=k
mpy acc, ah, #32440
lsl acc, #1
mov T, ah ;T=k
mov ar0, #0 ;ar0=i
_Loop_168:
cmp ar0, #40
sb _Line_176, GEQ
mpy acc, T, *+xar1[ar0] ;acc=k*h[i]
lsl acc, #10
add acc, #0x0800 << #4
mov *+xar4[ar0], ah ;h2[i]
inc ar0
sb _Loop_168, UNC
_Line_176:
movb xar6, #0 ;xar6=s
mov ar0, #0 ;ar0=k
mov ar5, #39 ;ar5=i
_Loop_178:
cmp ar0, #40
sb _Line_184, GEQ
mov T, *+xar4[ar0] ;h2[k]
mpy acc, T, T
lsl acc, #1
addl xar6, acc ;xar6=L_mac(s,h2[k],h2[k])
mpy acc, ar5, #40
add al, ar5 ;al=i*40+i
mov ar1, al ;ar1=i*40+i
mov T, ar5
inc T
mpy acc, T, ar5 ;al=i*(i+1)
lsr al, #1 ;al=i*(i+1)/2
sub ar1, al ;ar1=i*40+i-i*(i+1)/2
movl acc, xar6 ;s放入acc
add acc, #0x0800 <<#4
mov *+xar7[ar1], ah ;rr[i][i]=round (s)
inc ar0 ;k++
dec ar5 ;i--
sb _Loop_178, UNC
_Line_184:
mov ar5, #1 ;ar5=dec
_Loop_184:
cmp ar5, #40
sb _Line_197, GEQ
push ar5
movb xar6, #0 ;xar6=s
mov ar2, #39 ;ar2=j
mov al, #39
sub al, ar5 ;al=j-dec
mov ar0, al ;ar0=i
mov ar1, #0 ;ar1=k
_Loop_189:
cmp ar5, #40 ;比较dec+k与40
sb _Line_196, GEQ
movl acc, xar4
add acc, ar5
movl xar4, acc
mov T, *xar4 ;h2[k+dec]
sub acc, ar5
movl xar4, acc ;xar4指回数组头
mpy acc, T, *+xar4[ar1]
lsl acc, #1
addl acc, xar6
movl xar6, acc ;xar6=s
movl acc, xar3
add acc, ar2
movl xar3, acc
mov T, *xar3 ;sign[j]
sub acc, ar2
movl xar3, acc ;xar3指回数组头
mpy acc, T, *+xar3[ar0]
lsl acc, #1 ;ah=sign[i]*sign[j]
mov pl, ah ;pl=sign[i]*sign[j]
movl acc, xar6
add acc, #0x0800 <<#4 ;ah=round(s)
mov T, ah
mpy acc, T, pl ;acc=round(s)*sign[i]*sign[j]
lsl acc, #1
mov pl, ah ;pl=rr[][]
mpy acc, ar0, #40
add al, ar2 ;al=i*40+j
mov ph, al ;ph=i*40+j
mov T, ar0
inc T
mpy acc, T, ar0 ;al=i*(i+1)
lsr al, #1 ;al=i*(i+1)/2
sub ph, al ;ph=i*40+j-i*(i+1)/2
movl acc, xar7
add acc, ph
movl xar7, acc
spm #0
mov *xar7, p ;*xar7=pl
spm #1
sub acc, ph
movl xar7, acc ;xar7指回数组头
inc ar1 ;k++
inc ar5 ;(k+dec)++
dec ar0 ;i--
dec ar2 ;j--
sb _Loop_189, UNC
_Line_196:
pop ar5
inc ar5 ;dec++
sb _Loop_184, UNC
_Line_197:
LRETR
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -