14第五章汇编语言编程_第1页
14第五章汇编语言编程_第2页
14第五章汇编语言编程_第3页
14第五章汇编语言编程_第4页
14第五章汇编语言编程_第5页
已阅读5页,还剩31页未读 继续免费阅读

付费下载

下载本文档

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

文档简介

1、第五章 DSP汇编语言编程5.1 程序的控制与转移1、利用BANZ指令进行循环操作 在程序设计时,经常需要重复执行某一段程序。这时可以利用BANZ(指定辅助寄存器不为0时转移)指令来实现。 例5-1 主要程序如下: .mmregs.bss x, 5 ;为变量x预留5个单元存储空间.bss y, 1 ;为变量y预留1个单元存储空间STM #x, AR1 ;将x变量的首地址存到AR1中STM #4, AR2 ;将(累加次数-1)放在AR2中 STM #y, AR3LD #0, A ;累加器A清0 loop: ADD *AR1+, A ;把AR1内容为地址的数据加到累加器A ;AR1内容加1BANZ

2、 loop,*AR2- ;如果AR2不为0跳转到loop执行 ; AR2内容减1STLA, *AR3 ;如果AR2=0,执行该指令,将A (15-0)存 ;到单元y中。2、利用CMPR指令进行比较操作 在设计程序时,有时需要进行数据与数据的比较,C54x具有专门的比较指令CMPR。CMPR是测试所规定的辅助寄存器(AR1-AR7)与AR0的比较结果,如果所给定的测试条件成立,则 TC位置1。然后驱动条件分支转移指令。这时所有比较的数据都是无符号操作数。 例5-2 比较操作后条件分支转移 指定的ARx寄存器(x=1-7)与AR0比较,测试条件成立,TC置1 .mmregs STM #5, AR1

3、 ;立即数5存到AR1中 STM #10, AR0 ;立即数10存到AR0中 loop: MAR *AR1+ ;修改AR1的内容,使(AR1)+1 CMPR LT, AR1 ;如果AR1sp,SP减1后压入数据 ; (pc)+2-TOS ,CALL指令字长是两个字,其下面 ;跟着的返回地址是PC+2,所以把 PC+2压入栈顶。 ;pmad-pc 转到pmad地址执行RET ;(TOS)-PC, (SP)+1-SP 自定义的未初始化段“预留堆栈区STACK”究竟定位在哪个存储区需要在连接命令文件中规定:5.3 加、减法和乘法运算 在数字信号处理中,乘法和加减法运算是非常普遍的,本节将举例说明此类

4、程序的编写方法。例5-4 计算z=x + y - w例5-5 计算y= mx + b(求解直线方程) 将m送到T寄存器,计算mx的乘积,然后再加上b。例5-6 计算 y=x1*a1+x2*a2 前面几个例子说明了加、减法,求解直线方程和简单乘法是怎样实现的,所有的指令都是单周期指令。例5-7 求 的四项中的最大值,并放在累加器A中例5-8 求 的四项中的最大值,并存入指定的存储单元中。 5.4 重复操作 上面提到过BANZ,如果当前辅助寄存器ARx不为0则转移,是一条很好用的循环操作指令。DSP还有专门的重复操作指令使程序的运行更快。 RPT(重复执行下条指令) RPTZ(累加器清0,并重复下

5、条指令) RPTB(块重复指令)1、单条指令重复执行 * 重复指令只需取指一次,进行循环比BANZ效率高 * 可以重复执行n次,指令中计数值设为n-1 * 重复操作使多周期指令(MAC(1-2)、MVDK(2)和MVPD(3)等)变成单周期指令 * 重复操作期间,CPU不响应中断(RS除外),当HM=0时,遇到HOLD信号,CPU会继续重复操作。例5-9 对一个数组进行初始化2、 程序块重复执行 * 程序块重复操作指令RPTB(4)将重复操作的范 围扩大到任意长度的循环回路,循环开销为0 * 循环起始地址(RSA)就是RPTB指令的下一行地 址,循环结束地址(REA)由RPTB指令的操作数 规

6、定 * 块重复操作前,必须先将迭代次数加载到BRC (块重复计数器) * RPTB指令可以响应中断程序块重复执行例5-10 对数组x5的每一个元素都加15.5 数据块的传送C54x有10条数据传送指令:EAR寻址DAR寻址C54x数据传送指令的特点如下: 传送速度比加载和存储指令要快; 传送数据不需要通过累加器; 可以寻址程序存储器; 与RPT指令相结合(重复时,这些指令都变成单周 期指令)实现数据块传送。例5-11 数据块传送的汇编程序5.6 双操作数乘法 C54x片内的多总线结构,允许在一个机器周期内通过两个16位数据总线寻址两个数据或系数。1、双操作数运算的特点: * 单周期内通过C总线

7、和D总线寻址两个数据 * 用间接寻址方式获得操作数,且只能用AR2AR5 * 占用程序空间小 * 运行速度快2、双操作数乘法指令规定了一个程序存储器绝对地址,指令多一个字,执行时间需要3个周期N为循环迭代次数,单操作数运算块循环需要3N个周期 双操作数运算块循环需要2N个周期所以迭代次数越多,节省的机器周期数也越多3、双操作数乘法编程与优化 例5-13:编制求解 的程序段 单操作数运算 双操作数运算例5-13的优化: 例5-13中,利用了双操作数指令进行乘累加运算,完成N项乘累加需要2N个机器周期。如果将硬件乘加器单元、多总线和循环操作结合在一起,可以形成一个优化的乘累加程序。完成一个N项乘累

8、加的操作,只需要N+2个机器周期。5.7 长字运算与并行运算1、长字运算 C54x有5条指令用来完成32位长操作数的运算: 长操作数在存储器的排列方法 在长字指令中,“DST src, Lmem” 每次存储一个32位数要用E总线2次,需要2个机器周期;其他指令都是单字单周期指令,在一个周期内同时利用C总线和D总线,得到32位操作数。 长操作数指令中的一个重要问题,就是高16位和低16位操作数在存储器中的排列问题。 指令中给出的存取地址总是指操作数的高16位。 长操作数在存储器的排列方法有两种: * 偶地址排列法-高字节加1寻址低字节 * 奇地址排列法-高字节减1寻址低字节偶地址排列法和奇地址排

9、列法的区别: 对于数据6CACBD90h,如果指令中给出的 地址是0100h 偶地址排列法 0100h 存放数据 6CACh 0101h 存放数据BD90h 奇地址排列法 00FFh 存放数据BD90h 0100h 存放数据6CACh建议采用偶地址排列法偶地址对齐(C54x 的.long和 .float命令自动实现偶地址对齐)双精度变量的定义:.bss symbol, size in word ,blocking flag ,alignment flag.bss 为symbol预留存储空间;symbol 段标号,指向该段第一个单元地址; size in word 预留存储空间大小;blocking flag 如果非0,汇编器将size连续排放,保留空间不会跨越数据 页边界;alignment flag 如果非0,汇编器按照长字偶地址对齐来分配size个字。例5-14:长字运算与标准运算的比较计算: z32 = x32 + y322、并行运算 C54x能够同时利用D总线和E总线实现并行运算,其中D总线用来执行加载或算术运算,E总线用来保存先前的结果。 并行运算的指令有4种

温馨提示

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

最新文档

评论

0/150

提交评论