第3章 DSP指令系统及特点
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
存放到Xmen;否则Xmen内容不变。
STRCD Xmen, cond; 条件满足,把T寄存器内容存放到Xmen,
否则Xmen内容不变。
SRCCD Xmen, cond; 条件满足,把块循环计数器(BRC)的内
容存放到Xmen,否则Xmen内容不变。
例:
RC CC BC
否则
TC ;若TC=1,则返回,否则往下执行 sub ,BNEQ ;若累加器B≠0,则调用sub,否则往下执行 new, AGT, AOV ;若累加器A>0且溢出,则跳转至new,
LD 93h, A ;把地址为93h单元中的数送入累加器A
2. 绝对地址寻址
指令中包含所要寻址的存储单元的16位地址,这 个16位地址可以是地址标号或16位符号常数。
1)数据存储器(dmad)寻址 2)程序存储器(pmad)寻址 3)端口地址(PA)寻址 4)长立即数*(lk)寻址
;必须所有的条件都得到满足 才跳转pmad.
条件组合: 第一组:可以同时从A类和B类中选一个条件,但不能从同一类中选两 条件;而且,测试的累加器必须是同一个。 第二组:可以同时在A、B、C三类中可选一个条件,但不能从同一类 中选择两个条件。
第一组 第二组
A
类
B
类
A
类
TC
B
C
类
C
类
EQ NEQ LT LEQ GT GEQ
程序存储器(pmad)寻址
程序存储器(pmad)寻址使用符号(符号地址)或一 个表示16位地址的立即数来给出程序空间的地址。 例如: TABLE,*AR4 ;把TABLE所标注的程序存储器单元
中的数复制到AR4所指定的数据存 储器中去
MVPD
端口地址(PA)寻址
端口地址(PA)寻址使用一个符号(符号地址)或一 个表示16位地址的立即数来给出外部I/O口地址。 例如: PORTR FIFO ,*AR5;
把端口地址为FIFO的I/O口中 的数复制到AR5指定的数据存 储器单元中
长立即数*(lk)寻址
长立即数*(lk)寻址使用一个符号(符号地址)或一 个表示16位地址的立即数来指定数据存储空间的一个 地址。 例如,,指令可写为: LD *(BUFFER),A ;把数据空间中地址为BUFFER
单元中的数据传送到累加器A
…
5. 间接寻址
间接寻址通过辅助寄存器(AR0~AR7)中的16 位地址进行寻址。 特点:间接寻址不仅能从存储器中读或写一个单 16位数据操作数,还能在一个指令中访问两个数 据存储器单元,即从两个独立的存储单元读数据, 或读一个存储单元同时写另一个存储单元,或读 写两个连续的存储单元。 LD *AR1+, T MPY *AR2, *AR3, A
1. 分支转移
利用程序的分支与转移可执行分支转移、循环控制和子程 序操作。C54x有两种分支转移形式:
无条件分支转移:
B[D],用指令后的地址加载PC BACC[D],用指定累加器的低16位作为地址加载PC BC[D] ;条件得到满足,用指令中给出的地址加载PC BANZ[D] ;若当前辅助寄存器不等于0,用指令中给出的地址加载 PC
R=31
……
* * ***1 1111(EOB)
位倒序寻址
地址以倒序方式产生, 进位从左向右,而不是 从右向左。
0110 + 1100 1001
AR1=(0110 0000)2 AR0=(0000 1000)2
RPT #15 ; PORTW *AR1+0B, PA 在输出口得到连续顺序排号的信号 值
7. 堆栈寻址
堆栈寻址用于在中断或子程序调用时自动保存PC值或用于保 存和传递其他数据。
堆栈由高地址向低地址增长, 利用16位的存储器映象寄存器——堆栈指针(SP)对堆栈进行寻址, SP总是指向压入堆栈的最后一个数据。 PSHD PSHM POPD POPM 把一个数据存储器数据压入堆栈; SP 把一个存储器映象寄存器中的值压入堆栈; 从堆栈中弹出一个数据至数据存储器单元; 从堆栈中弹出一个数据至存储器映象寄存器。
有条件调用与返回指令
CC[D]:如果指令中所规定的条件得到满足,则将返回地址压入堆栈,然后用 所指定的地址加载PC; RC[D]:如果指令中所规定的条件得到满足,则将栈顶的返回地址加载PC。
3. 条件指令中的条件判断(条件指令中的各种条件见表3-5)
多重条件判断: 例 BC pmad, cond[, cond[, cond]]
ARx
* * ***0 0000(EFB)
循坏缓冲器长度R需装入缓冲区 长度寄存器BK。 缓冲器基地址的最低N位必须为 0,N是满足2N>R的最小整数。 循环寻址算法: ARx指向循环缓冲区(index是 ARx的低N位) 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
条件分支转移:
带延迟的分支转移,在执行完紧跟分支转移指令后的一条双字指令或两 条单字指令后再进行转移;对不带延迟的分支转移,则不予执行,立即 进行跳转。
2. 调用与返回
调用指令进行子程序或函数调用时,DSP会中断当前运行的程序,转移到 程序存储器的其它地址继续运行。转移前,原程序的下条指令的地址被压 入堆栈,而在返回时则将这个地址弹出至PC,继续执行原来的程序。 无条件调用与返回指令
数据存储器(dmad)寻址
数据存储器寻址使用符号(符号地址)或一个表示16 位地址的立即数来指明寻址的数据存储单元的16位绝 对地址。 例如: SMAPLE,*AR3; 把SAMPLE标注的数据空间地址里的
数复制到AR3所指定的数据存储器单 元中
MVKD
( 辅助寄存器AR0~AR7前的 * 号表示对辅助寄存器间接寻址)
CALL[D]:将返回地址压入堆栈,用指令所规定的地址加载PC; CALA[D]:将返回地址压入堆栈,用指定累加器的低16位加载PC; RET[D]:用栈顶的返回地址加载PC; RETE[D]:用栈顶的返回地址加载PC,并开放中断; RETF[D]:用快速返回寄存器RTN中的返回地址加载PC,并开放中断
例:MPY
*AR2,
*AR3,
A
6. 存储器映象寄存器寻址
存储器映象寄存器寻址用于修改存储器映象寄存器 (MMR)中的内容,而不影响当前数据页指针DP和当前 堆栈指针SP。
直接寻址:高9位数据存储器地址置0,利用指令中的低7位地址访 问MMR。 间接寻址:高9位数据存储器地址置0,按当前辅助寄存器中的低7 位地址访问MMR。 有8条指令可以进行存储器映像寻址: LDM MMR, dst POPM MMR MVDM dmad, MMR PSHM MMR MVMD MMR, dmad STLM src, MMR MVMM MMRx, MMRy STM #1K, MMR
堆栈寻址的4条指令:
… … … …
栈顶
栈低
第二节 程序地址的生成
程序计数器PC:存放即将取指的某条指令或即将访问的某个立即操作 数或系数表在程序存储器中的地址。 将程序存储器地址加载到PC的途径: 复位:PC=FF80h 顺序执行指令:PC=PC+1 分支转移:分支转移指令后的16位立即数加载PC 由累加器分支转移:用累加器A或B的低16位值加载PC 子程序调用:先将PC+2压入堆栈,用调用指令后的16位立即数 加载PC,执行完子程序返回时,将栈顶值弹出加载PC。 从累加器调用子程序:先将PC+1压入栈,用累加器A或B的低16 位值加载PC,执行完子程序返回时,将栈顶值弹出加载PC。 块重复循环:当执行到块重复结束地址(REA),时,将块重复的 起始地址(RSA)加载PC。 中断:将PC压入堆栈,用适当的中断地址加载PC,返回时将栈顶 弹出至PC。
Smem
A 程序存储器
Smem
数据存储器
这两条指令在重复方式下执行,能够对累加器自动增量。
4. 直接寻址
指令中包含数据存储器地址(dma)的低7位。 实际地址由数据页指针DP或堆栈指针SP结合这7 位地址偏移量,共同形成16位的数据存储器地址。 ADD @x,A
用一个符号或一个常数来确定偏移值,如上面语句中 的 x 表示数据存储器的低7位值 每条指令代码只有一个字
允许所有使用Smem寻址的指令去访问数据空间的任意单元而不改变 数据页指针(DP)的值,也不对ARx进行初始化。 不能与循环指令(RPT,RPTZ)一起使用。
3. 累加器寻址
累加器寻址是用累加器中的数值作为一个地址读写程序 存储器。
READA
Smem
;
A
Smem
程序存储器
数据存储器
WRITA
OV NOV
BIO NBIO
NTC
NC
其它条件指令:
条件执行指令
XC
n , cond[, cond[, cond]]
n=1或2 ;条件得到满足,执行下面的1条或2条指令,条件不满足, 则执行1条或2条NOP指令。
条件存储指令: SACCD src, Xmen, cond; 条件满足,累加器高16位左移ASM位
CPL=0,9位的数据页指针与7位dma域结合形成16 位数据存储器地址。
CPL=1,16位的堆栈指针SP的值加上7位dma域形 成16位数据存储器地址。
例3.1
数据存储器
LD LD ADD
#x , DP @u , A @v, A
DP u v …
SSBX LD ADD
CPL @X1 , A @Y2 , A
单操作数寻址
15~8
7 I=1
6~3 MOD
2~0 ARF
指令代码格式:
操作码
CMPT=0 标准方式。ARF确定辅助寄存器,(ARP=0); CMPT=1 兼容方式。如果ARF=0,就用ARP来选择辅助寄存器, 否则,用ARF来确定辅助寄存器。访问后,ARF的值装入ARP。
1)循环寻址
.bss STM STM LD loop: ADD BANZ STL
双操作数寻址
指令代码格式
15~8 操作码 7 6 5 Xar 4 3 2 1 0 Xmod Ymod Yar
占用程序空间小,运行速度快,用在完成两个读或一个 读并行一个写的指令中。 只有AR2、AR3、AR4及AR5四个辅助寄存器能用于双 操作数寻址。 双数据存储器操作数间接寻址类型为*ARx、*ARx-、 *ARx+、*ARx+0%。
第三章 DSP指令系统及特点
第一节 TMS320C54x的寻址方式
(1)立即数寻址 (2)绝对地址寻址 (3)累加器寻址 (4)直接寻址 (5)间接寻址 (6)存储器映射寄存器寻址 (7)堆栈寻址
寻址指令中用到的缩写符号及其含义
缩写符号 含义
Smem Xmem
16位单数据存储器操作数 在双操作数指令及某些单操作数指令中所用的16位双数据 存储器操作数,从DB总线上读出 在双操作数指令中所用的16位双数据存储器操作数,从 CB总线上读出;在读同时并行写的指令中表示写操作数 16位立即数——数据存储器地址(0~65535) 16位立即数——程序存储器地址(0~65535)
往下执行 单指令中的多个条件是“与”的关系。如果需要两个条件是“或”的关系,可 以写成两条指令。如: BC new, AGT BC new, AOV
计算y=x1+x2+x3+x4
.bss x,4 y,1 #x,AR1 #3,AR2 ;AR2作为循环计数器,初值为4 #0,A *AR1+,A loop,*AR2- ; A,y
Ymem dmad
pmad PA src dst lk
16位立即数——I/O口地址(0~65535)
源累加器(A或B) 目的累加器(A或B)
16位长立即数
1. 立即数寻址
LD
#93h,
A
;把立即数93h送入累加器A
指令中包含立即操作数。 立即数分为短立即数(3、5、8或9位)和16位的长立即 数。短立即数指令编码可以为一个字长,16位立即数的指Hale Waihona Puke Baidu令编码为两个字长。 立即数寻址指令中在数字或符号常数前面加一个“#”号, 来表示立即数。
STRCD Xmen, cond; 条件满足,把T寄存器内容存放到Xmen,
否则Xmen内容不变。
SRCCD Xmen, cond; 条件满足,把块循环计数器(BRC)的内
容存放到Xmen,否则Xmen内容不变。
例:
RC CC BC
否则
TC ;若TC=1,则返回,否则往下执行 sub ,BNEQ ;若累加器B≠0,则调用sub,否则往下执行 new, AGT, AOV ;若累加器A>0且溢出,则跳转至new,
LD 93h, A ;把地址为93h单元中的数送入累加器A
2. 绝对地址寻址
指令中包含所要寻址的存储单元的16位地址,这 个16位地址可以是地址标号或16位符号常数。
1)数据存储器(dmad)寻址 2)程序存储器(pmad)寻址 3)端口地址(PA)寻址 4)长立即数*(lk)寻址
;必须所有的条件都得到满足 才跳转pmad.
条件组合: 第一组:可以同时从A类和B类中选一个条件,但不能从同一类中选两 条件;而且,测试的累加器必须是同一个。 第二组:可以同时在A、B、C三类中可选一个条件,但不能从同一类 中选择两个条件。
第一组 第二组
A
类
B
类
A
类
TC
B
C
类
C
类
EQ NEQ LT LEQ GT GEQ
程序存储器(pmad)寻址
程序存储器(pmad)寻址使用符号(符号地址)或一 个表示16位地址的立即数来给出程序空间的地址。 例如: TABLE,*AR4 ;把TABLE所标注的程序存储器单元
中的数复制到AR4所指定的数据存 储器中去
MVPD
端口地址(PA)寻址
端口地址(PA)寻址使用一个符号(符号地址)或一 个表示16位地址的立即数来给出外部I/O口地址。 例如: PORTR FIFO ,*AR5;
把端口地址为FIFO的I/O口中 的数复制到AR5指定的数据存 储器单元中
长立即数*(lk)寻址
长立即数*(lk)寻址使用一个符号(符号地址)或一 个表示16位地址的立即数来指定数据存储空间的一个 地址。 例如,,指令可写为: LD *(BUFFER),A ;把数据空间中地址为BUFFER
单元中的数据传送到累加器A
…
5. 间接寻址
间接寻址通过辅助寄存器(AR0~AR7)中的16 位地址进行寻址。 特点:间接寻址不仅能从存储器中读或写一个单 16位数据操作数,还能在一个指令中访问两个数 据存储器单元,即从两个独立的存储单元读数据, 或读一个存储单元同时写另一个存储单元,或读 写两个连续的存储单元。 LD *AR1+, T MPY *AR2, *AR3, A
1. 分支转移
利用程序的分支与转移可执行分支转移、循环控制和子程 序操作。C54x有两种分支转移形式:
无条件分支转移:
B[D],用指令后的地址加载PC BACC[D],用指定累加器的低16位作为地址加载PC BC[D] ;条件得到满足,用指令中给出的地址加载PC BANZ[D] ;若当前辅助寄存器不等于0,用指令中给出的地址加载 PC
R=31
……
* * ***1 1111(EOB)
位倒序寻址
地址以倒序方式产生, 进位从左向右,而不是 从右向左。
0110 + 1100 1001
AR1=(0110 0000)2 AR0=(0000 1000)2
RPT #15 ; PORTW *AR1+0B, PA 在输出口得到连续顺序排号的信号 值
7. 堆栈寻址
堆栈寻址用于在中断或子程序调用时自动保存PC值或用于保 存和传递其他数据。
堆栈由高地址向低地址增长, 利用16位的存储器映象寄存器——堆栈指针(SP)对堆栈进行寻址, SP总是指向压入堆栈的最后一个数据。 PSHD PSHM POPD POPM 把一个数据存储器数据压入堆栈; SP 把一个存储器映象寄存器中的值压入堆栈; 从堆栈中弹出一个数据至数据存储器单元; 从堆栈中弹出一个数据至存储器映象寄存器。
有条件调用与返回指令
CC[D]:如果指令中所规定的条件得到满足,则将返回地址压入堆栈,然后用 所指定的地址加载PC; RC[D]:如果指令中所规定的条件得到满足,则将栈顶的返回地址加载PC。
3. 条件指令中的条件判断(条件指令中的各种条件见表3-5)
多重条件判断: 例 BC pmad, cond[, cond[, cond]]
ARx
* * ***0 0000(EFB)
循坏缓冲器长度R需装入缓冲区 长度寄存器BK。 缓冲器基地址的最低N位必须为 0,N是满足2N>R的最小整数。 循环寻址算法: ARx指向循环缓冲区(index是 ARx的低N位) 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
条件分支转移:
带延迟的分支转移,在执行完紧跟分支转移指令后的一条双字指令或两 条单字指令后再进行转移;对不带延迟的分支转移,则不予执行,立即 进行跳转。
2. 调用与返回
调用指令进行子程序或函数调用时,DSP会中断当前运行的程序,转移到 程序存储器的其它地址继续运行。转移前,原程序的下条指令的地址被压 入堆栈,而在返回时则将这个地址弹出至PC,继续执行原来的程序。 无条件调用与返回指令
数据存储器(dmad)寻址
数据存储器寻址使用符号(符号地址)或一个表示16 位地址的立即数来指明寻址的数据存储单元的16位绝 对地址。 例如: SMAPLE,*AR3; 把SAMPLE标注的数据空间地址里的
数复制到AR3所指定的数据存储器单 元中
MVKD
( 辅助寄存器AR0~AR7前的 * 号表示对辅助寄存器间接寻址)
CALL[D]:将返回地址压入堆栈,用指令所规定的地址加载PC; CALA[D]:将返回地址压入堆栈,用指定累加器的低16位加载PC; RET[D]:用栈顶的返回地址加载PC; RETE[D]:用栈顶的返回地址加载PC,并开放中断; RETF[D]:用快速返回寄存器RTN中的返回地址加载PC,并开放中断
例:MPY
*AR2,
*AR3,
A
6. 存储器映象寄存器寻址
存储器映象寄存器寻址用于修改存储器映象寄存器 (MMR)中的内容,而不影响当前数据页指针DP和当前 堆栈指针SP。
直接寻址:高9位数据存储器地址置0,利用指令中的低7位地址访 问MMR。 间接寻址:高9位数据存储器地址置0,按当前辅助寄存器中的低7 位地址访问MMR。 有8条指令可以进行存储器映像寻址: LDM MMR, dst POPM MMR MVDM dmad, MMR PSHM MMR MVMD MMR, dmad STLM src, MMR MVMM MMRx, MMRy STM #1K, MMR
堆栈寻址的4条指令:
… … … …
栈顶
栈低
第二节 程序地址的生成
程序计数器PC:存放即将取指的某条指令或即将访问的某个立即操作 数或系数表在程序存储器中的地址。 将程序存储器地址加载到PC的途径: 复位:PC=FF80h 顺序执行指令:PC=PC+1 分支转移:分支转移指令后的16位立即数加载PC 由累加器分支转移:用累加器A或B的低16位值加载PC 子程序调用:先将PC+2压入堆栈,用调用指令后的16位立即数 加载PC,执行完子程序返回时,将栈顶值弹出加载PC。 从累加器调用子程序:先将PC+1压入栈,用累加器A或B的低16 位值加载PC,执行完子程序返回时,将栈顶值弹出加载PC。 块重复循环:当执行到块重复结束地址(REA),时,将块重复的 起始地址(RSA)加载PC。 中断:将PC压入堆栈,用适当的中断地址加载PC,返回时将栈顶 弹出至PC。
Smem
A 程序存储器
Smem
数据存储器
这两条指令在重复方式下执行,能够对累加器自动增量。
4. 直接寻址
指令中包含数据存储器地址(dma)的低7位。 实际地址由数据页指针DP或堆栈指针SP结合这7 位地址偏移量,共同形成16位的数据存储器地址。 ADD @x,A
用一个符号或一个常数来确定偏移值,如上面语句中 的 x 表示数据存储器的低7位值 每条指令代码只有一个字
允许所有使用Smem寻址的指令去访问数据空间的任意单元而不改变 数据页指针(DP)的值,也不对ARx进行初始化。 不能与循环指令(RPT,RPTZ)一起使用。
3. 累加器寻址
累加器寻址是用累加器中的数值作为一个地址读写程序 存储器。
READA
Smem
;
A
Smem
程序存储器
数据存储器
WRITA
OV NOV
BIO NBIO
NTC
NC
其它条件指令:
条件执行指令
XC
n , cond[, cond[, cond]]
n=1或2 ;条件得到满足,执行下面的1条或2条指令,条件不满足, 则执行1条或2条NOP指令。
条件存储指令: SACCD src, Xmen, cond; 条件满足,累加器高16位左移ASM位
CPL=0,9位的数据页指针与7位dma域结合形成16 位数据存储器地址。
CPL=1,16位的堆栈指针SP的值加上7位dma域形 成16位数据存储器地址。
例3.1
数据存储器
LD LD ADD
#x , DP @u , A @v, A
DP u v …
SSBX LD ADD
CPL @X1 , A @Y2 , A
单操作数寻址
15~8
7 I=1
6~3 MOD
2~0 ARF
指令代码格式:
操作码
CMPT=0 标准方式。ARF确定辅助寄存器,(ARP=0); CMPT=1 兼容方式。如果ARF=0,就用ARP来选择辅助寄存器, 否则,用ARF来确定辅助寄存器。访问后,ARF的值装入ARP。
1)循环寻址
.bss STM STM LD loop: ADD BANZ STL
双操作数寻址
指令代码格式
15~8 操作码 7 6 5 Xar 4 3 2 1 0 Xmod Ymod Yar
占用程序空间小,运行速度快,用在完成两个读或一个 读并行一个写的指令中。 只有AR2、AR3、AR4及AR5四个辅助寄存器能用于双 操作数寻址。 双数据存储器操作数间接寻址类型为*ARx、*ARx-、 *ARx+、*ARx+0%。
第三章 DSP指令系统及特点
第一节 TMS320C54x的寻址方式
(1)立即数寻址 (2)绝对地址寻址 (3)累加器寻址 (4)直接寻址 (5)间接寻址 (6)存储器映射寄存器寻址 (7)堆栈寻址
寻址指令中用到的缩写符号及其含义
缩写符号 含义
Smem Xmem
16位单数据存储器操作数 在双操作数指令及某些单操作数指令中所用的16位双数据 存储器操作数,从DB总线上读出 在双操作数指令中所用的16位双数据存储器操作数,从 CB总线上读出;在读同时并行写的指令中表示写操作数 16位立即数——数据存储器地址(0~65535) 16位立即数——程序存储器地址(0~65535)
往下执行 单指令中的多个条件是“与”的关系。如果需要两个条件是“或”的关系,可 以写成两条指令。如: BC new, AGT BC new, AOV
计算y=x1+x2+x3+x4
.bss x,4 y,1 #x,AR1 #3,AR2 ;AR2作为循环计数器,初值为4 #0,A *AR1+,A loop,*AR2- ; A,y
Ymem dmad
pmad PA src dst lk
16位立即数——I/O口地址(0~65535)
源累加器(A或B) 目的累加器(A或B)
16位长立即数
1. 立即数寻址
LD
#93h,
A
;把立即数93h送入累加器A
指令中包含立即操作数。 立即数分为短立即数(3、5、8或9位)和16位的长立即 数。短立即数指令编码可以为一个字长,16位立即数的指Hale Waihona Puke Baidu令编码为两个字长。 立即数寻址指令中在数字或符号常数前面加一个“#”号, 来表示立即数。