|
2)汇编语言编程
用汇编语言计算正弦值,一般采用泰勒级数展开的方法。角度正弦值的泰勒级数展开式如下:(见图3)
其中:x为弧度值。
注意:
l x从0~1,原因是CPU寄存器ST1中的FRCT位为1,CPU处于小数模式。
l 程序文件中所有标号左对齐。
l 编译器默认的程序起始标号_c_int00。
3)汇编程序如下:
.mmregs ;伪指令,定义C54x寄存器符号
.def _c_int00 ;伪指令,声明在当前模块中定义的标号
.def sin_start
;;;;;;;;;;;;;;;;;"coeff"段开始;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
d_coff .sect "coeff"
.word 01c7h ;1/72 *(215-1) Q15格式
.word 030bh ;1/42 *(215-1)
.word 0666h ;1/20 *(215-1)
.word 1556h ;1/6 *(215-1)
;;;;;;;;; 预留中间运算结果存储空间段;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
d_x .usect “sin_vars”,1
;伪指令,在 "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段开始;;;;;;;;;;;;;;;;;;;;;;;;;;;
.text
_c_int00: CALL sin_start
sin_start:
SSBX FRCT ; ST1中的FRCT位置1
STM #d_coff,AR3
STM #d_x,AR2
STM #C_1,AR4
LD #d_x, DP
ST #06487h,d_x ; input x = PI/4
ST #7fffh,C_1
SQUR *AR2+,A ; A = x^2
ST A,*AR2 ; AR2 = x^2
|| LD *AR4,B ; B = C_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 = A = 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
|| LD *AR4,B
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))
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 ; d_sinx = sin(x)
RET
.end
;;;;;;;;;;;;;;;;;.text段结束;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
4)算法分析
l 运算速度:CCS主界面选择
Profile->Enable Clock,启动时钟分析 Profile->View Clock,观察分析结果
C语言执行时间(见图4)
汇编语言执行时间(见图5)
l 代码长度:Profile->Start New Sessions
输入name_profile ,--〉Range 分析程序代码长度。 |
|