📄 syn_filt.asm
字号:
*****************************************************************************
** Description: Syn_filt() in file.c **
** **
** Inputs **
** **
** xar7--Word16 *a **
** xar1---Word16 *x
** xar3---Word16 *mem 11 **
** ar0---Word16 lg 0x0028
** ar4---Word16 update **
** Outputs: **
** xar3---word16 *mem
** xar2---Word16 *y **
** **
** **
**
**
** **
** Temporary:
** xar4---Word16 *tmp
** xar5---Word16 *yy
** ar6---Word16 i
** **
** Return value : xar2 **
** **
** Attribute : Cycles: 19139 Pm: 83 **
** Modified Registers:xar0-xar7,acc,t,p **
** **
** Programmer : Zhang Xin **
*****************************************************************************
.global _Syn_filt
.ref _buffer1
.ref _buffer2
.ref _buffer3
_Syn_filt:
push xar4 ;储存update的值
movl xar4,#_buffer3+800 ;----tmp[80]
movl xar5,@xar4
mov ar6,#9
dec @ar0 ;(lg-1)
push xar2
push xar3
push xar0
_Loop_75:
zapa
mov al,*xar3++
mov *xar5++,al
banz _Loop_75,ar6--
subb xar3,#10
_Loop_82:
mov ar6,#9
zapa
mac p,*xar1++,*xar7
addl acc,@p<<pm
movl xar3,acc ;xar3中保存s
_Loop_85:
addb xar7,#1
mov t,*xar7
mpy acc,t,*--xar5
lsl acc,#1
subl xar3,acc
banz _Loop_85,ar6--
subb xar7,#10
addb xar5,#10
movl acc,xar3
sb _L1,LT ;讨论左移时的溢出问题
sb _L2,UNC
_L1:
and acc,#0xf000<<16
cmp ah,#0xf000
sb _L3,EQ
sb _L4,UNC
_L2:
and acc,#0xf000<<16
cmp ah,#0x0000
sb _L3,EQ
sb _L5,UNC
_L4:
mov ah,#0x8000
mov al,#0x0000
sb _L6,UNC
_L5:
mov ah,#0x7fff
mov al,#0xffff
sb _L6,UNC
_L3:
movl acc,xar3
lsl acc,#3
_L6:
add acc,#0x0800<<4
mov *xar5++,ah
banz _Loop_82,ar0--
addb xar4,#10
pop xar0
mov pl,@ar0
inc pl ;pl=lg
_Loop_93:
mov al,*xar4++
mov *xar2++,al
banz _Loop_93,ar0--
pop xar3
pop xar2
pop xar4
cmp @ar4,#0
sb _Loop_end,EQ
movl xar5,@xar2 ;储存y的指针
mov ar6,#9
sub @pl,#10 ;(lg-10)
mov acc,@pl
addl xar2,acc ;y的指针下移(lg-10)位
_Loop_103:
mov al,*xar2++
mov *xar3++,al
banz _Loop_103,ar6--
movl xar2,@xar5 ;恢复y原始指针
subb xar3,#10 ;恢复men原始指针
_Loop_end:
LRETR
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -