因为dsp有汇编语言部分,所以有必要再温习一下汇编。TMS320C54x提供7中基本寻址方式。
1、立即数寻址:指令中有一个固定的立即数。例如 LD #10,A,将立即数10传送至累加器A。主要用于初始化。
2、绝对地址寻址:指令中有一个固定的地址(16位)。例如 STL A,*(y),将累加器低16位存放到变量y所在的存储单元中。利用16位地址寻址存储单元。
3、累加器寻址:按累加器的内容作为地址去访问程序存储器中的一个单元。例如 READA x,将累加器A作为地址读程序存储器,并存入变量x所在的数据存储器单元。
4、直接寻址:指令编码中含有的7位地址与DP或SP一起合成数据存储器中操作数的实际地址。例如 LD @x,A,将DP+x的低7位地址的内容传给累加器A。利用数据页制作和堆栈指针寻址。
5、间接寻址:通过辅助寄存器寻址。例如 LD * AR1,A,将AR1的内容传给A。利用辅助寄存器作为地址指针。
6、存储器映射寄存器寻址:修改存储器映射寄存器中的值,而不影响当前数据页面指针DP和堆栈指针SP的值。例如 LDM ST1,B,将ST1的内容装入累加器B。用于快速寻址存储器映射寄存器。
7、堆栈寻址:把数据压入或弹出系统堆栈。例如 PSHM AG。
其中,间接寻址有几种特殊的语法:
1、循环寻址:在卷积、相关和FIR等运算中,都要求存储器中设置一个循环缓冲区,即一个滑动窗口。对一个以8为模的循环寻址中,指针第一次移动是1,2,3,4,5,6,7->8,第二次则是2,3,4,5,6,7->8->1,第三次则是3,4,5,6,7->8->1
->2;依次下去直至达到规定的循环次数。例如 LD *+AR1(8)%,A。
2、位倒序寻址:用于FFT运算中,FFT要求输入倒序,输出顺序,或者输入顺序,输出倒序。使用时,AR0存放点数的一半,ARx指向存放数据的单元。
例如:RPT #15
PORTW *AR2 + 0B,PA
这些汇编指令系统按功能分类:
1、算术指令:
ADD,SUB,MPY(乘法),MAC(乘加),MAS(乘减),DADD、DSUB(双精度指令),ABS,FIRS(对称有限冲击响应滤波器),SQDRT(两点间距离平方)。
2、AND,OR,XOR,ROL(移位),BITF(测试指令)。
3、程序控制指令:B、BC(分支指令),CALL(调用指令),INTR、TRAP(中断指令),RET(返回),RPT(重复指令),FRAME、POPD(堆栈操作指令),IDLE(保持空闲直到中断发生),NOP(空操作)。
4、装入和储存指令:LD,ST,CMPS(条件储存指令),||并行指令,MVDD(数据存储器传送),PORTR、PORTW(端口输入输出)、READA、WRITA。
5、单个循环指令,它们引起下一条指令重复执行,重复次数等于指令的其中 一个操作数+1,该次数存在重复计数寄存器RC中。
具体的指令解释以及常用符号可以参考文档《c54xx系列DSP汇编指令详解》。
原文地址:http://blog.csdn.net/hunterlew/article/details/41487305