DSP原理及应用PPT教程-第五章 DSP的汇编指令.ppt_第1页
DSP原理及应用PPT教程-第五章 DSP的汇编指令.ppt_第2页
DSP原理及应用PPT教程-第五章 DSP的汇编指令.ppt_第3页
DSP原理及应用PPT教程-第五章 DSP的汇编指令.ppt_第4页
DSP原理及应用PPT教程-第五章 DSP的汇编指令.ppt_第5页
已阅读5页,还剩37页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第五章 tms320c55x系列dsp的汇编指令,1、高速数字信号处理中常采用汇编语言编程。 2、汇编语言中的两种指令集 助记符指令集:有助于记忆的符号来表示指令。 代数指令集:类似于代数表达式,运算关系清楚明了。 注意:dsp的软件开发工具只支持单一的指令形式,不支持助记符指令和代数指令的混合形式。 3、术语、符号和缩写见p93的表51 4、运算符见表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 tc1 bset tc1 ; set tc1 bclr 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 #0xe300,*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,tc1 2、比特域的抽取与扩展 例1:bfxtr #0606h,ac0,ac1 比特域的抽取,将0606h非零位对应的ac0中的比特抽出来,依次放到ac1的lsb中,0x0040h 0x0060h (100 0000) and(110 0000)=(010 0000)!=0,0x0606h =0000 0110 0000 0110 ac0(150)=0000 0100 1111 1111 ac1(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 ac

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论