sinx.asm

来自「这里面有很多dsp应用程序源码」· 汇编 代码 · 共 55 行

ASM
55
字号
******************************************************
* 		用泰勒级数开展开式计算一个角度的正弦值 	     *
*sin(x)=x(1-x*x/2*3(1-x*x/4*5(1-x*x/6*7(1-x*x/8*9))))*
******************************************************
	.title	"sinx.asm"
	.mmregs
	.def	start
STACK:	.usect	"STACK",10
start:	STM	#STACK+10,SP
	LD	#d_x,DP
	ST	#6487H,d_x			;x-->d_x
	CALL	sin_start
end:	B	end
sin_start:
	.def	sin_start
d_coeff	.usect	"coeff",4
	.data
table:	.word	01C7H		;c1=1/(8*9)
	.word	030BH			;c2=1/(6*7)
	.word	0666H			;c3=1/(4*5)
	.word	1556H			;c4=1/(2*3)
d_x	.usect	"sin_vars",1
d_squr_x .usect	"sin_vars",1
d_temp	.usect	"sin_vars",1
d_sinx	.usect	"sin_vars",1
c_1	.usect	"sin_vars",1
	.text
	SSBX	FRCT
	STM	#d_coeff,AR5
	RPT	#3
	MVPD	#table,*AR5+
	STM	#d_coeff,AR3
	STM	#d_x,AR2
	STM	#c_1,AR4
	ST	#7FFFH,c_1
	SQUR	*AR2+,A			;A=x^2
	ST	A,*AR2				;(AR2)=x^2
	||LD	*AR4,B			;B=1
	MASR	*AR2+,*AR3+,B,A	;A=1-x^2/72,T=x^2
	MPYA	A				;A=T*A=x^2(1-x^2/72)
	STH	A,*AR2				;(d_temp)=x^2(1-x^2/72)
	MASR	*AR2-,*AR3+,B,A	;A=1-x^2/42(1-x^2/72),T=x^2(1-x^2/72)
	MPYA	*AR2+			;B=x^2(1-x^2/42(1-x^2/72))
	ST	B,*AR2				;(d_temp)=x^2(1-x^2/42(1-x^2/72))
	||LD	*AR4,B			;B=1
	MASR	*AR2-,*AR3+,B,A	;A=1-x^2/20(1-x^2/42(1-x^2/72))
	MPYA	*AR2+			;B=x^2(1-x^2/20(1-x^2/42(1-x^2/72)))
	ST	B,*AR2				;(d_temp)=B
	||LD	*AR4,B			;B=1
	MASR	*AR2-,*AR3+,B,A	;A=1-x^2/6(1-x^2/20(1-x^2/42(1-x^2/72)))
	MPYA	d_x				;B=x(1-x^2/6(1-x^2/20(1-x^2/42(1-x^2/72))))
	STH	B,d_sinx			;sin(theta)
	RET
	.end
		

⌨️ 快捷键说明

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