资源描述:
《汇编语言程序设计DSP技术与应用实例第3版》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、第6章汇编语言程序设计6.1程序的控制与转移TMS320C54x具有丰富的程序控制与转移指令,利用这些指令可以执行分支转移、循环控制及子程序操作。基本的程序控制指令如表6-1所示。表6-1基本的程序控制指令分支转移指令执行周期子程序调用指令执行周期子程序返回指令执行周期Bnext4BACCsrc6BCnext,cond5/3CALLsub4CALAsrc6CCsub,cond5/3RET5RCcond5/31.条件算符条件分支转移指令或条件调用、条件返回指令都用条件来限制分支的转移、调用和返回操作。条件算符分成两组,每组组内还有分类。第1组:EQNEQLEQGEQLTG
2、TOVNOV第2组:TCNTCCNCBIONBIO选用条件算符时应当注意以下3点:•第1组:组内两类条件可以进行与/或运算,但不能在组内同一类中选择两个条件算符与/或。当选择两个条件时,累加器必须是同一个。例如,可以同时选择AGT和AOV,但不能同时选择AGT和BOV。•第2组:可从组内3类算符中各选一个条件算符与/或,但不能在组内同一类中选两个条件算符与/或。例如,可以同时测试TC、C和BIO,但不能同时测试NTC和TC。•组与组之间的条件只能进行或运算。2.循环操作BANZ在程序设计时,经常需要重复执行某段程序,利用BANZ(当辅助寄存器不为0时转移)指令执行循环计
3、数和操作是十分方便的。SUM:STM#x,AR3STM#4,AR2loop:ADD*AR3+,A;程序存储器BANZloop,*AR2-STLA,@y3.比较操作CMPR编程时,经常需要数据与数据进行比较,这时利用比较指令CMPR是很合适的。CMPR指令测试所规定的AR寄存器(AR1~AR7)与AR0的比较结果。如果所给定的测试条件成立,则TC位置1,然后,条件分支转移指令就可根据TC位的状态进行分支转移了。注意,所有比较的数据都是无符号操作数。STM#5,AR1STM#10,AR0loop:......*AR1+......CMPRLT,AR1BCloop,TC6.2
4、堆栈的使用方法TMS320C54x提供一个用16位堆栈指针(SP)寻址的软件堆栈。当向堆栈中压入数据时,堆栈从高地址向低地址增长。堆栈指针是减在前、加在后,即先SP1再压入数据,先弹出数据后SP+1。如果程序中要用到堆栈,则必须先进行设置,方法如下:size.set100stack.usect"STK",sizeSTM#stack+size,SP上述语句在数据RAM空间开辟一个堆栈区。前两句在数据RAM中自定义一个名为STK的保留空间,共100个单元。第3句将这个保留空间的高地址(#stack+size)赋给SP,作为栈底,参见图6-1。至于自定义未初始化段STK究竟
5、定位在数据RAM中的什么位置,应当在链接器命令文件中规定。数据存储器0STK堆栈的设置size.set100stack.usect"STK",sizeSTM#stack+size,SP堆栈的用法压入操作:SP先减1后,再将数据压入堆栈中弹出操作:数据弹出后,再将SP加1…stack可用栈区SP→最后用的单元已用栈区65535…图6-1堆栈设置堆栈之后,就可以使用堆栈了,例如:CALLpmad;(SP)-1→SP,(PC)+2→TOS;pmad→PCRET;(TOS)→PC,(SP)+l→SP堆栈区应开辟多大?这需要按照以下步骤来确定:①先开辟一个大堆栈区,且用已知数填充
6、。②运行程序,执行所有的操作。③暂停,检查堆栈中的数值如下图。④用过的堆栈区才是实际需要的堆栈空间。1.加减法【例6-4】计算z=x+yw。SUMB:LD@x,AADD@y,ASUB@w,ASTLA,@zRET.end计算结果:数据寄存器地址存储内容十进制数x0060H000AH10y0061H001AH26w0062H0017H23z0063H000DH136.3加减法运算和乘法运算2.乘法【例6-5】计算y=mx+b。SU:LD@m,TMPY@x,AADD@b,ASTLA,@yRET.end计算结果:数据寄存器地址存储内容十进制数m0060H0003H3x0061
7、H000FH15b0062H0014H20y0063H0041H656.4重复操作1.重复执行单条指令重复指令RPT或RPTZ允许重复执行紧随其后的那一条指令。如果要重复执行n次,则重复指令中应规定计数值为n1。由于重复的指令只需要取指一次,与利用BANZ指令进行循环相比,效率要高得多。【例6-9】对数组x[5]={0,0,0,0,0}进行初始化。.bssx,5或者STM#x,AR1LD#0H,ARPT#4STLA,*AR1+或者.bssx,5STM#x,AR1RPTZ#4STLA,*AR1+2.块程序重复操作块程序重复操作RPTB将重