📄 build_code.asm
字号:
*****************************************************************************
** Description: build_code() in c2_9pf.c **
** **
** Inputs **
** **
** al ---Word16 subNr **
** xar2---Word16 codvec[] **
** xar3---Word16 dn_sign[] **
** xar4---Word16 Word16 h[] **
** **
** Outputs: **
** **
** xar5---Word16 cod[] **
** xar6---Word16 y[] **
** xar7---Word16 sign[] **
** **
** **
** Return value : pl **
** **
** Attribute : Cycles:3564 Pm: 96 **
** Modified Registers: all **
** **
** Programmer : Qi Ying **
*****************************************************************************
.include "trackTable.asm"
.global _build_code
.ref _buffer1
.ref _buffer2
.ref _buffer3
_build_code:
addb sp, #20
movl *-sp[2], xar4 ;*-sp[2]=h
movl *-sp[4], xar6 ;*-sp[4]=y
movl *-sp[6], xar7 ;*-sp[6]=sign
movl *-sp[10], xar3 ;*-sp[10]=dn_sign
mov pl, al ;pl=subNr
lsl al, #2
add pl, al
movl xar4, #trackTable
movl acc, xar4
add acc, pl
movl xar4, acc ;xar4=pt=&trackTable[add(subNr, shl(subNr, 2))
mov ar0, #39
_Line_304:
mov *xar5++, #0 ;cod[i]=0
banz _Line_304, ar0--
subb xar5, #40 ;xar5指回cod数组头
movb acc, #0
movl p, acc ;pl=indx,ph=rsign
mov ar0, #0 ;ar0=k
_Loop_310:
cmp ar0, #2
sb _Line_352, GEQ
movl xar3, *-sp[10] ;dn_sign[]
movz ar1, *+xar2[ar0] ;ar1=i
mov ar6, *+xar3[ar1] ;ar6=j
addB xar3, #100 ;xar3=_sign
mpy acc, ar1, #6554
lsl acc, #1 ;ah=index
mov ar7, ah ;ar7=index
mpy acc, ah, #5 ;al=extract_l(L_shr(L_mult(index, 5), 1))
mov *-sp[12], ar1 ;*-sp[12]=i
sub ar1, al ;ar1=track
cmp *+xar4[ar1], #0 ;*+xar4[ar1]=first
sb _Line_329, NEQ ;比较first与0
cmp ar0, #0 ;比较k与0
sb _Line_325, NEQ
mov ar1, #0
sb _Line_341, UNC
_Line_325:
mov ar1, #1
mov al, ar7
lsl al, #3
mov ar7, al ;index = shl(index, 3)
sb _Line_341, UNC
_Line_329:
cmp ar0, #0 ;比较k与0
sb _Line_334, NEQ
mov ar1, #0
mov al, ar7
add al, #64
mov ar7, al ;index = add(index, 64)
sb _Line_341, UNC
_Line_334:
mov ar1, #1
mov al, ar7
lsl al, #3
mov ar7, al ;index = shl(index, 3)
_Line_341:
cmp ar6, #0 ;比较j与0
sb _Line_345, LEQ
mov T, ar1 ;T=track
mov al, #1
lsl al, T
add ph, al ;rsign = add(rsign, shl(1, track))
movz ar1, *-sp[12] ;ar1=i
mov *+xar5[ar1], #8191
mov *+xar3[ar0], #32767 ;_sign[k] = 32767
sb _Line_350, UNC
_Line_345:
movz ar1, *-sp[12] ;ar1=i
mov *+xar5[ar1], #-8192
mov *+xar3[ar0], #-32767 ;_sign[k] =-32767
_Line_350:
mov al, ar7
add pl, al ;indx = add(indx, index)
inc ar0
sb _Loop_310, UNC
_Line_352:
movl xar7, *-sp[6] ;sign[]
movl acc, p
mov *xar7, ah ;*sign = rsign
movl xar6 , *-sp[4] ;xar6=y
movl acc, *-sp[2] ;h
sub acc, *+xar2[0] ;h - codvec[0]
movl xar4, acc ;xar4=p0
movl acc, *-sp[2] ;h
sub acc, *+xar2[1] ;h - codvec[1]
movl xar2, acc ;xar2=p1
mov ar0, #0 ;ar0=i
_Loop_357:
cmp ar0, #40
sb _Line_364, GEQ
movb xar1, #0 ;xar1=s
mov T, *xar4++
mpy acc, T, *+xar3[0]
movl xar1, acc
mov T, *xar2++
mpy acc, T, *+xar3[1]
addl acc, xar1
lsl acc, #1
add acc, #0x0800<<#4
mov *+xar6[ar0], ah
inc ar0
sb _Loop_357, UNC
_Line_364:
subb sp, #20
LRETR
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -