wsin.asm

来自「文件为美军4800bps语音压缩编码标准在TI的DSP芯片TMS320C5X上的」· 汇编 代码 · 共 89 行

ASM
89
字号
;=================================
WSIN
	LDP #SIGNFLAG
	SACH SIGNFLAG
	ABS
	SACB
	LACC #1,15	;ACC=0X8000
	SFL
	SFL             ;accb=4l*0x8000l;
	EXAR
WSIN_1
	SBB		;while(acc>accb) acc-=accb; //>2*pi
	BCND WSIN_1,C
	ADDB
	EXAR
	SFR
	EXAR		;accb=2l*0x8000l;
	SBB
	BCND WSIN_2,C
;========;if(acc>(accb>>1)) {signflag=!signflag; acc=acc-(accb>>1);  }//>pi
	ADDB
	B WSIN_3
WSIN_2
	;PUSH
	SACL ACC_PUSH
	LACC SIGNFLAG
	CMPL
	SACL SIGNFLAG
	;POP
	LACC ACC_PUSH
WSIN_3
	EXAR
	SFR
	EXAR		;accb=0x8000l;
	SBB
	BCND WSIN_4,C
;========;if(acc>0x8000u) {acc=(accb>>1)-acc;  }//>pi/2
	ADDB
	B WSIN_5
WSIN_4
	ADDB
	SBB
	SBB
	NEG
WSIN_5
	BCND WSIN_END2,EQ
	SBB		;accb=0x8000l;
	BCND WSIN_END1,EQ
	NEG
			;else ta=wcos_1(0x8000u-acc);
	CALL WCOS1
	;PUSH
	SACL ACC_PUSH
	LACC SIGNFLAG
	BCND WSIN_6,LT
	;POP
	LACC ACC_PUSH
	RET
WSIN_6
	;POP
	LACC ACC_PUSH
	NEG
	RET
WSIN_END1
	LACC SIGNFLAG
	BCND WSIN_END1_1,LT
	LACC #7FFFH
	RET
WSIN_END1_1
	LACC #8000H
	RET
WSIN_END2
	LACL #0
	RET

;============================================
;	if(a<0) { signflag=!signflag; ta=-a; }
;	acc=ta*0x8000l; 	accb=4l*0x8000l;
;	while(acc>accb) acc-=accb; //>2*pi
;	if(acc>(accb>>1)) {signflag=!signflag; acc=acc-(accb>>1);  }//>pi
;	if(acc>0x8000u) {acc=(accb>>1)-acc;  }//>pi/2
;	if(acc==0x8000u) {if(signflag)ta=-0x8000l;
;			  else ta=0x7fff;}
;	else if(acc==0) ta=0;
;	     else ta=wcos_1(0x8000u-acc);
;	if(signflag) ta=-ta;
;	return ta;
;=================================

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?