- 1、本文档共95页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
DSP第七章
第七章 汇编语言程序 设计 1、 程序的控制与转移 利用程序的控制与转移可执行分支转移、循环控制和子程序操作。常用的这类指令为: 分支转移类 子程序调用 子程序返回 B next CALL sub RET BACC src CALL src BC next CC sub RC cnd 通过分支转移指令改写PC,可以改变程序的流向。子程序调用指令将一个返回地址压入堆栈,执行返回指令时复原。 例:计算 主要程序部分为: .title “example1.asm” .mmregs STACK .usect “STACK”, 10H .bss x,4 .bss y,1 .def start .data table: .word 10,20,3,4 .text 本例中用AR2作为循环计数器,设初值为3,共执行4次加法。也就是说,应当用迭代次数减1后加载循环计数器。 编程时还经常用到数据与数据的比较,这时可采用比较指令CMPR。该指令用于测试AR1~AR7与AR0的比较结果,如果所给定的测试条件成立,则TC位置1,此后条件分支转移指令就可以根据TC位的状态进行分支转移。由CMPR所比较的数据都是无符号操作数。 例:比较操作后条件分支转移。 STM #5,AR1 STM #10,AR0 loop: … … *AR1+ … … CMPR LT,AR1;AR1AR0? BC loop,TC ? 2、 堆栈的使用 C54x提供一个用16位堆栈指针(SP)寻址的软件堆栈。当向堆栈压入数据时,堆栈从高地址向低地址增长。堆栈指针是减在前、加在后,即先SP-1再压入数据,先弹出数据后SP+1。 如果程序中要用到堆栈,必须先进行设置,其方法为: size .set 100 stack .usect “STK”,size STM #stack+size, SP 保留空间的高地址(#stack+size)赋给SP,作为栈底。 自定义未初始化段STK究竟定位在数据RAM中的什么位置,应当在链接器命令文件中规定。 设置好堆栈之后,就可以使用堆栈了,例如: CALL pmad ;(SP)-1→SP, (PC)+2→TOS ;pmad→PC RET ;(TOS)→PC, (SP)+1→SP .data table: .word 10,26,23 .text start: STM #0,SWWSR STM #STACK+10H,SP STM #x,AR1 RPT #2 MVPD table, *AR1+ CALL SUMB end: B end SUMB: LD @x,A ADD @y,A SUB @w,A STL A,@z .end 例:y=x1?a1+x2?a2。 LD @x1,T MPY @a1,B LD @x2,T MAC @a2,B STL B,@y STH B,@y+1 上述例子说明如何求解加、减法和求解直线方程以及计算一个简单的乘积和,所用指令均为单周期指令。 4、 重复操作 前面已讲过循环操作指令BANZ,可用来进行重复操作。这里再介绍三条比该指令快得多的指令。 1.重复执行单条指令: 重复指令RPT或RPTZ允许重复执行紧随其
文档评论(0)