第3章 指令系统
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
一、立即寻址
① 立即寻址就是在指令中已经包含有执行指令所需的操作数。 ② 表示方法:在数字前面加一个“#”符号。 ③ 两种数值形式:短立即数(3、5、8或9位);长立即数(16 位)
例: LD
LD
#k3, ARP
#k5, ASM
STM #k8, AG
LD
LD
#k9, DP
#8000H, A
二、绝对寻址
;k9-DP ;k5-ASM,k5=-16~15 ;k3-ARP,k3=0~7
⑥ LD Smem, ASM ;(Smem(4~0))-ASM
3)其它加载指令
① LDM MMR,dst ;(MMR)-dst(15~0),不受SXM影响 ② LDU Smem,dst ;把不带符号的存储器值装入到累加器,不 ;受SXM影响 ③ LDR Smem,dst ;dst=(Smem)<<16+(1<<15) 舍入操作
1)以累加器A或B为目标操作数的LD指令
(1) LD Smem,dst (2) LD Smem,TS,dst ;把操作数装入累加器 ;操作数按T(5~0)位移位后装入累加器,-16≦TS≦31
(3) LD Smem,16,dst
;操作数左移16位后装入到累加器
;操作数左移后装入累加器
(4) LD Smem[,SHIFT],dst;操作数左移后装入累加器,-16≦SHIFT≦15 (5) LD Xmem,SHFT,dst
⑤ STL src,Smem
⑥ STL src,ASM,Smem ⑦ STL src[,SHIFT],Smem ⑧ STL src,SHFT,Xmem ;Xmem=src<<SHFT ;Smem=src<<ASM
3.条件存储指令
条件存储指令是在条件满足的情况下 ,将src、T或 BRC的值存储在数据存储单元中。
④ LTD Smem
;(Smem)-T, (Smem)-Smem+1
2.存储指令
存储指令用于将源累加器、立即数、暂存器T或状
态转移寄存器TRN的值保存到数据存储单元或存储器 映射寄存器中。
1)ST指令
① ST ② ST ③ ST T,Smem TRN,Smem #lk,Smem ;存储T寄存器的值 ;存储过渡寄存器TRN的值 ;对数据存储单元初始化设置
POPM MMR ③ 堆栈存放数据是从高地址向低地址进行的。进栈前,先减 小SP,再将数据压入堆栈;退栈前,先从堆栈弹出数据, 再增加SP值。
操作前的堆栈和SP SP 0011h 0001h 0010h 0011h 0100h 0101h 0110h x1
操作后的堆栈和SP SP 0010h 0001h 0010h 0011h 0100h 0101h 0110h x2 x1
2)为MMR赋值的指令
① STLM
② STM
ห้องสมุดไป่ตู้
src,MMR
#lk,MMR
;src(15-0)-MMR
;#lk-MMR
3)STH和STL指令
① STH src,Smem ② STH src,ASM,Smem ③ STH src[,SHIFT],Smem ④ STH src,SHFT,Xmem ;Xmem=hi(src)<<SHFT ;Smem=hi(src) ;Smem=hi(src)<<ASM
. . .
1012h 1013h 1014h
else if(index+step<0) index=index+step+BK
数据存储器
五、间接寻址
(2)双数据存储器操作数间接寻址 ① 双数据存储器操作数寻址用来完成两个读操作,或者一个读和一 个并行存储操作。 ② 双数据存储器操作数寻址用到的辅助寄存器只能是AR2、AR3、 AR4和AR5。 ③ 间接寻址的类型只能是*ARx、*ARx+、*AR-和*ARx+0% ④ 如果源操作数和目的操作数指向同一个单元,则在并行存储指令 中(如ST||LD),读在写之前。如: ST #3,*AR3 ||LD *AR3,A ⑤ 如果一个双操作指令用同一个辅助寄存器,并且这两个操作数的 寻址方式不同,那么就按操作数Xmem所对应的方式来寻址。如: ADD *AR2+,*AR2-,A
① CMPS
{
src, Smem ;比较、选择并存储最大值
Smem=src(31~16); TRN<<=1; TRN(0)=0; TC=0;
执行: if(src(31~16)>src(15~0))
PSHM
POPM STLM
MMR
MMR src, MMR
STM
#lk, MMR
七、堆栈寻址
① 对堆栈空间寻址,C54x DSP的堆栈区安排在数据空间,处
理器使用堆栈指针SP来寻址堆栈空间,SP始终指向栈顶。 ② 使用堆栈寻址方式访问堆栈的指令共有4条: PSHD Smem PSHM MMR
POPD Smem
(1)单数据存储器操作数间接寻址
【寻址01】*ARx 【寻址02】*ARx+ 【寻址03】*ARx【寻址04】*+ARx 【寻址05】*ARx+0 【寻址06】*ARx-0 ;ARx的内容是被寻址的数据存储器地址 ;寻址访问后,ARx加1或加2 ;寻址访问后,ARx减1或减2 ;在寻址之前,ARx中的地址加1或加2 ;访问后,把AR0加到ARx中 ;访问后,从ARx中减去AR0
(6) LD #k,dst
(8) LD #lk,16,dst (9) LD src,ASM[,dst] (11)DLD Lmem,dst
;把短立即数装入到累加器
;把长立即数左移16位后装入到累加器 ;累加器左移ASM位,-16≦ASM≦15 ;长字装入累加器
(7) LD #lk[,SHFT],dst ;把长立即数左移后装入到累加器,0≦SHFT≦15
址32位数。
DADD DADST Lmem, src[,dst] Lmem, dst ;双精度/双16位数加到累加器 ; T寄存器和双精度/双16位数相加/减
DLD
DRSUB DSADT
Lmem, dst
Lmem, src Lmem, dst
;把双精度/双16位长字装入累加器
;从双精度/双16位数中减去累加器的值 ;长操作数与T寄存器值相加/减
③ 例:假设SP=0010h,DP=3
SSBX CPL LD @1,A
ADD @2,A
五、间接寻址
间接寻址就是以辅助寄存器ARx(x=0-7)中的值作为地 址对数据空间进行寻址。 间接寻址不仅可以从存储器中读或写一个单16位的操作数, 而且还可以在一条指令中访问两个数据存储器单元。
五、间接寻址
【寻址07】*ARx+0B
【寻址08】*ARx-0B 【寻址09】*ARx+% 【寻址10】*ARx-%
;访问后,把AR0以位倒序进位的方式加到ARx中
;访问后,从ARx中以位倒序借位的方式减去AR0 ;访问后,ARx中的地址以循环寻址的方式加1或加2 ;访问后,ARx中的地址以循环寻址的方式减1或减2
【寻址14】*+ARx(lk)
【寻址15】*+ARx(lk)% ;在寻址之前,把一个带符号的16bit的长偏移(lk) ;以循环寻址的方式加到ARx中,然后用新的ARx值 ;作为数据存储器的地址。(可读可写)
【寻址16】*(lk) ;一个无符号的16bit长偏移(lk)作为数据存储器 ;的绝对地址
(a)位码倒序寻址 *ARx+0B和*ARx-0B
(10)LD src[,SHIFT],dst ;累加器左移
2)以T或DP/ASM/ARP位段为目标操作数的LD指令
① LD Smem, T ;把单操作数装入到T寄存器
② LD Smem, DP
③ LD #k9, DP ④ LD #k5, ASM ⑤ LD #k3, ARP
;(Smem(8~0))-DP
六、存储器映射寄存器寻址
对片上寄存器的寻址,因为这些片上寄存器在数据存储空间 的第0页上占有地址,所以称为存储器映射寄存器寻址,相当于 微机中的寄存器寻址。
LDM MMR, dst
MVDM
MVMD MVMM
dmad, MMR
MMR, dmad MMRx, MMRy ;MMRx和MMRy只能为AR0~AR7和SP
3.3
指令系统
一、加载和存储指令
二、算术运算指令
三、逻辑运算指令
四、程序控制指令
五、重复操作指令
六、并行操作指令
一
加载和存储指令
1 加载指令 2 存储指令 3 条件存储指令 4 其它加载和存储指令
1.加载指令
加载指令用于将数据存储单元中的数据、立即数或
源 累 加 器 src 的 值 装 入 目 的 累 加 器 dst 、 暂 存 器 T 和 ARP/ASM/DP位段。 Smem、#lk、src dst、T、 ARP/ASM/DP
第3章 指令系统
3.1 指令集介绍 3.2 寻址方式 3.3 指令系统
3.1 指令集介绍
一、指令的基本形式
[标号][:] 操作码 操作数1,操作数2,操作数3
loop:
MAC
*AR2+, *AR3+, A
二、指令的数据类型
C54x 寻址存储器有两种基本的数据形式:16位数和32位数。 大多数指令能够寻址16位数,只有双精度和长字指令才能寻
DST
DSUB DSUBT
src, Lmem
Lmem, src Lmem, dst
;累加器值存到长字单元中
;从累加器中减去双精度/双16位数 ;从长操作数中减去T寄存器值
二、指令的数据类型
在对32位数寻址时,先处理高有效字,再处理低有效字。如果寻址的第1
个字处在偶地址,那么第2个字就处在下一个(较高的)地址;如果第1个字 处在奇地址,那么第2个字就处在前一个(较低的)地址。
绝对寻址就是指令中包含要寻址的存储单元的16位地址。 (1)数据存储器(dmad)寻址 用程序标号或数据来确定指令中所需要的数据空间地址。 MVDK Smem, dmad
MVKD
MVDM MVMD
dmad, Smem
dmad, MMR MMR, dmad
二、绝对寻址
(2)程序存储器(pmad)寻址 用符号或具体的数来确定程序存储器中的地址 。 FIRS MACP Xmem, Ymem, pmad Smem, pmad, src
MACD
MVPD MVDP
Smem, pmad, src
pmad, Smem Smem, pmad
二、绝对寻址
(3) I/O端口(PA)寻址 用符号或常数来确定外部I/O端口地址。 PORTR PA, Smem PORTW Smem, PA PORTR 8000h, *AR2 PORTW *AR3, 8001h
【寻址11】*ARx+0% 【寻址12】*ARx-0% 【寻址13】*ARx(lk)
;访问后,AR0中的地址以循环寻址的方式加到ARx ;中 ;访问后,ARx中的地址以循环寻址的方式减去AR0 ;ARx和一个带符号的16bit的长偏移(lk)的和用来 ;作为数据存储器地址,访问后,ARx不被修改。 ;不能对存储器映射寄存器寻址。 ;在寻址之前,把一个带符号的16bit的长偏移(lk) ;加到ARx中,然后用新的ARx的值作为数据存储器 ;的地址。(可读可写)
累加器 A
高有效字
低有效字
寻址1000h时的 32位字存储顺序
寻址1001h时的 32位字存储顺序
1000h 1001h
高有效字 低有效字
1000h 1001h
低有效字 高有效字
3.2 寻址方式
一、立即寻址
二、绝对寻址
三、累加器寻址
四、直接寻址 五、间接寻址 六、存储器映射寄存器寻址 七、堆栈寻址
(b)循环寻址
*ARx+%、*ARx-%、*ARx+0%、*ARx-0%和*+ARx(lk)%
EFB 1000h 1001h 1002h BK=20
. . .
循环寻址的具体算法:
AR1
if(0≤index+step<BK) index=index+step else if(index+step≥BK) index=index+step-BK
二、绝对寻址
(4) *(lk)寻址 用符号或常数来确定数据存储器的地址
.bss buf, 1
LD
*(buf), A
PORTR 8000h, *(1000h)
三、累加器寻址
累加器寻址就是用累加器A中的值作为地址,对存放数据的
程序存储器寻址 。 reada Smem
wrtia
Smem
四、直接寻址
① 直接寻址就是在指令中包含有数据存储器地址的低7位,用 这7位作为偏移地址,并与基地址值(DP或SP)组成一个16 位的数据存储器地址。 ② 表示方法:用一个@符号或一个常数来确定偏移地址值。