《第三章-dsp的软件结构》由会员分享,可在线阅读,更多相关《第三章-dsp的软件结构(174页珍藏版)》请在金锄头文库上搜索。
1、第三章 DSP的软件结构,Introduction,汇编语言程序编写方法 TMS320C54x的寻址方式 TMS320C54x指令的表示方法 TMS320C54x的指令系统 汇编伪指令,汇编程序语法,TMS320的汇编程序包含汇编指令(伪指令,assembler directives)、汇编语言指令(assembly language instructions)、宏指令(macro directives)和注释(comments)。,汇编程序源程序格式,label: mnemonic operand list ;comment 标号: 助记符 操作数 ;注释SYM1 .set 2 ;符号SYM
2、1=2 Begin: LD #SYM1, AR1 ;将2装入AR1,汇编程序语法,所有的语句必须由语句标号、空格、*号或 ;号开头。,语句标号不是必须的,如果用,就必须在第一列。,语句中的各部分之间,由一个或多个空格分开。,注释不是必须的。注释可以从第一列的 * 号或 ;号开头;如果不是从第一列开始,就必须用 ;号开头。,语句标号,由字母、数字、_、$组成,最多不超过32个字符,对大小写敏感,第一个字符不能是数字。后跟 :。,助记符,助记符不允许从第一列开始,否则被认为是语句标号。,助记符可以是机器指令(如ABS,MPYU等)、伪指令(如.data, .list, .set等)、宏指令(如.m
3、acro, .var, .mexit等)和宏调用。,操作数,操作数可以是常数、符号或表达式。当操作数多于一个时,用逗号分开。 汇编器允许指定常数、符号或表达式作为地址、立即数或间接地址。操作数前缀规定如下: #前缀:表示操作数为立即数。如:Label:ADD #123,B ;表示将操作数123(十进制)和累加器B中的内容相加 *前缀:操作数为间接地址。使用操作数的内容作为地址。如:Label:LD *AR4,A ;操作数*AR4为间接地址,将AR4中的内容作为地址,然后将该地址的内容装入到指定的累加器A,常数,二进制常数(如01B或01b) 八进制常数(如10Q或10q) 十进制常数(如23)
4、 十六进制常数(如78H或78h) 字符常数(如A或b) 字符串(如“sample program”),符号,符号用于作标号、常数和替代符号。符号名可长达200个字符,可由A-Z、a-z、0-9、$、_组成,且第一个字符不能是数字,符号对大小写敏感。符号仅在定义它的汇编程序中有效,除非用.global或.def伪指令声明为外部符号。 例:K .set 1024,表达式,表达式是一个常数、符号、或用算术运算符连接起来的常数或符号。表达式的值的范围为-32768到32767 例:X .set 50hsym1 .set 100h+X,可以用在表达式中的运算符,优先级,符号,含义,() +、-、! *
5、、/、% +、- 、= =、!= & |,括弧内的表达式最先计算 一元加、减、反码、逻辑非 乘、除、模运算 加、减 左移、右移 小于、小于等于、大于、大于等于 等于、不等于 按位与 按位异或 按位或,1 2 3 4 5 6 7 8 9,注释区,注释区可以从任何一列开始,可能包含ASCII字符和空格。注释打印在列表文件中,但不影响汇编工作。,TMS320C54x的寻址方式,立即寻址:指令中有一个固定的立即数; 绝对地址寻址:指令中有一个固定的地址(16位); 累加器寻址:按累加器的内容作为地址去访问程序存储器中的一个单元; 直接寻址:指令编码中含有的7位地址与DP或SP一起合成数据存储器中操作数
6、的实际地址; 间接寻址:通过辅助寄存器寻址; 存储器映射寄存器寻址:修改存储器映射寄存器中的值,而不影响当前数据页面指针DP和当前堆栈指针SP的值; 堆栈寻址:把数据压入或弹出系统堆栈。,寻址指令中用到的缩写符号及其含义,立即寻址,短立即数寻址(单字指令),在指令字中包括立即操作数,RPT #99 ;将下一条指令循环100次,LD #0h,DP ;将0装入数据页指针,ADD #0ffh,A ;将0ffh加给AccA,立即寻址,立即寻址,长立即数寻址,指令字的后一个字是立即数(双字指令),ADD #1234h,A ;将#1234h加给AccA,立即寻址,绝对地址寻址,数据存储器地址(dmad)寻
7、址:用一个符号或一个数来确定数据空间中的一个地址 例: MVKD sample,*AR5 ;sample所代表的就是一个dmad MVKD 1000h,*AR5 ;将数据存储器1000h单元的数据传送到由AR5所指的存储单元中 。 1000h代表的是一个dmad,绝对地址寻址,程序存储器地址(pmad)寻址: 用一个符号或一个数来确定程序地址空间中的一个地址 例: MVPD table,*AR5 table 所代表的就是一个pmad,绝对地址寻址,端口地址(PA)寻址 用一个符号或常数来确定I/O口地址,PORTR PA, Smem ;从PA单元端口读入一 个数据,传送到Smem所指的数据单元
8、中去,PORTW Smem, PA ;从Smem所指的数据单 元取出一个数据,传送到PA单元端口,PORTR FIFO, *AR5 ;把一个数从端口为 FIFO的I/O口传送到AR5所指向的数据单元,绝对地址寻址,*(lk)寻址用一个符号或一个表示16位地址的长立即数来确定数据存储器中的一个地址 例:LD *(BUFFER),A ;把地址为BUFFER的数据单元中的数据装到AccA中,累加器寻址,用累加器中的数作为一个地址,可用来对存放数据的程序存储器寻址:,READA Smem,WRITA Smem,READA,把累加器A所确定的程序存储器单元中的一个字,传送到数据存储器单元Smem中。,W
9、RITA,把数据单元Smem中的一个字,传送到累加器A确定的程序存储器单元。,直接寻址,TMS320C54的数据存储器分为512页,每页128字。设置一个数据页指针DP(Data Pointer),用9-bit指向一个数据页,再加上一个7-bit的页内偏移地址,形成16-bit的数据地址,LD #4,DP ;指向页4(0200h-027Fh),ADD 9h,A ;将数据页4中地址9h的数据加给AccA,直接寻址,间接寻址,8个辅助寄存器(AR0-AR7),由一个辅助寄存器指针(ARP 3-bit)来指定,辅助寄存器算术单元(ARAU)作16-bit无符号数运算,决定一个新的地址,装入辅助寄存器
10、中的一个,间接寻址,间接寻址,AR0-AR7的内容相当灵活,可以装入立即数,加上立即数,减去立即数;也可以从数据存储器装入地址;还可以作以下的变址寻址:,间接寻址,将该AR的内容加1或减1,再寻址(循环常用),将该AR的内容加上或减去AR0的内容,再寻址。,将该AR的内容逆向进位加上或减去AR0的内容,再寻址。,间接寻址,ADD *,8,A ;将当前辅助寄存器所指的地址里的数据,左移8-bit后加给AccA,ADD *+,8,A,AR4 ;数据左移加给AccA后,当前辅助寄存器加1,选择辅助寄存器AR4,ADD *+,8,A ;将当前辅助寄存器所指的地址里的数据,左移8-bit后加给AccA,
11、当前辅助寄存器加1.,间接寻址,ADD *0+,8,A ;执行加法后,将AR0的值加给当前辅助寄存器,ADD *BR0+,8,A ;执行加法后,将AR0的值加给当前辅助寄存器,但反向进位,正向进位与反向进位,1 0 0 1 0 0+ 1 0 0 + 1 0 0 1 0 0 0 0 1 0,位倒序寻址,AR0 = 100 AR1 = 000 按AR1寻址后,将AR0加给AR1,反向进位,位倒序寻址,原序 原地址 位倒序后地址 位倒序,0 000 000 0,1 001 100 4,2 010 010 2,3 011 110 6,4 100 001 1,5 101 101 5,6 110 011
12、3,7 111 111 7,存储器映射寄存器(MMR)寻址,存储器映射寄存器寻址用来修改存储器映射寄存器。存储器映射寄存器寻址既可以在直接寻址中使用,又可以在间接寻址中使用。 STM #8888h,T ;存储器映射寄存器寻址。T暂存器。,LDM MMR,dst ;将MMR加载到累加器MVDM dmad,MMR ;数据存储器向MMR传送数据MVMD MMR,dmad ;MMR向指定地址传送数据MVMM MMRx,MMRy ;MMRx向MMRy传送数据POPM MMR ;将数据从栈顶弹至MMRPSHM MMR ;将MMR数据压入堆栈STLM src,MMR ;累加器低位存入MMRSTM #lk,M
13、MR ;长立即数lk存入MMR,C54x共有8条指令可以进行MMR寻址。,存储器映射寄存器(MMR)寻址,堆栈寻址,系统堆栈用来在中断和子程序期间自动存放程序计数器。它也能用来存放额外的数据项或传递数据值。处理器使用一个16-bit的存储器映射寄存器堆栈指针(SP)来对堆栈寻址,它总是指向存放在堆栈中的最后一个元素。在压入堆栈操作时,SP先减1,然后将数据压入堆栈;在弹出堆栈操作时,数据从堆栈中弹出后,SP再加1.PUSH ;把一个数据存储器数据压入堆栈POP ;从堆栈中弹出一个数据至数据存 储器单元,堆栈寻址,C54x的堆栈是向低地址生长,并由16位堆栈指针SP管理。SP总是指向栈顶。,堆栈
14、寻址:利用SP指针,按照先进后出的原则进行寻址。,当进栈操作时,SP先减1,然后数据进入堆栈;,当出栈操作时,数据先出栈,然后SP加1。,0001,0010,0011,0100,0101,0110,0001,0010,0011,0100,0101,0110,0011,sp,操作前的堆栈和SP,0010,sp,操作后的堆栈和SP,X1,X1,X2,图、堆栈操作对堆栈指针的影响,堆栈寻址,采用堆栈寻址的指令:,PSHD Smem ;将Smem中的数据压入堆栈PSHM MMR ;将MMR中的数据压入堆栈POPD Smem ;将数据从栈顶弹至Smem中POPM MMR ;将数据从栈顶弹至MMR中,指令,TMS320C54x的指令集有近两百条指令,按功能分为如下几类:,算术运算指令,逻辑运算指令,