C54x DSP的寻址方式及代数汇编指令
附录三:C54x DSP的寻址方式及代数汇编语言指令
C54x DSP的寻址方式
TMS320C54x系列DSP的存储空间包括程序存储空间、数据存储空间和I/O空间。每个空间都有64K字的大小。因此,如果采用直接的寻址方式则需16位的地址。为了节省程序存储空间和提高程序的运行速度,经常采用间接寻址等方法以便使指令字节数减少。在本章内将对C54x的寻址方式做较为详细的介绍。
1.程序空间寻址
16位直接寻址方式主要应用于程序的调用(CALL pmad)、跳转指令(GOTO pmad)和块重复指令((d)blockrepeat)中。具体说明如下:
1、 pmad指的是16位程序计数器PC的内容,它代表的是程序存储空间的地址(program
memory address);
2、 CALL指令和GOTO指令包括无条件的CALL和GOTO和有条件的CALL和GOTO。
3、 块重复指令(d)blockrepeat的起始地址存于寄存器RSA(Repeat Starting
Address)中,结束地址存于寄存器REA(Repeat Ending Address)中,重复次数
存于寄存器BRC(Block Repeat Counter)中。
4、 PC 、BRC、 RSA、 REA位于PAGEN(Program Address Generator)当中,见图(3A-1)。
程序计数器PC
RC
BRC
RSA
REA
图(3A-1)PAGEN
2. 数据空间寻址
数据空间的寻址正如同8086微机的寻址问题一样重要,只有正确掌握C54x数据空间的寻址方式才能正确编制C54x的汇编程序。
C54x提供了7种基本寻址方式:
, 立即寻址.
1
, 绝对寻址.
, 累加器寻址.
, 直接寻址.
, 辅助寄存器间接寻址.
, 内存映射寄存器寻址.
, 堆栈寻址.
在本节中将详细说明这7种寻址方式。相信详细阅读本节会有助于对C54x处理器的认识和理解,并在程序的编制中熟练地运用这些寻址方式。
2.1 立即寻址
立即寻址即利用立即数进行寻址。在利用该寻址方式时立即数即包括在指令代码当中,CPU不必再去寻找数据。在立即寻址中立即数有两种形式:
※ 短立即数——长度可以是3、5、8或9比特;
※ 长立即数——长度16比特。
立即数的长度是由指令的类型决定的,表(3A-1)列出了利用立即数寻址的指令,以及该指令中立即数的长度。使用立即寻址必须在立即数前加符号“#”,此符号标识该数是立即数,例如:RPT(#19h)。
表(5-1)使用立即数的指令
2.2 绝对寻址
绝对寻址分为4种类型:
※ 数据空间寻址
※ 程序空间寻址
※ I/O端口寻址
※ *(lk)寻址
绝对寻址是利用一个16位数标识地址,CPU可根据该数直接在数据、程序、I/0空间寻址,而不必改动或初始化辅助寄存器ARx和页面寄存器DP的值。现就四种类型分别举例:
2
1、 数据空间寻址是指所要寻址的数据保存在数据空间。
例如:data(1000h)=*AR3-
其中绝对寻址的地址在数据空间1000h;
2、 程序空间寻址是指所要寻址的数据保存在程序空间。
例如: prog(0FE00h)=,3
所要寻址的数据处在程序空间0FE00h;
3、 I /O端口寻址是指所要寻址的数据处在I/O地址空间。
例如:port(7h) = @OUTDAT
所要寻址的数据处在I/O端口7h;
4、 *(lk)寻址是利用一个数来标识数据空间的一个地址。
例如:A = *(BUFFER)
BUFFER是数据区设置的变量名,当编译该程序时将自动换成该变量的地址。
注意:*(lk)寻址不能用在单循环指令(REPEAT)中。
2.3 累加器寻址
所谓累加器寻址是指利用累加器A放置所寻找的地址。利用累加器寻址可直接寻址24位地址,即可寻址到扩展地址寄存器,应注意该寻址方式所寻地址处在程序空间。有两个指令应用了累加器寻址方式:
※ Smem = prog(A)
※ Prog(A)=Smem
这两条指令的作用分别是从程序空间读取数据存放到数据空间和从数据空间读取数据放到程序空间。
2.4 直接寻址
直接寻址是用7比特的偏移地址作为基地址,同数据页指针DP或堆栈指针SP形成一个16比特的数据存储区地址。对应一个数据页指针DP或堆栈指针SP可在长度是128字长的数据块中寻址。
DP是状态寄存器ST0的低9位,和7位的dma(数据存储器地址:data memory address)构成16位数据存储区地址,见图(3A-3)。这种寻址方式将64K的空间分成512页,每页有128字;所以,DP的赋值范围为0~511,dma的范围为0~127。SP是16位的堆栈指针(Stack Pointer)。
在直接寻址方式中具体是用DP还是SP是由状态寄存器ST1中的汇编标志位(CPL)决定的:
※ 当CPL=0时,是由7位的偏移地址同9位的数据页指针DP组成16位数据存储区地
址;
※ 当CPL=1时,7位的偏移地址加上堆栈指针SP形成16位有效地址。
3
图(3A-3)DP/SP直接寻址方式结构图
2.5 间接寻址
间接寻址无疑是7种寻址方式中最复杂也是最常用的寻址方式,它有许多专门为数字信号处理
设计
领导形象设计圆作业设计ao工艺污水处理厂设计附属工程施工组织设计清扫机器人结构设计
的功能,如循环寻址、位翻转寻址等,熟练和准确地掌握间接寻址会对数字信号处理程序的设计与编制带来极大地方便,并会提高程序的效率、简化程序的结构。
C54x系列处理器提供了8个辅助寄存器(AR0~AR7),间接寻址就是利用16位的辅助寄存器在64K的数据空间寻址,间接寻址适用于内存中的固定步长连续寻址。
当采用间接寻址时,辅助寄存器内存储的地址可通过加、减一个偏移量或一个索引值来更改;在特殊的寻址如循环寻址或比特翻转寻址中利用循环缓冲容量寄存器BK记录循环缓冲区的大小;AR0寄存器可用在索引寻址或比特翻转寻址中,另外也可以像其它辅助寄存器一样指向内存地址。
间接寻址既可以在一个指令中读或写一个16位的数据,也可以用一个指令同时操作两个数据区的寻址,这包括同时读两个独立的数据,读和写两个连续的数据,或读一个数据同时写一个数据。
2.5.1 单操作寻址
15~8 7 6~3 2~0
操作代码 I=1 模式区域 辅助寄存器区域
图(3A-4) 单操作指令格式
以上的单操作指令显示了间接寻址的寻址方法,其中第6 ~ 3位的模式区域(MOD)表示了所要使用的寻址方法,而辅助寄存器区域(ARF)则标识了所使用的寄存器。辅助寄存器区域存在两种不同的工作模式——标准模式和兼容模式,这两种工作模式将影响程序的运行和标志寄存器的值。在标准模式下,辅助寄存器区域ARF标志所选的辅助寄存器不受辅助寄存器指针ARP的影响,并且ARP被设置成0。在兼容模式下,当辅助寄存器区域ARF是0时,由辅助寄存器指针ARP选择辅助寄存器;当ARF不等于0时,ARF决定辅助寄存器的选择,并将在存取结束时把ARF载入ARP。在兼容模式下,ARF的内容显示ARP选择的辅助寄
4
存器。
模式区域指示了更改单操作寻址的16种地址修改方法,这些方法包括辅助寄存器不变、辅助寄存器减1、辅助寄存器加1、比特翻转寻址、索引值寻址、循环寻址、偏移值寻址等。表(3A-2)列出了这16种寻址方法。
模式区域 语法 功能 描述
MOD Syntax Function Description
0000(0) *Arx addr=Arx ARx保存数据区的地址
0000(1) *Arx- addr=Arx 存取后,ARx的地址减1(双字减2)
ARx=ARx-1
0010(2) *ARx+ addr=Arx 存取后,Arx的地址加1(双字加2)
ARx=ARx+1
0011(3) *+Arx addr=ARx+1 ARx的地址先加1后操作(双字加2,不能用
ARx=ARx+1 于内存映射寄存器寻址,只能用于写操作) 0100(4) *ARx-0B addr=Arx 存取后,ARx减AR0并反向传播进位
ARx=B(ARx-AR0)
0101(5) *ARx-0 addr=Arx 存取后,ARx减去AR0
ARx=ARx-AR0
0110(6) *Arx+0 addr=Arx 存取后,ARx加上AR0
ARx=Arx+AR0
0111(7) *ARx+0B addr=Arx 存取后,ARx加AR0并反向传播进位
ARx=B(ARx+AR0)
1000(8) *ARx-% addr=Arx 存取后,ARx循环递减,单字减1,双字减2
ARx=circ(ARx-1)
1001(9) *ARx-0% addr=Arx 存取后,ARx减AR0并循环
ARx=circ(ARx-AR0)
1010(10) *Arx+% addr=Arx 存取后,ARx循环递增,单字加1,双字加2
ARx=circ(ARx+1)
1011(11) *ARx+0% addr=ARx 存取后,Arx加AR0并循环
ARx=circ(ARx+AR0)
1100(12) *ARx(lk) addr=ARx+lk ARx加上16位长偏移值lk的和进行寻址,但
ARx=ARx 操作之后并不更新ARx 1101(13) *+ARx(lk) addr=ARx+lk ARx加上16位长偏移值lk的和进行寻址,并
ARx=ARx+lk 更新ARx的值 (不适用映射寄存器寻址) 1110(14) *+ARx(lk)% addr=circ(ARx+lk) ARx加上16位偏移值lk并循环寻址
ARx=circ(ARx+lk) (不适用映射寄存器寻址) 1111(15) *(lk) addr=lk 16位长偏移值(lk)进行完全寻址
(不属于间接寻址)
表(3A-2)单操作数寻址类型
下面将就这些寻址模式分别讨论:
1、递增/递减修改地址(MOD=0,1,2,or 3)
这类寻址模式可以在执行完寻址后再递增或递减,也可先将地址加1后再执行寻址,但应注意这只适用于写操作。
2、 利用偏移值修改地址(MOD=12 or 13)
该模式适用于固定步长寻址。
3、 利用索引修改地址(MOD=5 or 6)
该类模式实际上是用AR0的值作为索引值相加或相减ARx来寻址,用这类方法可以省
掉一条计算指令。
4、 循环寻址(MOD=8,9,10,11,or 14)
5
数字信号处理中的许多算法例如循环卷积、互相关、FIR滤波器等都需要应用内存中一块循环的缓存区;还有一些算法循环缓冲区作为一个滑动的窗口以取得最近的数据,并且当新数据进来时覆盖旧的数据,而这些利用循环缓冲区的地方可用循环寻址的方法方便地实现。
当采用循环寻址时就必须使用循环缓冲容量寄存器BK,BK用来放置循环缓冲区的大小。一个循环缓冲区的基地址必须满足以下条件:假设一个循环缓冲区的容量是R,那么就
N存在一个整数N(N是满足2>R的最小整数),则该缓存区的上边界地址的低位必须是N个0,例如BK的值是31,那么缓存区的基地址必须是XXXX XXXX XXX0 0000。 2
循环寻址有效基地址(EFB)是通过把所选用的辅助寄存器的低N位置成0而得到的,缓存区的结束地址(EOB)则是通过把辅助寄存器的低N位替换成BK的低N位得到的。循环缓冲的索引地址是取出辅助寄存器的低N位相加或相减步幅得到的。下面是使用循环寻址所应遵循的3条规则:
NN※ 循环寻址的最低地址应放在2的边界上,循环缓冲区的容量应小于2;
※ 步幅应小于或等于循环缓冲区的容量;
※ 第一次在循环缓冲区内寻址时,辅助寄存器必须指向循环缓冲区队列内的元素。
循环寻址的公式如下:
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
循环寻址既可用于单操作数寻址又可用于双操作数寻址。当BK为0时将导致循环寻址无效。应注意当进行双操作数寻址时其中一个地址的修改必须是ARx+0。图(3A-5)是循环寻址的框图,(3A-6)显示了循环缓冲区的应用。
6
图(3A-5)循环寻址框图
图(3A- 6)循环缓冲区的应用
5、比特翻转寻址(MOD=4 or 7)
比特翻转寻址是为FFT运算量身定做的,它可提高处理的速度,并适合各种基的快速傅立叶变换。在该寻址模式下,AR0的值定为FFT变换点数的一半,即当FFT变换的点数是2N时(N是整数),则AR0的值是N;在进行比特翻转寻址时,辅助寄存器应指向数据的物理地址,之后把AR0的内容加到辅助寄存器,应注意比特翻转寻址的进位是从左向右传递,而不同于普通的从右向左传递。例如:AR2保存数据的基地址是0110 0000,AR0的值是0000 21000,则AR2将这样变化: 2
*AR2+0B ;AR2 = 0110 0000 (0th value)
*AR2+0B ,AR2 = 0110 1000 (1st value)
*AR2+0B ;AR2 = 0110 0100 (2nd value)
*AR2+0B ;AR2 = 0110 1100 (3rd value)
*AR2+0B ;AR2 = 0110 0010 (4th value)
*AR2+0B ;AR2 = 0110 1010 (5th value)
*AR2+0B ;AR2 = 0110 0110 (6th value)
*AR2+0B ;AR2 = 0110 1110 (7th value)
表(3A-3) 显示了每步变化与AR2低4位的对应关系。
次序 初始值 翻转值 翻转次序
0 0000 0000 0
1 0001 1000 8
2 0010 0100 4 3 0011 1100 12
4 0100 0010 2
5 0101 1010 10 6 0110 0110 6
7 0111 1110 14
8 1000 0001 1 9 1001 1001 9
10 1010 0101 5
11 1011 1101 13 12 1100 0011 3
13 1101 1011 11
14 1110 0111 7 15 1111 1111 15
表(3A-3)比特翻转地址变化
2.5.2 双操作数( Dual-Operand Memory )寻址
这种寻址方式用于同时完成两次读操作或完成一次读操作和一次并行存储操作的指令。这些指令只用于间接寻址方式,而且指令长度均为一个字长。这种寻址方式对于加减运算、乘法运算、乘法累加运算以及对应于DSP的其他一些特殊数学运算是相当方便的。
7
我们分别用Xmem和Ymem来代表这两个数据存储器操作数。
※ Xmem是一个读操作数,但存储指令可把Xmem变为写操作数;
※ Ymem在两个读操作中是读操作数,在一读一写中是写操作数。
如果源操作数和目的操作数指向相同的地址,执行的顺序是先从该地址读取数据,后
写入数据。如果一个双操作数指令通过不同的寻址模式指向同一个辅助寄存器,那么以Xmod
域的寻址模式为准。
15~8 7 6 5 4 3 2 1 0
操作代码 Xmod Xar Ymod Yar
图(3A-7)双操作数指令格式
比特 名称 功能
15~8 操作代码 指令的操作代码
7~6 Xmod 指定数据空间操作数的寻址模式
5~4 Xar 指定Xmod的辅助寄存器
3~2 Ymod 指定数据空间操作数的寻址模式
1~0 Yar 定义Ymod的辅助寄存器
表(3A-4)双操作数指令位的功能
因为在选择寄存器时只提供了两比特的空间,因此在双操作数指令可选择的寄存器只有
4个,范围从AR2~AR5。
Xmod或 语法 功能 描述
Ymod
00(0) *Arx addr=Arx ARx是数据空间地址
01(1) *ARx- addr=Arx 存取后,ARx地址递减
ARx=ARx-1 10(2) *ARx+ addr=Arx 存取后,ARx地址递增
ARx=ARx+1
11(3) *Arx+0% addr=Arx 存取后,Arx加上AR0进行循环寻址 ARx=circ(ARx+AR0)
表(3A-5) 双操作数间接寻址类型
2.6 内存映射寄存器寻址
内存映射寄存器寻址可不通过DP和SP就修改内存映射寄存器的值,这在写寄存器时的
耗费是最小的,内存映射寄存器寻址既可用在直接寻址又可用在间接寻址。只有8条指令能
够应用内存映射寄存器寻址:
1. dst=MMR
2. MMR=src
3. MMR=pop()
4. push(MMR)
5. MMR=#lk
6. MMR=data(dmad)
7. data(dmad)=MMR
8. MMRy=MMRx
应注意下面的四种寻址类型不能使用内存映射寄存器寻址:
1. *ARx(lk)
2. *+ARx(lk)
3. *+ARx(lk)%
4. *(lk)
8
2.7 堆栈寻址
系统堆栈可在中断或程序分支时自动存储程序计数器,它也能用来存储一些其它内容到数据空间。堆栈的存储顺序是由高端内存地址到低端内存地址,而堆栈指针SP则用来记录堆栈最后放入的数据的地址。
push()和pop()两条指令使用了堆栈寻址。执行push()指令时,首先堆栈指针SP的值减小,然后进行压栈;执行pop()指令时,先从堆栈中弹出数据,再增加SP的值。
下例是向堆栈内压入X2的过程:
图(3A-8)压栈操作过程
其它影响堆栈和堆栈指针的操作有中断和程序分支。这些情况下,堆栈将存储程序计数器PC的内容。当程序从分支返回时,又会从堆栈中取出数据装入PC。SP = SP + K指令也会影响SP的内容。
3.数据类型
C54x规定了两种数据类型:16比特数据和32比特数据。大多数的指令都是针对16比特数据进行操作的。如果要对32比特数据进行操作,就必须使用特殊的代数汇编指令(见表5-6)。 在进行32比特数据的操作时,第一个字总是被作为最高有效字(MSW Most Significant Word),第二个字是最低有效字(LSW Least Significant Word)。当第一个字处于偶地址,那么第二个字处于下一个地址(地址值加1);如果第一个字在奇地址时,第二个字则放在上一个地址(地址值减1),图(3A-9)就显示了这一过程。
图(3A-9)32比特数据存储顺序
,, Syntax Expression Class Page WCycles
dst=scr+dbl(Lmem) if C16=0 1 1 9A ,9B 4-37 dst=dbl(Lmem) dst=Lmem+src dst=scr+dual(Lmem) if C16=1
dst+= dual(Lmem) dst(39-16)=Lmem(31-16)+src(31-16)
dst(15-0)=Lmem(15-0)+src(15-0)
dst=dadst(Lmem,T) if C16=0 1 1 9A ,9B 4-39
9
dst=Lmem+(T<<16+T)
if C16=1 dst(39-16)=Lmem(31-16)+T
dst(15-0)=Lmem(15-0)-T
src=dbl(Lmem)-src if C16=0 1 1 9A,9B 4-44
src=dual(Lmem)-src dst=Lmem-src
if C16=1 src(39-16)=Lmem(31-16)-src(39-16)
src(15-0)=Lmem(15-0)-src(15-0)
dst=dsadt(Lmem,T) if C16=0 1 1 9A ,9B 4-46
dst=Lmem+(T<<16+T) if C16=1
dst(39-16)=Lmem(31-16)-T
dst(15-0)=Lmem(15-0)+T
src=src-dbl(Lmem) if C16=0 1 1 9A ,9B 4-49 src-=dbl(Lmem) src=src-Lmem src=src-dual(Lmem) if C16=1
src-=dual(Lmem) src(39-16)= src(39-16)-Lmem(31-16)
src(15-0)= src(15-0)-Lmem(15-0)
dst=dbl(Lmem)-T if C16=0 1 1 9A ,9B 4-51 dst=dual(Lmem)-T dst=Lmem-(T<<16+T)
if C16=1
dst(39-16)=Lmem(31-16)-T dst(15-0)=Lmem(15-0)-T
表(3A-6)32比特操作指令
注:表(3A-6)的索引地址是代数指令集该指令的地址,详细请看spru179.pdf。
10
C54x DSP的代数汇编指令
C54x DSP的代数汇编指令可分为四种基本类型:算术运算指令、逻辑运算指令、程序
控制指令和载入、存储指令。表(3B-1)列出了在C54x代数指令集中使用的所有符号和缩
略语及其各自代表的涵义。
符 号 涵 义
A 累加器A
ALU 算术逻辑单元
AR 辅助寄存器(通用)
ARx 指定某一个辅助寄存器(0 , x , 7)
ARP 寄存器ST0中的辅助寄存器指针3-bit字段(用于指向当前正在使用的辅助寄存器)
ASM 寄存器ST1中5-bit累加器移位模式字段(-16 , ASM , 15) B 累加器B
BRAF 块重复有效标志
BRC 块重复计数器
bit_code 4-bit 用于指定一个数据存储区值的哪一位将被测试指令进行测试(0, bit_code ,
15)
C16 ST1中的算术模式位,用以选择双16位/双精度 C ST0中的进位位
CC 2-bit条件模式(0, CC , 3)
CMPT ST1中的兼容模式位
CPL ST0中的编译模式位
cond 代表一个条件的操作数(用于条件执行指令) [d] 延迟选项
DAB D地址总线
DAR DAB地址寄存器
dmad 16位的立即数据存储器地址(0, dmad , 65535) Dmem 数据存储器操作数
DP ST0中9-bit的数据存储器页指针字段(0, DP , 511) dst 目标累加器(A或B)
dst_ 与dst相反的目标累加器
EAB E地址总线
EAR EAB地址寄存器
extpmad 23位的立即程序存储器地址
FRCT ST1中的分数模式位
hi(A) 累加器A的31-16 位
HM ST1中的保持模式位
IFR 中断标志寄存器
INTM ST1中的中断模式位
11
K 少于9位的短立即数
k3 3位立即数(0 , k3 , 7)
k5 5位立即数(-16 , k5 , 15) k9 9位立即数(0 , k9 , 511) lk 16位长立即数
Lmem 使用长字寻址的32位数据存储器操作数 mmr 存储器映射寄存器
MMR
MMRx 存储器映射寄存器, AR0-AR7或SP MMRy
n 在条件执行指令之后的字的个数(n=1,2) N 指定状态寄存器( N=0, 状态寄存器ST0; N=1, 状态寄存器ST1)
OVA ST0中的累加器A的溢出标志 OVB ST0中的累加器B的溢出标志 Ovdst 指定目的累加器的溢出标志
Ovdst_ 与OVdst指定相反的目的累加器的溢出标志 Ovsrc 指定源累加器的溢出标志
Ovm ST1中的溢出模式位
PA 16位的立即端口地址(0, PA , 65535) PAR 程序地址寄存器
PC 程序计数器
pmad 16位的立即程序存储器地址(0, dmad , 65535) Pmem 程序存储器操作数
PMST 处理机模式状态寄存器
prog 程序存储器操作数
[R] 圆整操作
RC 重复计数器
REA 块重复结束地址
rnd 循环寻址
RSA 块重复起始地址
RTN 快速返回寄存器(用于[d]return_fast指令) SBIT 用于指定状态寄存器位的4-bit地址(0, SBIT ,15)
SHFT 4-bit移位值(0, SHFT ,15)
SHIFT 5-bit移位值(-16, SHIFT ,15) Sind 间接寻址的单数据存储器操作数 Smem 16位单数据存储器操作数
SP 堆栈指针
src 源累加器
ST0,ST1 状态寄存器0, 状态寄存器1
SXM ST1中的符号扩展模式位
T 暂存器
TC ST0中的测试/控制标志位
TOS 栈顶
12
TRN 临时寄存器
TS T寄存器中用于指定移位值的低六位(-16, TS ,15)
uns 无符号的
XF ST1中的扩展标志位
XPC 程序计数器扩展寄存器
Xmem 16位双数据存储器操作数(用于双数据操作数指令)
Ymem 16位双数据存储器操作数(用于双数据操作数指令和一些单数据操作数指令) - - SP SP减1
+ +SP SP加1
+ +PC PC加1
表(3B-1)
表(3B-2)和表(3B-3)分别列出了在C54x 代数指令集中使用的标号及其各自代表的涵义和运算符及其各自代表的涵义。
符 号 涵 义
黑体字符 代表不允许改变的字符
斜体字符 代表变量
[ x ] 方括号内部为可选项。
例:dst=src+Smem[<
> 左移,右移
<<< 逻辑左移
< , 小于,小于等于
> , 大于,大于等于
, != 不等于
, 位与
^ 位异或
| 位或
表(3B-3)
1.算术运算指令
算术运算指令分为加法指令、减法指令、乘法指令、乘法累加指令、乘法减法指令、32位操作数指令、特殊用途指令。这些指令的详尽说明分别见表(3B-4)至表(3B-9)。
字周编
语 法 功 能 节期号
数 数 1 src=src+Smem src=src+Smem 1 1 2 src=src+Smem<
TC=( AR0 < ARx )
TC=( AR0 != ARx )
表(3B-13)测试指令
3.程序控制指令
程序控制指令分为跳转指令、调用指令、中断指令、返回指令、重复指令、栈操作指令和复杂程序控制指令,详尽说明分别见表(3B-14)至表(3B-20)。
字周编节期语 法 功 能
号 数 数 1 goto pmad PC=pmad(15-0) 2
dgoto pmad
2 goto src PC=src(15-0) 1
dgoto src
3 if( Sind !=0 ) goto pmad 如果Sind , 0成立 2
if( Sind !=0 ) dgoto pmad 则PC=pmad(15-0)
4 if( cond [,cond [,cond ]]) goto pmad 如果条件成立 2
if(cond [,cond [,cond ]]) dgoto pmad 则PC=pmad(15-0)
5 far goto extpmad PC=pmad(15-0) 2
far dgoto extpmad XPC=pmad(22-16)
6 far goto src PC=src(15-0) 1
far dgoto src XPC=src(22-16)
表(3B-14)跳转指令
19
字周编节期语 法 功 能
号 数 数 1 call PC=pmad(15-0) 1 pmad
dcall pmad
2 call src PC=src(15-0) 1
dcall src
3 if( [, [,]]) call 如果条件成立 2 cond condcond pmad
if(cond [,cond [,cond ]]) dcall pmad 则PC=pmad(15-0)
4 far call extpmad PC=pmad(15-0) 2
far dcall extpmad XPC=pmad(22-16)
5 far call src PC=src(15-0) 1
far dcall src XPC=src(22-16)
表(3B-15)调用指令
字周编节期语 法 功 能
号 数 数 1 int( K ) - - SP ,+ + PC= TOS 1 3
PC=IPTR(15-7)+K<<2
INTM=1
2 trap( K ) - - SP ,+ + PC= TOS 1 3
PC=IPTR(15-7)+K<<2
表(3B-16)中断指令
字周编节期语 法 功 能
号 数 数 1 far return XPC=TOS,++SP,PC=TOS, 1
far dreturn ++SP
2 far return_enable XPC=TOS,++SP,PC=TOS, 1
far dreturn_enable ++SP,INTM=0
3 if( cond [,cond [,cond ]]) return 如果cond(s)成立 1
if( cond [,cond [,cond ]]) dreturn 则PC=TOS, ++SP
4 return PC=TOS, ++SP, INTM=0 1
dreturn
5 return_enable PC=TOS, ++SP, INTM=0 1
dreturn_enable
6 return_fast PC=RTN, ++SP, INTM=0 1
dreturn_fast
表(3B-17)返回指令
20
字周编节期语 法 功 能
号 数 数 1 repeat( Smem ) 重复执行单条指令,RC=Smem 1 1 2 repeat(#K ) 重复执行单条指令,RC=#K 1 1 3 repeat(#lk ) 重复执行单条指令,RC=#lk 2 2 4 blockrepeat(pmad ) 重复执行多条指令,RSA=PC+2/4 , REA=pmad , 2 4/2
dblockrepeat() BRAF=1 pmad
5 repeat(#lk ) , dst=0 重复执行单条指令,RC=#lk , dst=0 2 2
表(3B-18)重复指令
字周编节期语 法 功 能
号 数 数 1 SP=SP + K SP=SP + K 1 1 2 Smem=pop() Smem=TOS ,++SP 1 1 3 MMR= pop() MMR=TOS ,++SP 1 1
mmr( MMR ) = pop()
4 push( Smem) - - SP , TOS= Smem 1 1 5 push(MMR) - - SP , TOS= MMR 1 1
push(mmr( MMR ))
表(3B-19)栈操作指令
字周编节期语 法 功 能
号 数 数 1 idle( K ) idle( K ) 1 4 2 mar( K ) 如果CMPT=0, 则修改Arx; 1 1
如果CMPT=1 且ARx,AR0, 则修改Arx 且ARP=x;
如果CMPT=1 且Arx=AR0, 则修改Arx (ARP). 3 nop 无操作 1 1 4 reset 软件复位 1 3 5 SBIT=0 STN(SBIT) = 0 1 1
ST( N, SBIT )=0
6 SBIT=1 STN(SBIT) = 1 1 1
ST( )=1 N, SBIT
7 if( cond [,cond [,cond ]]) 如果条件成立, 1 1
execute( n ) 则执行下面n条指令。n =1,2
表(3B-20)复杂程序控制指令
21
4.载入和存储指令
载入和存储指令分为载入指令、存储指令、条件存储指令、并行载入存储指令、并行载入乘法指令、并行存储加/减指令、并行存储乘法指令和复杂的载入存储指令。这些指令的详尽说明分别见表(3B-21)至表(3B-28)。
字周编节期语 法 功 能
号 数 数 1 dbl( ) dst= Lmem 1 1 dst=Lmem
2 dst= Smem 1 1 dst=Smem
3 dst= Smem <src(15-0) 则Smem=src(31-16) 1 1
如果src(31-16)数据存储区的数据搬移 2 5 MMR = data( dmad ) 数据存储区—>MMR的数据搬移 2 6 prog( pmad ) =Smem 数据存储区—>程序存储区的数据搬移 4 7 Smem=data( dmad ) 数据存储区—>数据存储区的数据搬移 2 8 data( dmad )=MMR MMR—>数据存储区 的数据搬移 2 9 Smem=prog(pmad ) 程序存储区—>数据存储区 的数据搬移 3 10 Smem = prog( A ) 将程序存储区的数据读入数据存储区 5 11 Prog( A ) = Smem 将数据存储区的数据写入程序存储区 5
表(3B-29)当重复执行时成为单机器周期指令的多机器周期指令
1 Smem=Smem+#K 将常数加到数据存储区 2 Smem=Smemlk 将常数和数据存储区的数据进行逻辑与 3 [d]goto pmad 无条件跳转
4 [d]goto src 跳转到累加器地址
5 if( Sind!=0) [d]goto pmad 当辅助寄存器不为零时,进行跳转 6 if( cond [ ,cond [,cond]]) [d]goto pmad 条件跳转
7 [d]call src 无条件调用
8 [d]call pmad 调用到累加器地址
9 if( cond [ ,cond [,cond]]) [d]call pmad 条件调用
10 TC=(ARx==AR0) 与辅助寄存器进行比较
TC=(ARx>AR0)
TC=(Arx
本文档为【C54x DSP的寻址方式及代数汇编指令】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑,
图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。