您好,欢迎访问三七文档
第4章TMS320C54xTMDSP汇编语言与混合编程第4章TMS320C54xTMDSP汇编语言与混合编程4.1概述4.2汇编语言4.3C54xDSP的C语言编程及混合编程习题第4章TMS320C54xTMDSP汇编语言与混合编程4.1概述C54xDSP软件设计的方法通常有三种。第一种,用C语言开发。TI公司提供了用于C语言开发的CCS(CodeComposerStudio)平台。该平台包括了优化ANSIC编译器,从而可以在C源程序级进行开发调试。这种方式的优点是可以增强软件的可读性,提高了软件的开发速度,方便软件的修改和移植。然而,C编译器无法实现在任何情况下都能够合理地利用DSP芯片的各种资源。此外,对DSP芯片的某些硬件控制,用C语言就不如用汇编程序方便,有些甚至无法用C语言实现。第4章TMS320C54xTMDSP汇编语言与混合编程第二种,用汇编语言开发。此种方式代码效率高,程序执行速度快,可以充分合理地利用芯片提供的硬件资源。然而,用汇编语言编写程序比较烦琐,可读性较差。另外,不同类别或不同公司的芯片汇编语言往往不同,因此可移植性较差。总之,用汇编语言开发产品,周期长,软件的修改和升级困难。第三种,C和汇编语言混合编程开发。采用混合编程的方法能更好地达到设计要求,完成设计任务。第4章TMS320C54xTMDSP汇编语言与混合编程4.2汇编语言4.2.1汇编语言源程序格式汇编语言是DSP应用软件的基础。编写汇编语言必须要符合相应的格式,这样汇编器才能将源文件转换为机器语言的目标文件。C54xDSP汇编语言源程序由源说明语句组成,包含汇编语言指令、汇编伪指令、宏伪指令和注释等,一般一句程序占据编辑器的一行。由于汇编器每行最多只能读200个字符,因此源语句的字符数不能超过200个,一旦长度超过200个字符,汇编器将自行截去行尾的多余字符并给出警告信息。如果截去的是注释,那么不影响程序的正确执行;但如果截去了语句的执行部分,则程序会编译出错或错误执行。第4章TMS320C54xTMDSP汇编语言与混合编程汇编语言语句格式可以包含4个部分:标号域、指令域、操作数域和注释域。以助记符指令为例,汇编语言语句格式如下:[标号][:]指令[操作数列表][;注释],其中[]内的部分是可选项。在编写汇编指令时,必须遵循以下格式:(1)语句必须以标号、空格、星号或分号开始。第4章TMS320C54xTMDSP汇编语言与混合编程(2)标号为可选项。若要使用标号,则必须从第1列开始。标号长度最多为32个字符,由A~Z,a~z,0~9,_和$等组成,但第1个字符不能为数字。标号后可以跟一个冒号(:),但并不作为标号的一部分。(3)每个域必须由1个或多个空格分开,制表符等效于空格。(4)注释是可选项,开始于第1列的注释须用星号或分号(*或;)标示,但在其他列开始的注释前面只能标分号。第4章TMS320C54xTMDSP汇编语言与混合编程(5)指令域一定不能从第1列开始,否则将被视为标号。指令域包括以下操作码之一:助记符指令、汇编伪指令(如.data,.set)、宏伪指令(如.var,.macro)和宏调用。(6)操作数域为操作数的列表,汇编器允许指定常数、符号或表达式作为地址、立即数或间接寻址。当操作数为立即数时,使用#符号作为前缀;操作数为间接寻址时,使用*符号作为前缀,将操作数的内容作为地址。第4章TMS320C54xTMDSP汇编语言与混合编程4.2.2汇编指令介绍C54xDSP按指令的功能分类,可分为如下四类:*数据传送指令;*算术运算指令;*逻辑运算指令;*程序控制指令。第4章TMS320C54xTMDSP汇编语言与混合编程表4.1指令集符号符号说明符号说明A累加器AnXC指令操作数。n=1表示1条指令执行;n=2表示2条指令执行ALU算术逻辑单元N指定RSBX/SSBX/XC指令中修改的状态寄存器。N=0,状态寄存器ST0;N=1,状态寄存器ST1AR辅助寄存器OVAST0中的累加器A的溢出标志ARx指定的辅助寄存器(0≤x≤7)OVBST0中的累加器B的溢出标志ARPST0中的辅助寄存器指针域,3位域指针指向当前的辅助寄存器(AR)OVdst目的累加器(A或B)的溢出标志ASMST1中的5位累加器移位模式域(-16≤ASM≤15)OVdst_与当前目的累加器相反的累加器的溢出标志B累加器BOVsrc源累加器(A或B)的溢出标志BRAFST1中的块重复有效标志OVMST1中的溢出模式位BRC块重复计数器PA16位立即数表示的端口地址(0≤PA≤65535)第4章TMS320C54xTMDSP汇编语言与混合编程续表一符号说明符号说明BITC4位值,用于确定位测试指令对指定数据存储器的哪一位进行测试PAR程序地址寄存器C16ST1中的双16位/双精度算术模式位PC程序计数器CST0中的进位位pmad16位立即数表示的程序存储器地址(0≤PA≤65535)CC2位的条件代码Pmem程序存储器操作数CMPTST1中的兼容模式位PMST处理器模式状态寄存器CPLST1中的编译模式位prog程序存储器操作数cond条件执行指令所用的条件[R]舍入(凑整)选项[d],[D]延迟方式的选项rnd舍入DAB地址总线RC循环计数器DARDAB地址寄存器RTN在RETF[D]指令中使用的快速返回寄存器dmad16位立即数表示的数据存储器地址(0≤dmad≤65535)REA块循环尾地址寄存器第4章TMS320C54xTMDSP汇编语言与混合编程续表一Dmem数据存储器操作数RSA块循环起始地址寄存器DPST0中的9位数据存储器页指针域SBIT4位域指示在RSBX/SSBX/XC指令中修改的状态寄存器位数(0≤SBIT≤15)dst目的累加器(累加器A或B)SHFT4位指示的移位数(0≤SHFT≤15)dst_与当前目的累加器相反的累加器。若dst=A,则dst_=B;若dst=B,则dst_=ASHIFT5位指示的移位数(-16≤SHIFT≤15)EABE地址总线Sind使用间接寻址的单访问数据存储器操作数EAREAB地址寄存器Smem16位单访问的数据存储器操作数extpmad23位立即数表示的程序存储器地址SP堆栈指针FRCTST1中的分数模式位src源累加器(A或B)hi(A)累加器A中的高16位(31~16位)ST0,ST1状态寄存器0,状态寄存器1HMST1中的保持模式位SXMST1中的符号扩展模式位IFR中断标志寄存器T暂存寄存器INTMST1中的中断屏蔽位TCST0中的测试/控制标志位K小于9位的短立即数TOS堆栈栈顶k33位立即数(0≤k3≤7)TRN转换寄存器k55位立即数(0≤k5≤7)TST寄存器中位(5~0)确定的位移数第4章TMS320C54xTMDSP汇编语言与混合编程续表二符号说明符号说明k99位立即数(0≤k9≤7)uns无符号数1k16位长立即数XFST1中的外部标志状态位Lmem使用长字寻址的32位单访问数据存储器操作数XPC程序计数器的扩展寄存器mmrMMR存储器映射寄存器Xmem在双操作数和一些单操作数指令中使用的16位双访问数据存储器操作数MMRxMMRy存储器映射寄存器,AR0~AR7或SPYmem在双操作数指令中使用的16位双访问数据存储器操作数()寄存器或存储单元包含的内容#立即数寻址时常数的前缀[]表示可选项‖并行指令第4章TMS320C54xTMDSP汇编语言与混合编程1.数据传送指令数据传送指令把源操作数从源存储器中传送到目的操作数指定的存储器中。C54xDSP的数据传送指令包括装载指令、存储指令、条件存储指令、并行装载和存储指令、并行装载和乘法指令、并行存储和加/减法指令、并行存储和乘法指令、混合装载和存储指令。第4章TMS320C54xTMDSP汇编语言与混合编程1)装载指令装载指令是取数或赋值指令,将存储器内容或立即数赋给目的寄存器,共7条指令,如下所示。(1)DLD语法:助记符方式表达式方式DLDLmem,dstdst=dbl(Lmem)dst=dual(Lmem)执行方式:ifC16=0Then(Lmem)→dstElse(Lmem(31-16))→dst(39-16)(Lmem(15-0))→dst(15-0)受SXM的影响。第4章TMS320C54xTMDSP汇编语言与混合编程功能描述:该指令只把32bit的长操作数Lmem装入到目的累加器dst中。C16的值决定了所采用的方式:C16=0指令以双精度方式执行。Lmem装入到dst中。C16=1指令以双16bit方式执行。Lmem的高16bit装入到dst前24bit中;同时,Lmem的低16bit装入到dst的低16bit中。第4章TMS320C54xTMDSP汇编语言与混合编程例4.1DLD*AR3+,BAR30000000000B01000066665555B0102BeforeInstructionAfterInstructionDataMemory66660100H66660100H55550101H55550101H因为该指令是一个长操作指令,所以AR3在执行后加2。第4章TMS320C54xTMDSP汇编语言与混合编程(2)LD语法:助记符方式表达式方式①LDSmem,dst①dst=dbl(Lmem)dst=dual(Lmem)②LDSmem,TS,dst②dst=SmemTS③LDSmem,16,dst③dst=Smem16④LDSmem[,SHIFT],dst④dst=Smem[SHIFT]⑤LDXmem,SHIFT,dst⑤dst=Xmem[SHIFT]⑥LD#K,dst⑥dst=#K⑦LD#1k[,SHIFT],dst⑦dst=#1k[SHIFT]⑧LD#1k,16,dst⑧dst=#1k16⑨LDsrc,ASM[,dst]⑨dst=srcASM⑩LDsrc[,SHIFT][,dst]⑩dst=src[SHIFT]第4章TMS320C54xTMDSP汇编语言与混合编程执行过程:①(Smem)→dst②(Smem)TS→dst③(Smem)16→dst④(Smem)SHIFT→dst⑤(Xmem)TS→dst⑥K→dst⑦1kSHIFT→dst⑧1k16→dst⑨(src)ASM→dst⑩(src)SHIFT→dst第4章TMS320C54xTMDSP汇编语言与混合编程在所有累加器装入操作中都会受到SXM影响,在带有SHIFT或ASM移位的装入操作中只受OVM的影响;在带有SHIFT或ASM移位的装入指令中影响Ovd(或当dst=src时影响OVsrc)。功能描述:把一数据存储器值或一立即数装入累加器(dst或当没有确定dst时为src),并支持各种不同的移位。另外,指令支持带移位的累加器到累加器的搬移。第4章TMS320C54xTMDSP汇编语言与混合编程例4.2LD*AR1,A0000000000ABeforeInstruction0SXMAfterInstruction000000ABCDA0SXM0200AR10200AR1DataMemory0200HABCDABCD0200H第4章TMS320C54xTMDSP汇编语言与混合编程例4.3LD*AR1,A0000000000A1SXMFFFFFFFEDCA1SXM0200AR10200AR1BeforeInstructionAfterInstructionDataMemory0200HFEDCFEDC0200H第4章TMS320C54xTMDSP汇编语言与混合编程例4.4LD*AR3+,16,A0000000000BBeforeInstruction1SXMAfterInstructionFFFFFEDC00B1SXM0200AR10200AR18T8TDataMemory0200HFEDCFEDC0200H第4章TMS320C54xTMDSP汇编语言与混合编程00000000
本文标题:DSP指令集
链接地址:https://www.777doc.com/doc-3538549 .html