资源描述:
《12和13:DSP原理及应用——第5章TMS320C54x的汇编语言程序设计(第12次课)(讲稿)》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
1、第5章TMS320C54x的汇编语言程序设计5.1概述5.2堆栈的使用方法5.3控制程序5.4算术运算程序5.1概述汇编语言源程序格式助记符指令一般包含4个部分:[标号][:]助记符[操作数][;注释](1)标号—所有汇编指令和大多数汇编伪指令前面都可以带有标号;必须从第一列开始书写;最多32个字符;由字母、数字、下划线和$组成,且不能以数字开头;分大小写;冒号不属于标号名;没有标号的源语句第一列必须为空格、星号或分号。(2)助记符—不能从第一列开始,否则被认为是标号;指令助记符一般用大写;汇编伪指令一般为小写,且以“.”开头。(3)操作数—操作数列表,可以是
2、常数、符号或表达式。操作数间需用“,”号隔开;三种前缀形式:#,*,@。(4)注释—用“*”号或“;”号开头。汇编语言源程序格式数据类型举例二进制10011000B,01111010b(最多16位)八进制226q,1001Q,0124(多达6位)十进制1,2,1024(不超过65535)十六进制0DH,123H,0X89,0x0D(多达4位)浮点数1.786e9(浮点数仅在C语言使用)字符常数‘a’,’b’…字符串“example”常数与字符串类型含义标号符号地址(可作为.global,.ref,.def的操作数)局部标号$n,name?(临时性的标号,可通过
3、.newblock,.sect,.text,.data,.include,.copy取消定义和复位)符号常数.set,.struct/.tag/.endstruct(提高可读性)预定义符号常数$,寄存器符号,其他…替代符号符号替代变量,.asg“high”,AR2(可重新定义)标号:只掌握标号和符号常数!!举例:1、defABC,abc,Abc(注:ABC、abc、Abc是3个不同的标号)2、符号常数的定义:.set等同于单片机中的EQU、BIT伪指令!!序号符号运算操作求值顺序1+-~!取正、取负、按位求补、逻辑负从右至左2*/%乘法、除法、求模从左至右3+
4、-加法、减法从左至右4^指数从左到右5<<>>左移、右移从左至右6<<=小于、小于等于从左至右7>>=大于、大于等于从左至右8!==不等于、等于从左至右9&按位与运算从左至右10∧按位异或运算从左至右11
5、按位或运算从左至右汇编语言表达式有效定义表达式先定义,再引用,合乎逻辑矣!!5.2堆栈的使用方法堆栈操作要点总结:1、子程序调用及返回、中断及返回以及使用堆栈操作指令时将涉及到堆栈的使用。2、压栈时指针先减,SP-1,再压入数据;注:压入数据时,堆栈从高地址向低地址增长。3、出栈时,先弹出数据后,再SP+1。注:如要用堆栈,必须先设置,后使用。5.2堆栈的使
6、用方法堆栈操作示例:.title"shiyan2b.asm".mmregs.defstartsize.set100STACK.usect“STK”,size.bsslength,10H主程序文件:.textstart:STM#STACK+size,SPLD#-8531,ASTM#length,AR1MVMMSP,AR7loop:STLA,*+AR7(-1)BANZloop,*AR1-end:Bend.end思考:1、分析这段程序堆栈区会有多少个“DEAD”?2、如何实现堆栈区100个单元全部数据变为“DEAD”?3、如何改写主程序,用其它指令实现该程序的功能?
7、这条指令模拟先减一再入栈的过程分类指令说明无条件分支转移B[D]用该指令指定的地址加载PCBACC[D]用累加器的低16位指定的地址加载PC条件分支转移BC[D]若满足指令给定条件,用该指令指定的地址加载PCBANG[D]若当前选择辅助寄存器不等于0,用该指令指定的地址加载PC远程分支转移FB[D]用该指令指定的地址加载PC和XPCFBACC[D]用累加器的低23位指定的地址加载PC和XPC5.3控制程序分类指令说明无条件调用CALL[D]将返回的地址压入堆栈,并用该指令指定的地址加载PCCALA[D]将返回的地址压入堆栈,用累加器A或B指定的地址加载PC条件
8、调用CC[D]如果满足指令给定条件,将返回的地址压入堆栈,并用该指令指定的地址加载PC远程调用FCALL[D]将XPC和PC压入堆栈,并用该指令指定的地址加载PC和XPCFCALA[D]将XPC和PC压入堆栈,用累加器的低23位指定的地址加载PC和XPC5.3控制程序分类指令说明无条件返回RET[D]将堆栈顶部的返回地址加载到PC。RETE[D]将堆栈顶部的返回地址加载到PC,并使能可屏蔽中断。RETF[D]将RTN寄存器中的返回地址加载到PC,并使能可屏蔽中断。条件返回RC[D]如果满足指令给定条件,将堆栈顶部的返回地址加载到PC。远程返回FRET[D]将堆
9、栈顶部的值弹出加载到XPC,将堆栈中下