首页 第3章 指令系统

第3章 指令系统

举报
开通vip

第3章 指令系统null第3章 指令系统 第3章 指令系统 3.1 数据寻址方式 3.2 TMS320C54x的指令系统 3.1 数据寻址方式 3.1 数据寻址方式 3.1.1 指令的表示方法  1.指令的基本形式 与所有的微处理器助记符指令一样,TMS320C54x的助记符指令也是由操作符和操作数两部分组成的。在汇编前,操作符是用助记符表示的,指出指令应完成何种操作;操作数用来描述该指令的操作对象,它可以是数据本身,也可以是指出如何获取操作数的信息。null ...

第3章  指令系统
null第3章 指令系统 第3章 指令系统 3.1 数据寻址方式 3.2 TMS320C54x的指令系统 3.1 数据寻址方式 3.1 数据寻址方式 3.1.1 指令的表示方法  1.指令的基本形式 与所有的微处理器助记符指令一样,TMS320C54x的助记符指令也是由操作符和操作数两部分组成的。在汇编前,操作符是用助记符表示的,指出指令应完成何种操作;操作数用来描述该指令的操作对象,它可以是数据本身,也可以是指出如何获取操作数的信息。null 助记符指令的基本形式为 标号,操作符,操作数1,操作数2,操作数3 其中,标号是可选项,操作数可以没有或有多个,其内容可以是立即数、寄存器、程序地址、数据地址、I/O地址等。TMS320C54x中源操作数一般在操作数1的位置,目的操作数则在操作数3的位置,指令执行结果存放到目的操作数单元中,源操作数不变。 上述指令的执行结果是将立即数0FFH传送至累加器A中。这里的LD为操作符,#0FFH为操作数1,累加器A为操作数2。 null 2.指令的数据类型 TMS320C54x 寻址存储器有两种基本的数据形式:16位数和32位数。大多数指令能够寻址16位数,只有双精度和长字指令才能寻址32位数,如表3-1所示。 null表3-1 寻址32位数的指令 null 在对32位数寻址时,先处理高有效字,然后处理低有效字。如果寻址的第1个字处在偶地址,那么第2个字就处在下一个(较高的)地址;如果第1个字处在奇地址,那么第2个字就处在前一个(较低的)地址,如图3-1所示。在讨论寻址方式时,要用到一些缩写语,表3-2给出了部分缩写语的名称和含义。 null图3-1 32位字的存储顺序 null表3-2 部分寻址方式缩写语 null 3.1.2 数据寻址方式 TMS320C54x数字信号处理器共有7种寻址方式,如表3-3所示。 null表3-3 TMS320C54x的数据寻址方式 null 1.立即寻址 立即寻址就是在指令中已经包含有执行指令所需的操作数(一个固定的立即数)。立即寻址方式中的立即数有两种数值形式,数值的位数为3、5、8或9位时为短立即数;数值的位数为16位时是长立即数。立即数可以包含在单字节或双字节指令中,短立即数在单字节指令中,长立即数在双字节指令中。在一条指令中,立即数的形式是由所使用的指令的类型决定的。 在立即寻址方式的指令中,在数字前面加一个“#”符号,表示此数为一个立即数,否则会误认为是一个地址。null 例如:用一个十六进制数80H加载累加器A,可以写成如下指令: LD #80H,A 执行后,A=0080H 如果将立即数10H先左移4位后,再加载累加器A,可以写成如下指令: LD #10H,4,A 执行后,A=0000 0100H LD #32768,B 执行后,B=FFFF 8000H,状态寄存器ST1中的SXM位等于1,数据进入ALU之前进行符号扩展 null 2.绝对寻址 绝对寻址就是指令中包含要寻址的存储单元的16位地址,指令按照此地址进行数据寻址。这种寻址方式为双字指令,速度慢。 null 绝对寻址有以下四种形式: (1) 数据存储器地址单元(dmad)寻址:用程序标号或数据来确定指令中所需要的数据空间地址。其指令如下: MVDK Smem,dmad MVDM dmad,MMR MVKD dmad,Smem MVMD MMR,dmad null (2) 程序存储器地址单元(pmad)寻址:用一个符号或一个具体的数来确定程序存储器中的地址。其指令如下: FIRS Xmem,Ymem,pmad MACD Smem,pmad,src MACP Smem,pmad,src MVDP Smem,pmad MVPD pmad,Smem null (3) 端口地址(PA)寻址:用一个符号或一个常数来确定外部I/O端口地址。其指令如下: PORTR PA,Smem PORTW Smem,PA (4) *(lk)寻址:16位符号常数所指的数据存储单元(Smem)中的操作数。 null 3.累加器寻址 累加器寻址是以累加器内容作为一个地址来读取程序存储器中的数据的。有两条指令可以用累加器寻址: READA Smem ;把累加器A所确定的程序存储单元中的内容传送到由Smem所指定的数据存储单元中 WRITA Smem ;将Smem 所指定的数据存储单元中的一个数传送到累加器A确定的程序存储器单元中 null 4.直接寻址 直接寻址就是在指令中包含有数据存储器地址(dma)的低7位,用这7位作为偏移地址,并与基地址值(数据页面指针DP的9位或堆栈指针SP的16位)组成一个16位的数据存储器地址。直接寻址分为数据页指针直接寻址和堆栈指针直接寻址两种。这两种寻址方式可以在不改变 DP或SP的情况下,随机地寻找128个存储单元中的任何一个单元地址。直接寻址的优点是访问方便快捷,每条指令只需要一个字。直接寻址的代码格式如下:null 当状态寄存器ST1中的CPL位等于0时,ST0中的DP值(9位地址)与指令中的7位地址一起形成16位数据存储器地址,如图3-2所示。null图3-2 以DP为基准的直接寻址 null 因为DP值的范围是0~511,所以以DP为基准的直接寻址把存储器分成512页;又因为7位dma值的范围是0~127,所以每页有128个可访问的单元,也就是说,DP指向512页中的一页,dma就指向该页中的特定单元。DP值可以由LD指令装入,RESET指令将DP赋为0。DP不能通过上电进行初始化,必须在程序中对它进行初始化后,才能保证程序正常工作。 当ST1中的CPL位等于1时,将指令中的7位地址与16位堆栈指针SP相加,形成16位的数据存储器地址,如图3-3所示。 null图3-3 以SP为基准的直接寻址方式 null 直接寻址的句法是利用一个符号“@”(加在变量的前面)或者一个常数来确定偏移地址值的。例如: (1) 数据页指针直接寻址:x=01FFH,y=0200H。 (2) 堆栈指针直接寻址:SP=0010H。 nullnullnull 5.间接寻址 在间接寻址中,64 K字数据空间中的任意单元都可以通过一个辅助寄存器中的16位地址进行访问,同时可以预调整或修改辅助寄存器值,完成循环寻址和位码倒序寻址等特殊功能。TMS320C54x有8个16位辅助寄存器(AR0~AR7)、两个辅助寄存器算术运算单元(ARAU0和ARAU1),它们与8个辅助寄存器一起完成16位无符号数算术运算。 null 间接寻址很灵活,它不仅能在单条指令中对存储器读/写一个16位操作数,而且还能在单条指令中读两个独立的数据存储单元,读/写两个顺序的数据存储单元,或者读一个数据存储单元的同时写另一个数据存储单元。 null1) 单数据存储器操作数间接寻址 单数据存储器操作数间接寻址指令的格式如下: null 2~0位:3位辅助寄存器域,它定义了寻址所使用的辅助寄存器。ARF由状态寄存器ST1中的兼容方式位CMPT来决定。 CMPT=0: 标准 excel标准偏差excel标准偏差函数exl标准差函数国标检验抽样标准表免费下载红头文件格式标准下载 方式。ARP始终设置为0,不能修改。 CMPT=1:兼容方式。 表3-4列出了16种单数据存储器操作数的间接寻址功能及其说明。单操作数间接寻址的硬件框图如图3-4所示 null表3-4 单数据存储器操作数的间接寻址类型 nullnull图3-4 单操作数间接寻址的硬件框图 null 2) 位码倒序寻址功能 位码倒序寻址提高了执行速度,在FFT算法中,经常要用到位码倒序寻址功能。在这种寻址方式中,AR0存放的整数N是FFT点数的一半。一个辅助寄存器指向一个数据存放的物理单元,当使用位倒序寻址把AR0加到辅助寄存器中时,地址以位倒序的方式产生,即进位是从左向右,而不是通常的从右向左。 null 例如:AR0=0000 1010B,AR2=0110 0110B,如执行*AR2+0B寻址功能,也就是(0110 0110)+(000 1010),结果AR2=0110 1101B。应注意,计算是采用从左到右运算的。 以16点FFT为例,其运算结果的顺序为X(0)、X(8)、X(4)、…、X(15),如表3-5所示。 null表3-5 位码倒序寻址 null 3) 循环寻址 在卷积、相关和FIR滤波器等算法中,都需要在存储器中设置一个循环缓冲器,它是一个滑动窗口,保存着最新的一批数据。当新的数据到来时,缓冲器中最早的数据就会被新的数据覆盖。循环缓冲器实现的关键是循环寻址的实现。循环缓冲器大小寄存器(BK)的内容确定了循环缓冲器的大小。BK中的数值由指令“STM #lk,BK”设定。长度为R的缓冲器必须从N位地址的边界开始(即循环缓冲器基地址的N个最低有效位必须为0),N应满足2N>R的最小整数。 null 循环缓冲区的有效基地址(EFB)就是用户选定的辅助寄存器(ARx)的低N位置0后所得到的值,循环缓冲区的的尾地址(EOB)是通过用BK的低N位代替ARx的低N位得到的。循环缓冲区的指针index就是ARx的低N位,step就是加到辅助寄存器或从辅助寄存器中减去的值。图3-5说明了BK、辅助寄存器(ARx)、循环缓冲区的尾地址和首地址以及循环缓冲器的指针关系。 null图3-5 循环寻址的框图 null循环寻址的算法为 if 0≤index+step≤BK; index=index+step. else if index+step≥BK; index=index+step-BK. else if index+step<0; index=index+step+BK.null 4) 双数据存储器操作数寻址 双数据存储器操作数寻址用来完成两个读操作,或一个读和一个并行存储操作。采用这种方式的指令只有一个长字,并且只能以间接寻址的方式工作。用Xmem和Ymem来代表这两个数据存储器操作数。在完成两个读操作过程中,Xmem表示读操作数(访问D数据总线),Ymem表示读操作数(访问C数据总线);在一个读操作同时并行一个并行存储操作过程中,Xmem表示读操作数(访问D数据总线),Ymem表示一个写(访问E数据总线)操作数。 null 如果源操作数和目的操作数指向同一个单元,则在并行存储指令中(如ST||LD),读在写之前。如果一个双操作指令(如ADD)指向同一辅助寄存器,并且这两个操作数的寻址方式不同,那么就按Xmod域所确定的方式来寻址。双数据存储器操作数间接寻址的硬件框图如图3-6所示。 null图3-6 双数据存储器操作数间接寻址的硬件框图 null双数据存储器操作数间接寻址的指令格式如下: null表3-6 双数据存储器操作数间接寻址指令代码的位说明 null表3-7 由指令的Xar和Yar域选择的辅助寄存器   null表3-8 双数据存储器操作数间接寻址类型 null 6.存储器映像寄存器寻址 存储器映像寄存器寻址是用来修改存储器映像寄存器的,但不影响当前数据页指针DP或堆栈指针SP的值。由于DP和SP不需要改变,因此写一个寄存器的开销是最小的。存储器映像寄存器寻址可以在直接寻址和间接寻址中使用。 null 存储器映像寄存器(MMR)地址的产生有两种方法: (1) 在直接寻址方式下,不管当前DP或SP的值为何值,使数据寄存器地址的高9位(MSBs)强制置0,数据存储器地址的低7位(LSBs)则来自于指令字。 (2) 在间接寻址方式下,只使用当前辅助寄存器的低7位作为数据存储器地址的低7位,地址的高9位为0,指定的辅助寄存器的高9位在寻址后被强制置0。 null图3-7 存储器映像寄存器寻址null 7.堆栈寻址 系统堆栈用来在中断或调用子程序期间自动存放程序计数器,也能用来存放用户当前的程序环境或传递数据值。处理器使用一个16位存储器映像寄存器的一个堆栈指针(SP)来寻址堆栈,SP始终指向存放在堆栈中的最后一个单元。当调用一个子程序或一个中断响应发生时,PC会被自动压栈,堆栈指针SP指向存放最后一个数据的堆栈单元;返回时,返回地址从堆栈中弹出并装入PC。 null 使用堆栈寻址方式访问堆栈的指令共有4条: PSHD:把一个数据存储器的值压入堆栈。 PSHM:把一个存储器映像寄存器的值压入堆栈。 POPD:把一个数据存储器的值弹出堆栈。 POPM:把一个存储器映像寄存器的值弹出堆栈。 堆栈存放数据是从高地址向低地址进行的。压入堆栈时,先减小SP,再将数据压入堆栈;弹出堆栈时,先从堆栈弹出数据,再增加SP值。 图3-8说明了堆栈操作对堆栈指针(SP)的影响。 null图3-8 堆栈操作对堆栈指针的影响 3.2 TMS320C54x的指令系统 3.2 TMS320C54x的指令系统 TMS320C54x可以使用两套指令系统:代数表达式形式指令和助记符形式指令。代数表达式形式指令易学易记,运算关系清楚明了;助记符形式指令与计算机汇编语言比较接近,便于阅读和记忆。因为两者的汇编器不同,所以两种形式的指令不能混淆。TMS320C54x指令系统按功能可以分成四种基本类型: null● 算术运算指令; ● 逻辑运算指令; ● 程序控制指令; ● 加载和存储指令。 null 3.2.1 指令系统概述 1.指令系统中规定的符号与缩写 TMS320C54x指令系统中规定了许多符号与缩写,在介绍指令系统之前应有所了解。为了便于学习和使用,在表3-9(略)和表3-10(略)中列出了指令系统和操作码中的符号和缩写,以备查用。 2.指令系统中的记号和运算符 指令系统中所用的一些记号见表3-11(略)。 指令系统中所用的运算符号见表3-12。 null表3-12 指令系统中所用的运算符号 null 3.2.2 指令系统分类   TMS320C54x的指令一共有129条,由于操作数的寻址方式不同,以至于派生有205条指令。TMS320C54x指令系统的分类有两种方法,一是按指令执行时所需的周期分类;一是按指令的功能分类。按指令的功能可分为四类:算术运算指令、逻辑运算指令、程序控制指令以及加载和存储指令。 null 1.算术运算指令 算术运算指令用于完成加、减、乘、除等算术运算,可分为加法指令、减法指令、乘法指令、乘加指令、乘减指令、双操作数指令和专用指令。其中,大部分指令只需要一个指令周期,只有个别指令需要2~3个指令周期。 null 1) 加法指令 指令中表示整数时,有有符号数和无符号数两种格式。TMS320C54x提供了多条用于加法的指令,如ADD、ADDC、ADDM和ADDS,具体说明见表3-13。 null表3-13 加法指令的说明   nullnull ADD指令有10种句法。如果目的累加器dst被指定,则结果存放在dst中;如果没有被指定,则结果存放在源累加器src中。移位操作数的范围为?16≤SHIFT≤15,0≤SHFT≤15。正数为左移位,左移位低位添0,高位受SXM位影响。如果SXM=1,则高位进行符号扩展;如果SXM=0,则高位清零。负数为右移位,受SXM位影响。如果SXM=1,则高位进行符号扩展;如果SXM=0,则高位清零。 null【例1】 ADD *AR3+,14,A null【例2】 ADD A,-8,B null【例3】 ADD #4568H,8,A,B null【例4】 ADD *AR2+,*AR2-,A null【例5】 ADDC *+AR2(5),A ;不受SXM位影响 null【例6】 ADDM #123BH,*AR4+ ;该指令不能循环执行 null【例7】 ADDM #0F088H,*AR2+   null 【例8】 ADDS *AR2-,B ;无论SXM为何值,都不进行符号扩展 null 2) 减法指令 TMS320C54x 中减法指令有许多,如SUB、SUBB、SUBC和SUBS,具体说明见表3-14。其中,SUBS是无符号数的减法运算,SUBB是带借位的减法运算,而SUBC是含条件的移位减。在TMS320C54x中,没有专门的除法指令,要实现除法运算一般有两种方法:一种方法是用乘法进行,如要除以某个数,可以先求出该数的倒数,再乘以其倒数;另一种方法是用SUBC指令,再重复16次减法运算,可实现两个无符号数的除法运算。减法指令中状态位与加法指令中的基本相同。 null表3-14 减法指令的说明   nullnull【例9】 SUB #12345,8,A,B   null 【例10】LD #8,DP ;使页面指针DP=8 LD #0006H,A ;加载A累加器 SSBX C ;置借位位C为1 SUBB @5,A ;完成带借位的减法运算。数据地址=0405H,为直接寻址 nullnull 【例11】 利用SUBC完成整除法,41H÷7H=9H,余数是2H。 LD #0041H,B ;将被除数41H装入累加器B的低16位 STM #0100H,AR2 ;寄存器AR2=0100H STM #0110H,AR3 ;寄存器AR3=0110H ST #0007H,*AR2 ;设置AR2寄存器的内容,(AR2)=0007H RPT #15 ;重复SUBC指令15+1次 null SUBC *AR2,B ;使用SUBC指令完成除法运算 STL B,*AR3+ ;将商(累加器B的低16位)存入变量AR3所指地址的数据单元,AR3+1→AR3 STH B,*AR3 ;将余数(累加器B的高16位)存入变量AR3所指地址的数据单元 SUBC指令重复执行前和最后一条指令执行完后各寄存器的状态如下: nullnull【例12】 商为整数的除法:0.44÷(-0.22)= -2的程序段。 .bss num,1 .bss den,1 .bss quot,1 .data table: .word 44*32768/100 .word -22*32768/100 .text nullstart: STM #num,AR1 ;把被除数的地址送入AR1中 RPT #1 ;把下一条指令重复执行2次 MVPD table,*AR1+ ;把被除数和除数送进数据存储单元 LD @den,16,A ;将除数装入A累加器的高16位 MPYA @num ;利用乘法操作确定商的符号 ABS A ;将除数取绝对值 STH A,@den ;将除数绝对值放回原位 LD @num,A ;将被除数装入A累加器的低16位 ABS A ;将被除数取绝对值 RPT #15 ;16次减法循环,完成除法 null SUBC @den,A XC 1,BLT ;如果B<0,则商为负数,执行NEG指令,否则跳 ;过NEG指令 NEG A STL A,@quot ;保存结果 done: B done .end 结果y=FFFEH =-2。 null【例13】 商为小数的除法:44÷(-176)= -0.25的程序段。 .bss num,1 .bss den,1 .bss quot,1 .data table: .word 44 .word -176 .textnullstart: STM #num,AR1 RPT #1 MVPD table,*AR1+ LD @den,16,A MPYA @num ABS A STH A,@den LD @num,16,A ;将被除数装入A累加器的高16位 null ABS A RPT #14 ;15次减法循环,完成除法 SUBC @den,A XC 1,BLT NEG A STL A,@quot done: B done .end 结果y=E000H =-0.25。null 3) 乘法指令 TMS320C54x 中有大量的乘法运算指令,其结果都是32位,放在A或B累加器中,如表3-15所示。乘数在TMS320C54x的乘法指令中的使用很灵活,可以是T寄存器、立即数、存储单元以及A或B累加器的高16位。如果是无符号数相乘,则使用一条专用于无符号数相乘的指令,即MPYU指令,其他指令都是有符号数的乘法。 null表3-15 乘法指令的说明 null【例14】 实现整数乘法。 LD #0030H,A ;将0030H装入累加器A STM #0100H,AR2 ;AR2=0100H ST #2000H,*AR2 ;(AR2)=2000H RSBX FRCT ;清FTCT标志位,准备整数乘 LD #2,DP ;DP=002H LD 0,T ;将AR2中的内容2000H装入T寄存器 MPY #-2,A ;完成2000H与0FFFEH相乘,结果放入A累加器(32位), ;A=FF FFFF C000H null【例15】 实现小数乘法。 SSBX FRCT ;置FRCT标志位,准备小数乘法 LD temp1,16,A ;将变量temp1装入累加器A的高16位 MPYA temp2 ;完成temp2与累加器A的高16位相乘,结果放入B累加器, ;并将temp2装入T寄存器 STH temp3 ;将乘积结果的高16位存入变量temp3 null 4) 乘加指令 乘加指令完成一个乘法运算,将乘积再与源累加器的内容相加。指令中使用R后缀的,其运算结果要进行凑整。表3-16是对乘加指令的说明。 null表3-16 乘加指令的说明 nullnull【例16】 MAC #345H,A,B null【例17】 MAC #345H,A,B null【例18】 MAC *AR3+,*AR4+,A,B null【例19】 MACR *AR3+,*AR4+,A,B null【例20】 MACA T,A,B null【例21】 MACA T,B,B null【例22】 MACD *AR2-,COEFFS,A null【例23】 MACSU *AR3+,*AR4+,A   null【例24】 MACSU *AR3+,*AR4+,A null 5) 乘减指令 乘减指令完成从累加器B或源累加器src或目的累加器dst中减去T寄存器或一个操作数与另一个操作数的乘积,结果存放在累加器B或dst或src中。表3-17是对乘减指令的说明。 null表3-17 乘减指令的说明 null【例25】 MAS *AR3+,*AR4+,A,B null【例26】 MASR AR3+,*AR4+,A,B null 【例27】 编制计算 y=0.1*0.8+(-0.2)*0.6+(-0.3)*(-0.9)程序段。 .bss x,3 .bss a,3 .bss y,1 .data table: .word 1*32768/10,-2*32768/10,-3*32768/10 .word 8*32768/10,6*32768/10,-9*32768/10 .text nullstart: STM #table,AR1 ;AR1指向程序地址table STM #x,AR2 ;AR2指向x STM #5,AR0 LD #0,A loop: LD *AR1+,A ;从程序存储单元向数据存储单元传送6个数据 STL A,*AR2+ BANZ loop,*AR0- ;AR0≠0,执行标号loop,否则执行下一条指令 null SSBX FRCT CALL SUM end: B end SUM: STM #a,AR3 ;被乘数单元 STM #x,AR4 ;乘数单元 RPTZ A,#2 ;重复执行下条指令3次,使累加器A清零 MAC *AR3+,*AR4+,A STH A,@y RET .end 结果y=1D70H =0.23。null 6) 双操作数指令 双操作数指令中有一个操作数Lmem是长数据存储操作数,该指令为双长字(32位)的指令。如DADD指令,它在C16的控制下完成一个32位的加法运算或两个16位的加法运算。当C16=0时,指令以双精度(32位)方式执行;当C16=1时,指令以双16位方式执行。表3-18是对双操作数指令的说明。 null表3-18 双操作数指令的说明 nullnull【例28】 DADD *AR3+,A,B null【例29】 DADD *AR3-,A,B null 7) 专用指令 在TMS320C54x中,许多专用指令用来完成一些特殊的操作,这样不仅可以大大提高编写程序的速度,缩短程序的长度,还避免了汇编中为实现一种功能而需要多条语句的弊端,减少了指令执行的周期。表3-19是对专用指令的说明。 null表3-19 专用指令的说明 nullnull【例30】 ABDST *AR3+,*AR4+ null【例31】 FIRS *AR3+,*AR4+,COEFFSnull 2.逻辑指令 按照功能的不同可将逻辑指令分为五组,即与指令(AND)、或指令(OR)、异或指令(XOR)、移位指令(ROL)和测试指令(BITF)。根据操作数的不同,指令的执行需要1~2个指令周期。前三组指令与计算机汇编语言中逻辑指令一样,是按位进行操作的。 1) 与逻辑运算指令 表3-20是对与逻辑运算指令的说明。 null表3-20 与逻辑运算指令的说明 null2) 或逻辑运算指令 表3-21是对或逻辑运算指令的说明。 表3-21 或逻辑运算指令的说明 null3) 异或逻辑运算指令 表3-22是对异或逻辑运算指令的说明。 表3-22 异或逻辑运算指令的说明 null4) 移位指令 表3-23(略)是对移位指令的说明。null【例32】 SFTA A,-8,B   null【例33】 SFTA A,-8,B null【例34】 SFTL A,-8,B null【例35】 SFTL B,+5 null 5) 测试指令 测试指令可以测试操作数的指定位的值,也可以比较两个操作数是否相等。这些指令的执行需要1~2个指令周期。表3-24是对测试指令的说明。 null表3-24 测试指令的说明 null【例36】 BIT *AR2+,12 null【例37】 CMPR 2,AR4 null 3.程序控制指令 程序控制指令用于控制程序的执行顺序。程序控制指令包括分支转移指令(B、BC)、调用指令(CALL)、中断指令(INTR、TRAP)、返回指令(RET)、重复指令(RPT)、堆栈操作指令(FRAME、POPD)和混合程序控制指令(IDLE、NOP)。这些指令根据不同情况分别需要1~6个指令周期。 条件分支转移指令或条件调用、条件返回指令都要用条件来限制分支转移、调用和返回操作,只有当一个条件或多个条件得到满足时才执行指令。条件运算符分为两组,如表3-25所示。 null表3-25 条 件 运 算 符     null 1) 分支转移指令 分支转移指令可以改变程序指针PC,使程序从一个地址跳转到另一个地址。分支转移指令分有条件转移和无条件转移两种。指令后缀有D的指令是延迟转移,指令执行时先执行紧跟的下一条指令,紧接着延迟转移指令的两条单字指令和一条双字指令。延迟转移可以减少转移指令的执行时间,但程序的可读性变差。表3-26所列的转移指令都不能循环执行。 null表3-26 后缀有D的分支转移指令的说明null 【例38】 用AR2作为循环计数器,设初值为4,共执行5次加法运算。 … LOOP:ADD *AR1+,A BANZ LOOP,*AR2- … null 【例39】 用AR0作为循环计数器,设初值为7,共执行8次从程序存储器到数据存储器的传送。 … LOOP: LD *AR1+,A STL A,*AR2+ BANZ LOOP,*AR0- … null【例40】 FBACC A null 2) 调用指令 调用指令与分支转移指令的区别是,采用调用指令时,被调用的程序段执行完后要返回程序的调用处继续执行原程序。 null 调用指令为非延时指令,PC+1→TOS;指令后缀带D时,是延迟调用,紧接着指令的两条单字指令和一条双字指令先被取出执行,此时PC+3→TOS。对于CC[D]指令,当满足确定的条件时,PC+2→TOS,pmad→PC,否则,PC+2→PC;如果是延迟调用,该指令后的两个字指令先被取出执行,被测试的条件不会受影响,PC+4→TOS。表3-27是对延迟调用指令的说明。 null表3-27 延迟调用指令的说明 null【例41】 CALA A null【例42】 CALAD B ANDM 4444H,*AR1+null 3) 中断指令 当有中断发生时,INTM位置1,屏蔽所有可屏蔽中断,并设置中断标志寄存器IRF中相应的中断标志位。中断向量地址是由处理器工作方式状态寄存器PMST中的中断向量指针IPTR(9位)和左移两位后的中断向量序号(中断向量序号为0~31,左移两位后变为7位)组成的。中断向量地址的形成如图3-9所示。表3-28是对中断指令的说明。null图3-9 中断向量地址的形成 null表3-28 中断指令的说明 null【例43】 INTR 3   null 4) 返回指令 返回指令用于在执行完调用程序段或中断服务程序后,使程序返回到调用指令或中断发生的地方以继续执行。表3-29是对返回指令的说明。 null【例44】 FRETE null表3-29 返回指令的说明 null 5) 重复指令 重复指令能使DSP重复执行一条指令或一段指令。在执行RPT或RPTZ期间,对 和所有可屏蔽中断都不响应。在执行RPTB指令前,必须把循环次数置入BRC寄存器中。在块重复执行期间,可以响应中断。表3-30是对重复指令的说明。 null表3-30 重复指令的说明 null 【例45】 RPT #99H ;循环执行NOP指令100次,RC=63H,单字指令 NOP RPT #0FFFFH ;将紧跟在RPT后面的下一条指令循环执行1000次,双字指令 null 6) 堆栈操作指令 堆栈操作指令可以对堆栈进行压入和弹出操作,操作数可以是立即数、数据存储器单元Smem或存储器映像寄存器MMR。表3-31是对堆栈操作指令的说明。 null表3-31 堆栈操作指令的说明 null7) 其他程序控制指令 表3-32是对其他程序控制指令的说明。 null表3-32 其他程序控制指令的说明 null 【例46】 XC 1,ALEQ ;条件ALEQ指A≤0 MAR *AR1+ ADD A,8 如果A≤0,执行下面一条“MAR *AR1+”指令,XC指令执行后AR1=AR1+1,否则执行一条NOP指令,再执行“ADD A,8”指令。XC指令的条件在前两条指令中就已被确定,无论条件满足与否,程序体的执行时间是一样的。XC的效率比一般的跳转指令高。 null 4.加载和存储指令 加载和存储指令用于完成数据的读入和保存,包括一般的加载和存储指令(LD、ST)、条件存储指令(CMPS、SACCD)、并行的加载和乘法指令(LD‖MAC)、并行的加载和存储指令(ST‖LD)、并行的存储和加减指令(ST‖ADD、ST‖SUB)以及其他加载和存储指令(MVDD、PORTW、READA)。这些指令根据不同情况分别需要1~5个指令周期。 null 1) 加载指令 加载指令用于将数据存储单元中的数据、立即数或源累加器的值装入目的累加器、暂时寄存器T等,即给目的累加器、暂时寄存器T等赋值。表3-33是对加载指令的说明。 null表3-33 加载指令的说明 nullnullnull【例47】 给累加器A加载一个双16位长字。 STM #0100H,AR2 DLD *AR2+,A nullnull【例48】 LD *AR1,A null【例49】 LDM AR1,A null【例50】 LDM *AR1,A null【例51】 LDM 0060H,B null 2) 存储指令 存储指令用于将源累加器、立即数、暂时寄存器T或状态转移寄存器TRN的值保存到数据存储单元或存储器映像寄存器中。表3-34是对存储指令的说明。 null表3-34 存储指令的说明 nullnull【例52】 DST B,*AR1+ null【例53】 DST B,*AR1- null【例54】 ST FFFFH,0 null【例55】 ST T,*AR7- null【例56】 STM 0FFFFH,IMR null【例57】 STM 8765H,*AR7+ null 3) 条件存储指令 条件存储指令是在条件满足的情况下,将源累加器、T寄存器或块重复计数器BRC的值存储在数据存储单元中。表3-35是对条件存储指令的说明。 null表3-35 条件存储指令的说明null【例58】 SRCCD *AR5-,AGT null【例59】 SACCD A,*AR3+0,ALT null 4) 其他加载和存储指令 其他加载和存储指令可以实现两个数据存储单元间数据的传送,两个存储器映像寄存器单元间数据的传送等,不受状态位影响。表3-36是对其他加载和存储指令的说明。 null表3-36 其他加载和存储指令的说明 null【例60】 MVDD *AR3+,*AR5+ null【例61】 MVDK *AR3-,1000H。   null 5. 并行执行指令 TMS320C54x DSP的CPU结构使TMS320C54x可以在不引起硬件资源冲突的情况下支持某些并行执行指令,并行指令同时利用D总线和E总线。D总线用来执行加载或算术运算,E总线用来存放先前的结果。这些并行执行指令有并行加载和存储指令、并行加载和乘法指令、并行存储和加减指令及并行存储和乘法指令,而且都是单字单周期指令。 null 1) 并行加载和存储指令 并行加载和存储指令受标志位OVM和ASM影响,寻址后影响标志位C。表3-37是对并行加载和存储指令的说明。 null表3-37 并行加载和存储指令的说明 null【例62】 ST B,*AR4- ||LD *AR5+,Anull【例63】 ST B,*AR4- ||LD *AR5+,Anull【例64】 ST A,*AR4+ ||LD *AR4-,Anull 2) 并行加载和乘法指令 并行加载和乘法指令受标志位OVM、SXM和FRCT影响,寻址后影响OVdst标志位。指令中目的累加器dst可以是A或B,如果dst为A累加器,那么dst_为B累加器,反之亦然。表3-38是对并行加载和乘法指令的说明。 null表3-38 并行加载和乘法指令的说明 null【例65】 LD *AR4-,A ||MAC *AR5,Bnull 3) 并行存储和加减指令 并行存储和加减指令受标志位OVM、SXM和ASM影响,寻址后影响C和OVdst标志位。指令中目的累加器dst可以是A或B,如果dst为A累加器,那么dst_为B累加器,反之亦然。表3-39是对并行存储和加减指令的说明。 null表3-39 并行存储和加减指令的说明 null【例66】 ST A,*AR4 ||ADD *AR5+0%,Bnullnull 4) 并行存储和乘法指令 并行存储和乘法指令受标志位OVM、SXM、ASM和FRCT影响,寻址后影响标志位C和OVdst。表3-40是对并行存储和乘法指令的说明。 null表3-40 并行存储和乘法指令的说明 null【例67】 ST A,*AR4- ||MAC *AR5,Bnull【例68】 ST A,*AR4- ||MACR *AR5,B null【例69】 ST A,*AR4- ||MAS *AR5,B null【例70】 ST A,*AR4- ||MPY *AR5,Bnull 6.重复指令 在TMS320C54x中有单个循环指令,它能使下一条指令重复执行。指令重复的次数由单个循环指令中的操作数决定,并等于操作数加1。该操作数的值被赋给16位重复寄存器RC,RC的值只能由单个循环指令中的操作数赋给,不能用程序赋值。当一条指令被重复执行时,绝对程序或数据地址将自动加1。 null 一旦重复指令被解码,除RS之外的所有中断均被屏蔽,直到下一条指令被重复执行完之后。重复功能用于一些指令中,如对乘加和块移动指令可以执行重复操作,重复操作的结果使这些多周期指令在第一次执行后变成单周期指令。重复操作可使表3-41所列的指令由多重循环变成单重循环。 null表3-41 指 令 说 明 null 对于单个数据存储器操作数指令,如果有一个长偏移地址或绝对地址,如*ARn(lk)、*+ARn(lk)、*+ARn(lk)%和*(lk),则指令将不能被重复执行。表3-42中的指令不能用RPT或RPTZ指令循环执行。 null表3-42 不能用RPT或RPTZ指令循环执行的指令  
本文档为【第3章 指令系统】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_515496
暂无简介~
格式:ppt
大小:2MB
软件:PowerPoint
页数:0
分类:工学
上传时间:2011-12-22
浏览量:13