当硬件执行指令时,寻找指令所指定的参与运算的操作数的方法——寻址方式。
根据程序的要求采用不同的寻址方式,可以有效地缩短程序的运行时间和提高代码执行效率。
C54x芯片的寻址方式可以分为两类:
● 数据寻址 ● 程序寻址
寻址方式 :
C54x有7种基本的数据寻址方式:
立即寻址:由指令提供一个操作数
绝对寻址:由指令提供一个操作数地址
累加器寻址:以累加器的内容为地址访问程序空间某单元
直接寻址:寻址地址为DP或SP的值加上指令提供的偏移量
间接寻址:利用辅助寄存器访问存储器
存储器映像寄存器寻址:用来改变映像寄存器,但不影响DP或SP的值
堆栈寻址:用来管理系统堆栈中的操作
即:
部分寻址缩略语:
(1)立即寻址
指令中含有执行指令所需的操作数。操作数紧随操作码存放在程序存储器中。
例如: LD #F180,A ;将立即数F180加载到A
立即数的数值形式:
① 短立即数。3、5、8、9位,单字指令;
② 长立即数。16位,双字指令。
特点:指令中含有一个固定的立即数,运行速度较快,但需占用程序存储空间,并且数值不能改变。
用途:用于表示常数或对寄存器初始化。
支持立即数的指令 :
注意:在立即寻址的指令中,应在数值或符号前面加一个“#”,表示是一个立即数,以区别于地址。
(2)绝对寻址
指令中含有所要寻找的操作数的16位存储单元地址。
16位地址表示形式:
① 地址标号,如:TABLE;
② 16位符号常量,如:89AB、1234。
特点:指令中包含一个固定的16位地址,能寻址所有数据存储空间,但运行速度慢,需要较大的存储空间。
用途:用于对速度要求较低的场合。
绝对寻址是利用16位地址来寻址操作数的存储单元。由于绝对地址代码的位数为16位,所以绝对地址寻址的指令至少应为2个字长。
绝对寻址有四种类型 :
① 数据存储器地址(dmad)寻址;
用于确定操作数存于数据存储单元的地址。 语法:使用一个程序标号或一个数字来指定数据空间的一个地址。
② 程序存储器地址(pmad)寻址;
用于确定程序存储器中的一个地址。 语法:使用一个符号或具体的数字来指定程序空间的一个地址。
③ 端口(PA)寻址;
用一个符号或一个数字来确定外部I/O端口的地址。
④ *(1k)寻址。
使用一个指定数据空间的地址来确定数据存储器中的一个地址。
语法:允许所有使用单数据存储器(Smem)寻址的指令去访问数据空间的任意单元,而不改变DP(数据存储器页指针)的值,也不用对AR(辅助寄存器)进行初始化。
(3)累加器寻址
将累加器的内容作为地址去访问程序存储单元,即将累加器中的内容作为地址,用来对存放数据的程序存储器寻址。
用途:用于完成程序存储空间与数据存储空间之间的数据传输。
(4)直接寻址
所要寻址的数据存储器16位地址是由基地址和偏移地址构成。
DP地址的范围是从0~511(29-1),将存储器分成512页。 7位dmad范围是从0~127,每页有128个可以访问的单元。
以DP为基准的直接寻址是由DP值确定是512页中的哪一页,由dmad确定是该页中的哪一个单元。
SP可以指向存储器中的任意一个地址。dmad可以指向当前页中具体的单元,从而允许访问存储器任意基地址中的连续的128个单元 。
直接寻址标识:
① 变量前加@,如@x;
② 在偏移量前加@,如@5。
利用直接寻址可以在不改变DP或SP的情况下,随机寻址128个存储单元中的任何一个单元。
直接寻址的优点:每条指令只需要一个字。
直接寻址特点:
① 所寻址数据存储器的16位地址是由DP或SP与7位偏移地址dmad构成;
② 可在单周期寻址128个单元;
③ 寻址速度快,能进行流水线并行操作。
用途:主要用于要求运算速度较快的场合。
注意:① 上述两种直接寻址方式是相互排斥的;② 采用DP寻址时,要注意数据所在的页面指针。
(5)间接寻址
是根据辅助寄存器(AR0~AR7)给出的16位地址进行寻址。
每一个辅助寄存器都可以用来寻址64K字数据存储空间中任何一个单元。
两个辅助寄存器算术运算单元(ARAU0和ARAU1) 可以根据辅助寄存器的内容进行操作,完成16位无符号数算术运算。
可完成以下操作:
① 用单指令对存储器进行16位数据的读操作或写操作;
② 用单指令可以完成对两个独立的数据存储单元的读操作;
③ 用单指令可以读和写两个连续的数据存储单元;
④ 用单指令可以在读一个数据存储单元的同时,向另一个存储单元进行写操作。分为:
单操作数寻址:
用来完成存储单元中16位单数据的读写操作。
指令格式:
位倒序寻址:
实现过程:
① 根据FFT算法进行转换,按转换顺序将X(0)、X(8) 、X(4)、…、 X(15)的转换结果存入数据存储器。
② 按照位码倒序的方法寻址,可将乱序的转换结果进行整序输出。
双操作数寻址:
用于完成执行2次读操作或者1次读和1次的并行存储操作(用‖表示)。这些指令代码都是1个字长,而且只能以间接寻址方式进行操作。
两个数据存储器操作数由Xmem和Ymem表示。
指令格式:
(6)存储器映像寄存器寻址
C54x共有8条指令可以进行MMR寻址。
LDM MMR,dst ;将MMR加载到累加器
MVDM dmad,MMR ;数据存储器向MMR传送数据
MVMD MMR,dmad ;MMR向指定地址传送数据
MVMM MMRx,MMRy ;MMRx向MMRy传送数据
POPM MMR ;将数据从栈顶弹至MMR
PSHM MMR ;将MMR数据压入堆栈
STLM src,MMR ;累加器低位存入MMR
STM #lk,MMR ;长立即数lk存入MMR
MMR寻址特点:
① 寻址速度快,对MMR执行写操作开销小;
② 可直接利用MMR的名称快速访问数据存储空间的0页资源;
③ 只能寻址数据空间的0页单元。
用途:主要用于不改变DP、SP的情况下,修改MMR中的内容。
(7)堆栈寻址
堆栈:当发生中断或子程序调用时,用来自动保存PC内容以及保护现场或传送参数。
C54x的堆栈是向低地址生长,并由16位堆栈指针SP管理。SP总是指向栈顶。
堆栈寻址:利用SP指针,按照先进后出的原则进 行寻址。
当进栈操作时,SP先减小,然后数据进入堆栈;当出栈操作时,数据先出栈,然后SP增加。
出栈操作时,数据先出栈,然后SP增加:
采用堆栈寻址的指令:
PSHD Smem ;将Smem中的数据压入堆栈
PSHM MMR ;将MMR中的数据压入堆栈
POPD Smem ;将数据从栈顶弹至Smem中
POPM MMR ;将数据从栈顶弹至MMR中
2、TMS320C54x的指令表示方法
C54x的助记符指令是由操作码和操作数两部分组成。在进行汇编以前,操作码和操作数都是用助记符表示。
指令系统中的符号和缩略语:
C54x的指令系统共有129条基本指令,由于操作数的寻址方式不同,由它们可以派生多至205条指令。
装载指令:
存储指令:
条件存储指令:
根据条件将源操作数存入目的存储器,共计4条指令。