📄 cosx.asm
字号:
******************************************************
* 用泰勒级数开展开式计算一个角度的正弦值 *
* cos(x)=1-x*x/2(1-x*x/3*4(1-x*x/5*6(x*x/7*8))) *
******************************************************
.title "cosx.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 cos_start
end: B end
cos_start:
.def cos_start
d_coeff .usect "coeff",4
.data
table: .word 0249H ;c1=1/(7*8)
.word 0444H ;c2=1/(5*6)
.word 0AABH ;c3=1/(3*4)
.word 4000H ;c4=1/(1*2)
d_x .usect "cos_vars",1
d_squr_x .usect "cos_vars",1
d_temp .usect "cos_vars",1
d_cosx .usect "cos_vars",1
c_1 .usect "cos_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/56,T=x^2
MPYA A ;A=T*A=x^2(1-x^2/56)
STH A,*AR2 ;(d_temp)=x^2(1-x^2/56)
MASR *AR2-,*AR3+,B,A ;A=1-x^2/30(1-x^2/56),T=x^2(1-x^2/56)
MPYA *AR2+ ;B=x^2(1-x^2/30(1-x^2/56))
ST B,*AR2 ;(d_temp)=x^2(1-x^2/30(1-x^2/56))
||LD *AR4,B ;B=1
MASR *AR2-,*AR3+,B,A ;A=1-x^2(1-x^2/30(1-x^2/56))
SFTA A,-1,A ;A右移一位即A除以2
NEG A
MPYA *AR2+ ;B=-x^2/2(1-x^2/12(1-x^2/30(1-x^2/56)))
MAR *AR2+
RETD
ADD *AR4,16,B ;B=1-x^2/2(1-x^2/12(1-x^2/30(1-x^2/56)))
STH B,*AR2 ;cos(theta)
RET
.end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -