第 3章 TMS320C54x的数据寻址方式
? 3.1 立即寻址
? 3.2 绝对寻址
? 3.3 累加器寻址
? 3.4 直接寻址
? 3.5 间接寻址
? 3.6 存储器映象寄存器寻址
? 3.7 堆栈寻址
TMS320C54x DSP提供以下 7种基本数据寻址方式。
( 1) 立即数寻址
( 2) 绝对地址寻址
( 3) 累加器寻址
( 4) 直接寻址
( 5) 间接寻址
( 6) 存储器映射寄存器寻址
( 7) 堆栈寻址
表 3-1 寻址指令中用到的缩写符号及其含义
缩写符号 含义
Smem 16位单数据存储器操作数
Xmem 在双操作数指令及某些单操作数指令中所用的 16位双数据存储
器操作数,从 DB总线上读出
Ymem 在双操作数指令中所用的 16位双数据存储器操作数,从 CB总线
上读出;在读同时并行写的指令中表示写操作数
dmad 16位立即数 —— 数据存储器地址( 0~65535)
pmad 16位立即数 —— 程序存储器地址( 0~65535)
PA 16位立即数 —— I/O口地址( 0~65535)
src 源累加器( A或 B)
dst 目的累加器( A或 B)
lk 16位长立即数
3.1 立即寻址
? 在立即寻址方式中, 指令中包括了立即操作数 。
? 一条指令中可对两种立即数编码, 一种是短立即
数 ( 3,5,8或 9位 ), 另一种是 16位的长立即数 。
短立即数指令编码为一个字长, 16位立即数的指
令编码为两个字长 。
? 立即数寻址指令中在数字或符号常数前面加一个
,#, 号, 来表示立即数 。
返回首页
3.2 绝对寻址
? 3.2.1 数据存储器( dmad) 寻址
? 3.2.2 程序存储器( pmad) 寻址
? 3.2.3 端口地址( PA) 寻址
? 3.2.4 长立即数 *( lk) 寻址
返回首页
3.2.1 数据存储器( dmad) 寻址
? 使用 数据存储器寻址的指令有:
MVDK Smem,dmad MVDM dmad,MMR
MVKD dmad,Smem MVMD MMR,dmad
? 数据存储器寻址使用符号 ( 符号地址 ) 或一个表
示 16位地址的立即数来指明寻址的数据存储单元
的 16位绝对地址 。 例如:
MVKD SMAPLE,*AR5;
返回本节
3.2.2 程序存储器( pmad) 寻址
? 使用程序存储器寻址的指令有:
? FIRS Xmem,Ymem,pmad MACD Smem,pmad,src
? MACP Smem,pmad,src MVDP Smem,pmad
? MVPD pmad,Smem
? 程序存储器 ( pmad) 寻址使用符号 ( 符号地址 ) 或一个
表示 16位地址的立即数来给出程序空间的地址 。 例如,
把程序存储器中标号为 TABLE单元中的值复制到 AR7所
指定的数据存储器中去, 指令可写为:
? MVPD TABLE,*AR7;
返回本节
3.2.3 端口地址( PA) 寻址
? 使用端口地址的指令有:
PORTR PA,Smem
PORTW Smem,PA
? 端口地址 ( PA) 寻址使用一个符号 ( 符号地址 )
或一个表示 16位地址的立即数来给出外部 I/O口地
址 。 例如:
PORTR FIFO,*AR5;
返回本节
3.2.4 长立即数 *( lk) 寻址
? 长立即数 *( lk) 寻址用于所有支持单数据存储器
操作数 ( Smem) 的指令 。
? 长立即数 *( lk) 寻址使用一个符号 ( 符号地址 )
或一个表示 16位地址的立即数来指定数据存储空
间的一个地址 。 例如, 把数据空间中地址为
BUFFER单元中的数据传送到累加器 A,指令可
写为:
LD *( BUFFER), A
返回本节
3.3 累加器寻址
? 累加器寻址是用累加器中的数值作为一个地址读
写程序存储器 。 共有两条指令可以采用累加器寻
址:
READA Smem
WRITA Smem
返回首页
3.4 直接寻址
? 在直接寻址方式中, 指令中包含数据存储器地址
( dma) 的低 7位, 这 7位 dma作为地址偏移量,
结合基地址 ( 由数据页指针 DP或堆栈指针 SP给
出 ) 共同形成 16位的数据存储器地址 。 使用这种
寻址方式, 用户可在不改变 DP或 SP的情况下,
对一页内的 128个存储单元随机寻址 。 采用这种
寻址方式的好处是指令为单字指令, 数据存储器
地址 ( dma) 的低 7位放在指令字中 ( 如图 3-1、
3-2所示 ) 。
返回首页
图 3-1 DP作为基地址的直接寻址方式
图 3-2 SP作为基地址的直接寻址方式
返回本节
3.5 间接寻址
? 3.5.1 单操作数寻址
? 3.5.2 双操作数寻址
返回首页
3.5.1 单操作数寻址
? 表 3-2列出了单数据存储器 ( Smem) 操作数间接
寻址类型 。
? 特殊的间接寻址方式有:
1,循环寻址
2,倒序寻址 ( 如表 3-3所示 )
表 3-2 单数据存储器操作数间接寻址类型
表 3-3 位倒序寻址
返回本节
3.5.2 双操作数寻址
? 双数据存储器操作数间接寻址类型为 *ARx、
*ARx-,*ARx+,*ARx+0%。
? 所用辅助寄存器只能是 AR2,AR3,AR4,AR5。
? 其特点是:占用程序空间小, 运行速度快, 在一
个机器周期内通过两个 16位数据总线 ( C和 D)
读两个操作数 。 指令中 Xmem表示从 DB总线上读
出的 16位操作数, Ymem表示从 CB总线上读出
的 16位操作数 。
返回本节
3.6 存储器映象寄存器寻址
? 存储器映象寄存器寻址用于修改存储器映象寄存
器 ( MMR) 中的内容, 而不影响当前数据页指针
DP和当前堆栈指针 SP。 由于这种方式不需要修
改 DP和 SP,对寄存器的写操作开销最小 。 存储
器映象寄存器寻址可用于直接寻址和间接寻址 。
返回首页
3.7 堆栈寻址
? 当发生中断或子程序调用时, 系统堆栈自动保存
PC值 。 堆栈也可以用于保存和传递其他数据 。 堆
栈由高地址向低地址增长, 处理器使用 16位的存
储器映象寄存器 —— 堆栈指针 ( SP) 对堆栈进行
寻址, SP总是指向压入堆栈的最后一个数据 。
返回首页
? 有 4条使用堆栈寻址的指令:
? PSHD 把一个数据存储器数据压入堆栈;
? PSHM 把一个存储器映象寄存器中的值压入堆栈;
? POPD 从堆栈中弹出一个数据至数据存储器单元;
? POPM 从堆栈中弹出一个数据至存储器映象寄存
器 。
返回本节