DSP数字信号处理器TMS320C54x的指令系统1、寻址方式 当硬件执行指令时,寻找指令所指定的参与运算的操作数的方法——寻址方式。 根据程序的要求采用不同的寻址方式,可以有效地缩短程序的运行时间和提高代码执行效率。 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条指令。 |