第五章TMS320C55x系列DSP的汇编指令1、高速数字信号处理中常采用汇编语言编程。2、汇编语言中的两种指令集(1)助记符指令集:有助于记忆的符号来表示指令。(2)代数指令集:类似于代数表达式,运算关系清楚明了。注意:DSP的软件开发工具只支持单一的指令形式,不支持助记符指令和代数指令的混合形式。3、术语、符号和缩写见P93的表5-14、运算符见表5-2第五章TMS320C55xDSP的汇编指令5.1状态比特和执行条件一条指令的执行可能会受到某些状态位的影响,也可能会改变某些状态位的值,这些状态位都在状态寄存器。第五章TMS320C55xDSP的汇编指令1、40比特运算模式(M40)用于控制D单元的运行模式,会影响累加器溢出、进位标志等。M40=0时,D单元按32位运算模式,因此累加器溢出、进位、符号扩展和移位操作都以第31比特为准。M40=1时,D单元按40位运算模式,因此累加器溢出,进位,符号扩展和移位操作都以第39比特为准。BCLRM40;ClearM40BSETM40;SetM40第五章TMS320C55x系列DSP的汇编指令2、累加器溢出状态(ACOVx)当AC0~AC3寄存器溢出时,目的累加器的溢出状态位ACOV0~3被置1。以下情况会清零ACOVx位复位;CPU执行一个跳转,条件调用,条件返回或执行一条测试ACOVx的指令;通过BCLR指令清除;溢出位检测受ST1_55中的M40位影响,即:M40=0时:溢出位在第31位检测M40=1时:溢出位在第39位检测BCLRACOV1;清零BSETACOV1;置位第五章TMS320C55x系列DSP的汇编指令3、兼容模式(C54CM)C54CM=0:CPU工作于增强模式,只支持C55x的指令,C54CM=1:CPU工作于兼容模式,既支持C54x又支持C55x指令。BCLRC54CM;ClearC54CM(happensatruntime)C54CM_off;TellassemblerC54CM=0BSETC54CM;SetC54CM(happensatruntime)C54CM_on;TelltheassemblerC54CM=1第五章TMS320C55x系列DSP的汇编指令4、进位标志(CARRY)CARRY表示是否有进位或借位发生CARRY=0时,没有借位或进位发生。CARRY=1时,有借位或进位发生。位操作指令改变CARRY进位标志的检测受ST1_55中的M40位影响M40=0时:进位标志的检测与第31位相关M40=1时:进位标志的检测与第39位相关BCLRCARRY;ClearCARRYBSETCARRY;SetCARRY第五章TMS320C55x系列DSP的汇编指令5、分数模式(FRCT)FRCT=0:关闭小数模式FRCT=1:打开小数模式BCLRFRCT;ClearFRCTBSETFRCT;SetFRCT第五章TMS320C55x系列DSP的汇编指令6、中断模式(INTM)INTM=0:允许所有可屏蔽中断INTM=1:关闭所有可屏蔽中断BCLRINTM;ClearINTMBSETINTM;SetINTM第五章TMS320C55x系列DSP的汇编指令7、测试/控制标志(TCx)主要用于保存某些测试指令的结果;可以作为指令执行的条件;举例:CMPAC1==T1,TC1;如果AC1=T1,那么TC1=1。BCLRTC1;ClearTC1BSETTC1;SetTC1BCLRTC2;ClearTC2BSETTC2;SetTC2第五章TMS320C55x系列DSP的汇编指令可以作为指令执行的条件有:(1)累加器的值ACx==#0ACx!=#0ACx#0ACx=#0ACx#0ACx=#0(2)溢出标志和进位标志overflow(ACx)!overflow(ACx)CARRY!CARRY(3)辅助寄存器的值*ARx==#0*ARx!=#0*ARx#0*ARx=#0*ARx#0*ARx=#0第五章TMS320C55x系列DSP的汇编指令(4)临时寄存器的值(4个临时寄存器T0~T3)Tx==#0Tx!=#0Tx#0Tx=#0Tx#0Tx=#0(5)测试/控制标志两个测试/控制标志的状态以及它们的逻辑组合可以作为指令执行的条件:TCx(测试/控制标志为1)!TCx(测试/控制标志为0)TC1&TC2TC1&!TC2!TC1&TC2!TC1&!TC2TC1|TC2TC1|!TC2!TC1|TC2!TC1|!TC2TC1^TC2TC1^!TC2!TC1^TC2!TC1^!TC2第五章TMS320C55x系列DSP的汇编指令5.3C55x指令的并行执行1、并行指令的分类C55只支持有限的指令并行执行,能支持三种类型的指令并行。(1)隐含的或内置的单指令并行一条指令同时执行两个不同的操作,用“::”来分隔指令的两个部分。MPY*AR0,*CDP,AC0::MPY*AR1,*CDP,AC1这类指令是利用双MAC来实现的,C55x中,这视为一条单指令。第五章TMS320C55x系列DSP的汇编指令(2)用户自定义的双指令的并行这两条指令的并行是通过用户或C编译器定义的。两条指令同时执行两个操作,用并行符“||”区分并行执行的两条指令。例:MPYM*AR1+,*CDP,AC1;D单元的一个MAC来完成||XORAR2,T1;A单元的ALU来完成第五章TMS320C55x系列DSP的汇编指令(3)内置并行指令与用户自定义并行指令的混合形式在不引起资源冲突的情况下,将隐含并行的指令按用户自定义方式与另一条指令并行执行。例:MPY*AR0,*CDP,AC0;隐含的或内置的并行指令::MPY*AR1,*CDP,AC1||MOV#5,AR1;用户自定义并行第五章TMS320C55x系列DSP的汇编指令2、指令并行的规则只有满足以下三条基本规则,并行指令才可以使用,若非法使用并行指令,可能会导致不可预测的执行结果。规则1:指令长度要少于6个字节受I单元指令译码器的限制,只有两条指令长度不超过6字节的,才可以作为并行处理。[IBQ大小为64字节/译码器大小为6字节]规则2:没有硬件资源冲突如果两条指令不存在操作数、总线、内部交叉单元和寄存器之间的冲突,则可以并行。第五章TMS320C55x系列DSP的汇编指令规则3:并行指令含有两个数据存储器访问时,必须使用间接寻址模式。以上三条规则是基本规则,缺一不可。例如:MOV*AR,AC1;2个字节||ADD@var,AR2;3个字节两条指令访问两个数据存储单元,第二条指令没有使用间接寻址,不满足规则3,所以不能并行。在实际编程时,只要指令满足这三条基本规则,即可写成并行方式,然后进行编译。如果编译有错,则可参照书上详细规则进行检测。第五章TMS320C55x系列DSP的汇编指令5.4TMS320C55xDSP的汇编指令TMS320C55xDSP的汇编指令按操作分为以下6类算术运算指令比特操作指令扩展辅助寄存器操作指令逻辑操作指令MOVE操作指令程序控制指令一条指令的属性包括:语法(Syntax)执行的操作操作数相关的状态位是否有并行使能位长度(Size)执行周期(Cycles)在流水线(Pipeline)上的执行阶段在哪个功能单元执行(Executed)是否可以重复执行等第五章TMS320C55x系列DSP的汇编指令例如:------------------------------------------------------------------------------------|ADDuns(*AR3),CARRY,AC1,AC0|No|3|1|X|D-ALU|------------------------------------------------------------------------------------说明:NO:不能并行执行3:指令的长度为3字节1:周期为1X:在X(执行)流水线阶段处理D–ALU:在D单元ALU执行。执行结果:AC0=(*AR3)+CARRY+AC1状态位:AffectedbyCARRY,C54CM,M40等AffectsACOVx,ACOVy,CARRY第五章TMS320C55x系列DSP的汇编指令一、算术运算指令用于完成加减乘除等运算,按照功能可分成以下几类:加法指令减法指令:减法,条件减法,条件加/减乘法指令:乘法,乘加,乘减,双乘加/减双16比特算术指令比较运算指令:比较并求极值,最大/最小值,存储单元比较,寄存器比较移位指令:条件移位、带符号的移位。寄存器修改:辅助寄存器修改、堆栈指针SP修改隐含的并行指令专用指令:绝对值、归一化、有限冲激响应滤波FIR、最小均方LMS等第五章TMS320C55x系列DSP的汇编指令1、加法指令在D单元或A单元中执行加法运算。当有一个目的操作数为累加器ACx时,在D-ALU中执行。当目的操作数为辅助或临时寄存器时,在A-ALU中执行当目的操作数为Smen时,在D-ALU中执行当移位位数不是立即数16时(移位指令),在D单元的移位器中执行。(1)语法(2)操作数(3)状态位举例:ADDuns(*AR3),CARRY,AC1,AC0第五章TMS320C55x系列DSP的汇编指令2、减法指令常规减法:在D单元或A单元执行减法操作。条件减法:在D单元中执行,先执行减法,然后根据结果进行移位。条件加/减:在D单元根据TC1或TC2的状态执行加/减运算。(1)语法;(2)操作数;(3)状态位例1(常规减法):BCLRCARRY;BORROW=1AMOV#010000h,XAR1MOV#0300h,AR1MOV#0200h,*AR1MOV#0300h,AC0SUB*AR1,BORROW,AC0,AC1;AC1=AC0-(*AR1)-BORROW=00FFh第五章TMS320C55x系列DSP的汇编指令3、乘法指令[(1)语法、(2)操作数、(3)状态位]常规乘法(MPY):在D单元的一个MAC中执行乘法运算。乘加和乘减运算(MAC/MAS):在D单元的一个MAC中执行乘法,然后执行加法或减法运算。双乘加/减(Dual-MAC/S):利用D单元的两个MAC同时执行两个乘法或乘加/乘减运算。例1(常规乘法)MPYAC0,AC1说明:AC1=AC0(32~16)×AC1(32~16)ACOV1026000340000C000000010AC0AC1M40FRCT00260003400004800000010AC0AC1M40FRCT0ACOV1第五章TMS320C55x系列DSP的汇编指令4、双16比特算术指令:[(1)语法、(2)操作数、(3)状态位]在D单元中利用其ALU的双16比特模式,同时执行(并行)两个16比特算术运算,包括加-减、减-加、两个加和两个减运算。例:BSETM40BSETSXMDMOV#4000h,T1AMOV#010000h,XAR1MOV#0200h,AR1MOV#0xE300,*AR1ADDSUBT1,*AR1,AC1加减形式的双16比特算术运算,并行执行加法和减法运算加法:AC1(32~16)=(*AR1)+T1减法,AC1(15~0)=(*AR1)-T1第五章TMS320C55x系列DSP的汇编指令5、比较运算指令6、移位指令第五章TMS320C55x系列DSP的汇编指令7、寄存器的修改指令包括:辅助寄存器的修改、堆栈指针的修改。例1:AADD#255,AR0;辅助寄存器修改:AR0=AR0+255例2:AMAR*AR3+;辅助寄存器修改:指向存储单元的AR3加1例3:AADD#127,SP;堆栈指针修改,SP=SP+1271234AR01333AR01234AR31235AR31234SP12B3SP第五章TMS320C55x系列DSP的汇编指令8、隐含的并行指