第1.7__程序存储器地址生成方式

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

TMS320C54x的寻址方式小结
寻址方式 特点 立即数寻 操作数就在指令中,运行比较慢,并要 址 求较多的存储空间 允许寻址任何一个数据存储器单元中的操 绝对寻址 作数,运行速度较慢,并要求较多的存储 空间 累加器寻 址 直接寻址 利用累加器指向程序存储单元的地址 指令中包含的数据存储器低7位地址,与 DP的9位数拼接或与SP中16位数相加形 成16位地址,可单周期寻址128个单元 通过辅助寄存器和辅助寄存器指针,寻址 数据存储空间的任何一个单元,并自动的 增量/减量、变址寻址、循环寻址、位倒 序寻址 应用场合 表示常数,对寄存器初 始化
位倒序寻址是DSP的一种特殊处理方式,是专门为快速傅立叶变换FFT 而设计的,这种寻址方式可以显著提高程序的执行速度和存储区的利用 效率。 使用时,AR0存放的整数N为FFT点数的一半,另一个辅助寄存器ARx 指向数据存放的单元,当使用位倒序寻址把AR0加到辅助寄存器中时, 地址以位倒序的方式产生,即进位是从左向右,而不是通常的从右向 1010 1010 左。例如
1.6 数据寻址方式
间接寻址
(1) 循环寻址 使用循环寻址时,必须遵循以下三个原则: 1) 循环缓冲器的长度R小于26,且地址从一个低N 位为0的地址开始。 2) 步长小于或等于循环缓冲器的长度。 3) 所使用的辅助寄存器必须指向缓冲器单元。
1.6 数据寻址方式
间接寻址
(2) 位倒序寻址
1.单操作数寻址
MOD域 操作数句 法
单数据存储器操作数的间接寻址类型
功 能 说 明
地址=ARx 1000 (8) *ARx-% ARx=Circ(ARx- 寻址结束后,ARx中的地址值按循环减的方法减11 1) 地址=ARx *ARx - 1001 (9) - 寻址结束后,按循环减的方法从ARx中减去AR0中的值 0% ARx=Circ(ARx AR0) 地址=ARx 1010 (10) *ARx + % ARx=Circ(ARx + 寻址结束后,ARx中的地址值按循环加的方法增11 1) 地址=ARx 1011 (11) *ARx ARx =Circ(ARx + 寻址结束后,按循环加的方法,将AR0中的值加至ARx +0% AR0) ARx +1k 以ARx与16位数之和作为数据存储器的地址,寻址结束后, 1100 (12) *ARx(1k) 地址= ARx= ARx ARx中的值不变 地址=ARx +1k 1101 (13)*+ARx(1k) ARx 将一个16位带符号数加至ARx后进行寻址3 = ARx + 1k 地址=Circ(ARx + 1k) 3 1110 (14) *+ARx(1k )% ARx=Circ(ARx + 将一个16位带符号数按循环加的方法加至ARx,然后再寻址 1k) 利用16位无符号数作为地址寻址数据存储器(相当于绝对寻 1111 (15) *(1k) 地址=1k 址方式)3
地址=ARx 0101 (5) *ARx-0 ARx =ARx-AR0
地址=ARx 0110 (6) *ARx + 0 ARx =ARx + AR0
0111 (7) *ARx + 0B
寻址结束后,将AR0中的值加至ARx
寻址结束后,用反向传送进位的方法将AR0加至ARx
地址=ARx ARx=B(ARx + AR0)
在间接寻址方式中,64K字数据空间的任意单元都可以通 过一个辅助寄存器中的内容所代表的16位地址进行访问。 TMS320C54x有8个16位辅助寄存器(AR0~AR7),2 个辅助寄存器算术单元(ARAU0和ARAU1),根据辅助 寄存器ARx的内容进行操作,完成无符号的16位算术运算。 间接寻址主要用在需要存储器地址以步进方式连续变化的 场合。当使用间接寻址方式时,辅助寄存器内容(地址) 可以被修改(如增加或减少),还可以提供循环寻址和位 倒序寻址两种特殊模式。
1.6 数据寻址方式
累加器寻址
在累加器寻址方式中,指令中利用累加器的数值作为地址 来读/写程序存储器,这种寻址方式可用来对存放数据的 程序存储器寻址。 共有两条指令可以采用累加器寻址: READA Smem WRITA Smem READA是把累加器A所确定的程序存储器单元中的一个字 传送到单数据存储器操作数Smem所确定的数据存储器 单元中。 WRITA是把Smem操作数所确定的数据单元中的一个字 传送到累加器A确定的程序存储器单元中去。
+ 1100 +1100
10110
正向进位
0001
反向进位
1.6 数据寻址方式
原序 间接寻址 十进制数 0 1.单操作数寻址 1 2 (2) 位倒序寻址 3 4 5 6 7 8 9 10 11 12 13 14 15 二进制数 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111 位倒序 二进制数 0000 1000 0100 1100 0010 1010 0110 1110 0001 1001 0101 1101 0011 1011 0111 1111 十进制数 0 8 4 12 2 10 6 14 1 9 5 13 3 11 7 15
1.6 数据寻址方式
堆栈寻址
下图给出了将一个数据 X2压入堆栈(PSHD X2)的 操作过程。
操作前的堆栈和堆栈指针SP SP 操作后的堆栈和堆栈指针
SP
0011
0001
0010 0011 0100 0101 0110 X1
SP
0010
0001
0010 0011 0100 0101 0110 X2 X1
1.6 数据寻址方式
间接寻址
1.单操作数寻址
单操作数寻址是指一条指令中,只有一个存储器操作数 (即从存储器中只存取一个操作数)。 单数据存储器操作数间接寻址指令的格式:
指令的标识符 表示指令为间接寻址 3位辅助寄存器域 用来定义所使用的辅助寄存器
15 ~ 8 操作码
7 I=1
6~3 MOD
1.6 数据寻址方式
堆栈寻址
当发生中断或子程序调用时,堆栈用来自动地保存程序计数器PC的值。 堆栈也可以用来保护现场或传送参数。 堆栈寻址,就是利用堆栈指针,按照先进后出的原则来寻址。SP总是指 向压入堆栈的最后一个数据。 堆栈寻址的作用是保护调用,中断现场信息,进行数据传输。 共有四条使用堆栈寻址方式访问堆栈的指令: PSHD Smem ;(SP)-1SP, (Smem)SP PSHM MMR ;(SP)-1SP, (MMR)SP POPD Smem ;(SP)Smem, (SP)+1 SP POPM MMR ;(SP)MMR, (SP)+1 SP
2~0 ARF
指令的8位操作码
4位的方式域 用来定义间接寻址的类型
间接寻址
1.单操作数寻址
单数据存储器操作数的间接寻址类型
MOD域 操作数句 法 0000 (0) *ARx 0001 (1) 0010 (2) 0011 (3) 0100 (4) 功 能 说 明 ARx中的内容就是数据存储器的地址 寻址结束后, ARx中的地址值减12 寻址结束后, ARx中的地址值增11 ARx中的地址值增1后再寻址123 寻址结束后,用反向传送借位的方法从 ARx中减去AR0的值 寻址结束后,从ARx中减去AR0的值 地址=ARx 地址=ARx *ARx- ARx=ARx-1 地址=ARx *ARx+ ARx=ARx + 1 ARx=ARx + 1 *+ARx 地址=ARx +1 地址=ARx *ARx-0B ARx=B(ARx- AR0)
1.6 数据寻址方式
累加器寻址
[例] 累加器寻址示例
READA *AR3 ;把累加器A所确定的程序 存储器单元中的值传送 给AR3指向的数据存储 器单元
WRITA *AR3 把AR3指向的数据存储 器单元的值传送到由累 加器A确定的程序存储 器单元中
1.6 数据寻址方式
直接寻址
在直接寻址方式中,指令中包含有数据存储器地址 ( dmad )的低 7位,这 7位 dmad 作为偏移地址,结合基 地址(由数据页指针DP或堆栈指针SP给出)共同形成16 位的数据存储器地址。 使用这种寻址方式,可以在不改变 DP 或 SP 的情况下,随 机地寻址 128个存储单元中的任何一个单元。直接寻址的 优点是每条指令只需要一个字。 是DP还是SP直接寻址与状态寄存器ST1中CPL位有关: 数据页指针DP直接寻址:当CPL=0时,DP直接寻址; 堆栈指针SP直接寻址: 当CPL=1时,SP直接寻址;
1.6 数据寻址方式
存储器映射寄存器寻址
在存储器映射寄存器(MMR)寻址方式中,修改存储器映射寄存器的值, 而不影响当前数据页指针DP或当前堆栈指针SP的值,以存储器映射寄存 器中的修改值去寻址。寻址范围为0000h~007Fh。 有两种产生MMR地址的方式,指令特点: (1)在直接寻址时,不管DP,SP为何值都强制地址高9位为零,不改变 DP,SP内容。 (2)在间接寻址时,取ARX低7位作为MMR地址,并在执行后,对ARX高9 位强制淸零。 共有以下8条能够使用存储器映射寄存器寻址的指令: LDM MMR,dst MVDM dmad,MMR MVMD MMR,dmad MVMM MMRx,MMRy POPM MMR PSHM MMR STLM src,MMR STM #1k,MMR
SP作为基地址的直接寻址方式 例如,SP=0100h,dmad=030h, 实际地址为0100h+030h=0130h。
1.6 数据寻址方式
直接寻址
[例] SP直接寻址示例
ADD 30h, A ;将实际地址为0130h的数据存储器单元内 容加到累加器A中去
1.6 数据寻址方式
间接寻址
1.6 数据寻址方式
间Βιβλιοθήκη Baidu寻址
(1) 循环寻址
循环缓冲器的指针index就是当前ARx的低N位,步长step就是一次加到 辅助寄存器或从辅助寄存器中减去的值。循环寻址的算法为:
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
注: 1. 寻址16位字时增量/减量为1,32位字时增量/减量为2。 2. 这种方式只能用于写操作指令。 3. 这种方式不允许对存储器映射寄存器寻址。
1.6 数据寻址方式
间接寻址
(1) 循环寻址 在卷积、相关和FIR滤波器等算法中,都需要在存储器中设置一个循环缓 冲器,它是一个滑动窗口,保存着最新的一批数据。 循环缓冲器实现的关键是循环寻址的实现。 BK(循环缓冲器长度):确定了循环缓冲器的大小R。 EFB(循环缓冲器的有效基地址):用户选定的辅助寄存器(ARx)的低 N位置 0后所得到的值。满足条件:2N>R EOB(循环缓冲器的尾地址):通过用BK的低N位代替ARx的低N位得到。
例如:DP=1,dmad=03h,实际地址为0080h+03h=0083h。
1.6 数据寻址方式
直接寻址
[例] DP直接寻址示例
ADD 30h, A ;将实际地址为00B0h的数据存储器单元内 容加到累加器A中去
1.6 数据寻址方式
直接寻址
当状态寄存器 ST1 中 CPL=1 时,数据存储器地址( dmad )的低 7 位与 堆栈指针SP的16位地址相加形成 16 位的数据存储器地址,如下图所示。
1.6 数据寻址方式
直接寻址
当状态寄存器ST1中CPL=0时,以数据存储器地址(dmad)的低7位 为低位,以数据页指针DP中的9位字段为高位,共同构成16位的数据存 储器地址,如下图所示。
15
14 13 12 11 10
9
8
7
6
5
4
3 7位dmad
2
1
0
9位数据页指针DP
DP作为基地址的直接寻址方式
1.6 数据寻址方式
存储器映射寄存器寻址
[例] 存储器映射寄存器寻址示例
LDM 11h,A ;地址0011h指向存储器映射寄存器AR1,将AR1中 的值装入累加器A的低16位,累加器A的高24位清零
STLM A,*AR3 ;将累加器A的低16位存放到AR3低7位作为存储器 映射寄存器MMR地址的单元中去,执行后对AR3高9位清零
相关文档
最新文档