DSP原理及应用PPT教程第五章 DSP的汇编指令.ppt
第五章 TMS320C55x系列DSP的汇编指令,1、高速数字信号处理中常采用汇编语言编程。2、汇编语言中的两种指令集助记符指令集:有助于记忆的符号来表示指令。代数指令集:类似于代数表达式,运算关系清楚明了。注意:DSP的软件开发工具只支持单一的指令形式,不支持助记符指令和代数指令的混合形式。3、术语、符号和缩写见P93的表514、运算符见表52,第五章 TMS320C55xDSP的汇编指令,5.1状态比特和执行条件,一条指令的执行可能会受到某些状态位的影响,也可能会改变某些状态位的值,这些状态位都在状态寄存器。,第五章 TMS320C55x DSP的汇编指令,1、40比特运算模式(M40)用于控制D单元的运行模式,会影响累加器溢出、进位标志等。M40=0时,D单元按32位运算模式,因此累加器溢出、进位、符号扩展和移位操作都以第31比特为准。M40=1时,D单元按40位运算模式,因此累加器溢出,进位,符号扩展和移位操作都以第39比特为准。BCLR M40;Clear M40 BSET M40;Set M40,第五章 TMS320C55x系列DSP的汇编指令,2、累加器溢出状态(ACOVx)当AC0AC3寄存器溢出时,目的累加器的溢出状态位ACOV03被置1。以下情况会清零ACOVx位 复位;CPU执行一个跳转,条件调用,条件返回或执行一条测试ACOVx的指令;通过BCLR指令清除;溢出位检测受ST1_55中的M40位影响,即:M40=0时:溢出位在第31位检测 M40=1时:溢出位在第39位检测,BCLR ACOV1;清零 BSET ACOV1;置位,第五章 TMS320C55x系列DSP的汇编指令,3、兼容模式(C54CM)C54CM=0:CPU工作于增强模式,只支持C55x的指令,C54CM=1:CPU工作于兼容模式,既支持C54x又支持C55x指令。BCLR C54CM;Clear C54CM(happens at run time)C54CM_off;Tell assembler C54CM=0 BSET C54CM;Set C54CM(happens at run time)C54CM_on;Tell the assembler C54CM=1,第五章 TMS320C55x系列DSP的汇编指令,4、进位标志(CARRY),CARRY表示是否有进位或借位发生,CARRY=0时,没有借位或进位发生。CARRY=1时,有借位或进位发生。位操作指令改变CARRY 进位标志的检测受ST1_55中的M40位影响 M40=0时:进位标志的检测与第31位相关 M40=1时:进位标志的检测与第39位相关,BCLR CARRY;Clear CARRY BSET CARRY;Set CARRY,第五章 TMS320C55x系列DSP的汇编指令,5、分数模式(FRCT)FRCT0:关闭小数模式 FRCT1:打开小数模式,BCLR FRCT;Clear FRCT BSET FRCT;Set FRCT,第五章 TMS320C55x系列DSP的汇编指令,6、中断模式(INTM)INTM0:允许所有可屏蔽中断 INTM1:关闭所有可屏蔽中断,BCLR INTM;Clear INTM BSET INTM;Set INTM,第五章 TMS320C55x系列DSP的汇编指令,7、测试/控制标志(TCx),主要用于保存某些测试指令的结果;可以作为指令执行的条件;举例:CMP AC1=T1,TC1;如果AC1=T1,那么TC11。,BCLR TC1;Clear TC1BSET TC1;Set TC1BCLR TC2;Clear TC2 BSET TC2;Set TC2,第五章 TMS320C55x系列DSP的汇编指令,可以作为指令执行的条件有:(1)累加器的值 ACx=#0 ACx!=#0 ACx#0 ACx=#0(2)溢出标志和进位标志 overflow(ACx)!overflow(ACx)CARRY!CARRY(3)辅助寄存器的值*ARx=#0*ARx!=#0*ARx#0*ARx=#0,第五章 TMS320C55x系列DSP的汇编指令,(4)临时寄存器的值(4个临时寄存器T0T3)Tx=#0 Tx!=#0 Tx#0 Tx=#0(5)测试/控制标志 两个测试/控制标志的状态以及它们的逻辑组合可以作为指令执行的条件:TCx(测试/控制标志为1)!TCx(测试/控制标志为0)TC1&TC2 TC1&!TC2!TC1&TC2!TC1&!TC2 TC1|TC2 TC1|!TC2!TC1|TC2!TC1|!TC2 TC1TC2 TC1!TC2!TC1TC2!TC1!TC2,第五章 TMS320C55x系列DSP的汇编指令,5.3 C55x指令的并行执行1、并行指令的分类 C55只支持有限的指令并行执行,能支持三种类型的指令并行。(1)隐含的或内置的单指令并行 一条指令同时执行两个不同的操作,用“:”来分隔指令的两个部分。MPY*AR0,*CDP,AC0:MPY*AR1,*CDP,AC1 这类指令是利用双MAC来实现的,C55x中,这视为一条单指令。,第五章 TMS320C55x系列DSP的汇编指令,(2)用户自定义的双指令的并行 这两条指令的并行是通过用户或C编译器定义的。两条指令同时执行两个操作,用并行符“|”区分并行执行的两条指令。例:MPYM*AR1,*CDP,AC1;D单元的一个MAC来完成|XOR AR2,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,所以不能并行。在实际编程时,只要指令满足这三条基本规则,即可写成并行方式,然后进行编译。如果编译有错,则可参照pp.77-78的8条详细规则进行检测。,第五章 TMS320C55x系列DSP的汇编指令,5.4 TMS320C55x DSP的汇编指令TMS320C55x DSP的汇编指令按操作分为以下6类 算术运算指令 比特操作指令 扩展辅助寄存器操作指令 逻辑操作指令 MOVE操作指令 程序控制指令,一条指令的属性包括:语法(Syntax)执行的操作 操作数 相关的状态位 是否有并行使能位 长度(Size)执行周期(Cycles)在流水线(Pipeline)上的执行阶段 在哪个功能单元执行(Executed)是否可以重复执行等,第五章 TMS320C55x系列DSP的汇编指令,例如:-|ADD uns(*AR3),CARRY,AC1,AC0|No|3|1|X|D-ALU|-说明:NO:不能并行执行 3:指令的长度为3字节 1:周期为1 X:在X(执行)流水线阶段处理D ALU:在D单元ALU执行。执行结果:AC0=(*AR3)+CARRY+AC1状态位:Affected by CARRY,C54CM,M40等 Affects ACOVx,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)状态位,举例:ADD uns(*AR3),CARRY,AC1,AC0,第五章 TMS320C55x系列DSP的汇编指令,2、减法指令 常规减法:在D单元或A单元执行减法操作。条件减法:在D单元中执行,先执行减法,然后根据结果进行移位。条件加/减:在D单元根据TC1或TC2的状态执行加/减运算。(1)语法;(2)操作数;(3)状态位例1(常规减法):BCLR CARRY;BORROW=1 AMOV#010000h,XAR1 MOV#0300h,AR1 MOV#0200h,*AR1 MOV#0300h,AC0 SUB*AR1,BORROW,AC0,AC1;AC1AC0(*AR1)BORROW=00FFh,第五章 TMS320C55x系列DSP的汇编指令,3、乘法指令(1)语法、(2)操作数、(3)状态位 常规乘法(MPY):在D单元的一个MAC中执行乘法运算。乘加和乘减运算(MAC/MAS):在D单元的一个MAC中执行乘法,然后执行加法或减法运算。双乘加/减(Dual-MAC/S):利用D单元的两个MAC同时执行两个乘法或乘加/乘减运算。例1(常规乘法)MPY AC0,AC1说明:AC1=AC0(3216)AC1(3216),第五章 TMS320C55x系列DSP的汇编指令,4、双16比特算术指令:(1)语法、(2)操作数、(3)状态位 在D单元中利用其ALU的双16比特模式,同时执行(并行)两个16比特算术运算,包括加减、减加、两个加和两个减运算。例:BSET M40 BSET SXMD MOV#4000h,T1 AMOV#010000h,XAR1 MOV#0200h,AR1 MOV#0 xE300,*AR1 ADDSUB T1,*AR1,AC1,加减形式的双16比特算术运算,并行执行加法和减法运算加法:AC1(3216)=(*AR1)+T1 减法,AC1(150)=(*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+127,第五章 TMS320C55x系列DSP的汇编指令,8、隐含的并行指令:(1)语法、(2)操作数、(3)状态位 C55X支持的隐含的并行指令有:乘法存储指令 乘加存储指令 乘减存储指令 加法存储指令 减法存储指令 装载存储指令 乘加装载指令 乘减装载指令,9、专用算术运算指令 求绝对值、有限冲激响应 滤波FIR、最小均方LMS、归一化、二进制补码、舍入与饱和、平方差等。例(最小均方LMS):LMS*AR0,*AR1,AC0,AC1 执行前 执行后,第五章 TMS320C55x系列DSP的汇编指令,*AR0,ACOV0,AC1=AC1+(*AR0)*(*AR1)AC0=AC0+(*AR0)#16,第五章 TMS320C55x系列DSP的汇编指令,二、比特操作指令 比特域的比较指令 比特域的抽取与扩展指令 存储器比特位操作指令 寄存器比特位操作指令 状态比特的清零与置位 1、比特域的比较指令 BAND Smen,k16,TCx If(Smen)AND k16)=0)TCx=0 else TCx=1,第五章 TMS320C55x系列DSP的汇编指令,例:BAND*AR3,0060h,TC12、比特域的抽取与扩展例1:BFXTR#0606h,AC0,AC1 比特域的抽取,将0606h非零位对应的AC0中的比特抽出来,依次放到AC1的LSB中,0 x0040h 0 x0060h(100 0000)AND(110 0000)=(010 0000)!=0,0 x0606h=0000 0110 0000 0110AC0(150)=0000 0100 1111 1111AC1(150)=0000 0000 0000 1011,第五章 TMS320C55x系列DSP的汇编指令,3、存储器的比特位的操作 包括对存储器比特位的测试、清零、置位和取反操作。例1:BTST AC0,*AR0,TC1,比特测试,比特地址AC0(30)=8,TC1=(*AR0)的第八比特。,第五章 TMS320C55x系列DSP的汇编指令,例2:BTSTSET#8,*AR0,TC1 比特测试并置位,比特地址为8,所以TC1=(*AR0)的第八比特,然后对(*AR0)的第八比特置位。4、寄存器比特位的操作 寄存器比特位的测试、清零、置位和取反。例:BNOT AR1,T0,比特取反,比特地址AR1(30)=8,T0的第八比特取反后为0100h。,第五章 TMS320C55x系列DSP的汇编指令,5、状态比特位的清零与置位 对C55x的状态寄存器ST0ST3的比特位进行清零/置位操作。例1:BCLR#5,ST1_55 以5作为比特位地址,对ST1_55中的比特位5(C54CM)进行清零。例2:BSET C54CM;对ST1_55中的状态位字段C54CM置位,第五章 TMS320C55x系列DSP的汇编指令,三、扩展辅助寄存器操作指令 对扩展辅助寄存器XAR0XAR7、XSP、XSSP和XCDP进行修改操作。例:MOV AC0,XAR1 XAR1=AC0(220),第五章 TMS320C55x系列DSP的汇编指令,四、逻辑运算指令包括:按位与、按位或、按位异或、按位取反、比特计数、逻辑 移位和旋转。1、按位与/或/异或例:OR AC0#4,AC1 AC1=AC1 OR(AC0#4),第五章 TMS320C55x系列DSP的汇编指令,2、按位取反、比特计数、逻辑移位和旋转例1:NOT AC0,AC1;按位取反,AC1=not(AC0)例2:BCNT AC0,AC1,TC1,T1 比特计数,T1=(AC1 AND AC2)中1的个数,若为奇数,则TC1=1,第五章 TMS320C55x系列DSP的汇编指令,五、MOVE操作指令 累加器、临时寄存器或辅助寄存器的装载、存储和交换。存储器单元的数据移动 堆栈操作 CPU寄存器的装载、存储与数据移动1、累加器、临时寄存器或辅助寄存器的装载、存储和交换。例1:MOV*AR3+#16,AC1,累加器装载:AC1=(*AR3)#16AR3=AR3+1,第五章 TMS320C55x系列DSP的汇编指令,2、存储器单元的数据移动包括一个存储器单元与另一个存储器单元间的数据移动、向存储单元写入立即数、初始化存储器。例1:DELAY*AR3+完成的操作:*(AR3+1)=*AR3,AR3=AR3+1,第五章 TMS320C55x系列DSP的汇编指令,3、堆栈操作 包含弹出堆栈和压入堆栈例1:POP dbl(AC1)弹出堆栈:AC1(3116)=(SP),AC1(150)=(SP+1),AC1(3932)不变。SP=SP+2,第五章 TMS320C55x系列DSP的汇编指令,4、CPU寄存器的装载、存储与数据移动 CPU寄存器指的是专用的寄存器、如SP、SSP、BK(AR循环大小寄存器)、BSA(循环缓冲起始地址寄存器)等,对这些寄存器进行装载、存储和移动的指令。例:MOV T1,BRC1 把临时寄存器T1中的值装载到BRC1(块重复计数器1)和BRS1(BRC1 的备份寄存器),第五章 TMS320C55x系列DSP的汇编指令,六、程序控制指令 程序控制指令用于控制指令的执行顺序。跳转指令 调用与返回指令 重复指令 其它的控制指令:条件执行、空闲、空操作和软件复位等。,