资源预览内容
第1页 / 共36页
第2页 / 共36页
第3页 / 共36页
第4页 / 共36页
第5页 / 共36页
第6页 / 共36页
第7页 / 共36页
第8页 / 共36页
第9页 / 共36页
第10页 / 共36页
亲,该文档总共36页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
1.6 数据寻址方式数据寻址方式v立即寻址:指令编码本身带有操作数;立即寻址:指令编码本身带有操作数;v绝对寻址:指令编码中含有操作数的地址;绝对寻址:指令编码中含有操作数的地址;v累加器寻址:累加器的内容为操作数的地址;累加器寻址:累加器的内容为操作数的地址;v直接寻址:使用指令中的直接寻址:使用指令中的7位偏移地址与数据页指针位偏移地址与数据页指针DP或或 堆栈指针堆栈指针SP组成组成16位操作数地址;位操作数地址;v间接寻址:通过辅助寄存器寻址;间接寻址:通过辅助寄存器寻址;v存储器映像寄存器寻址:改变存储器映像寄存器而不影响存储器映像寄存器寻址:改变存储器映像寄存器而不影响DP或或SP的值;的值;v堆栈寻址:压入堆栈寻址:压入/弹出系统堆栈。弹出系统堆栈。寻址用到的缩写语寻址用到的缩写语vLk:16位长立即数;位长立即数;vDst:目的累加器;:目的累加器;vSrc:源累加器;:源累加器;vPA:16位立即数位立即数-I/O口地址;口地址;vPmad: 16位立即数位立即数-程序存储器地址;程序存储器地址;vDmad: 16位立即数位立即数-数据存储器地址;数据存储器地址;vXmem:16位双寻址操作数,用于双位双寻址操作数,用于双/单操作数指令。从单操作数指令。从DB总线读出;总线读出;vYmem: 16位双寻址操作数,用于双操作数指令。从位双寻址操作数,用于双操作数指令。从CB数据总线读出数据总线读出 。vSmem:16位单寻址操作数。位单寻址操作数。立即寻址:立即寻址: 就是指令中包含有执行指令所需要的立即数就是指令中包含有执行指令所需要的立即数(不用寻址)。在数字前面加(不用寻址)。在数字前面加 # 号,表示一个立号,表示一个立即数;即数;立即数可为立即数可为3、5、8、9位短立即数,也可为位短立即数,也可为16位长立即数;指令可为位长立即数;指令可为1 字或字或2字。字。如:如:1)LD #80h,A 2)LD #7h,ARP 3)RPT #FFh 4)LD #1Fh,ASM;将;将5位立即数加载到位立即数加载到ASM中中 5)LD #1FFh,DP;将;将9位立即数加载到位立即数加载到DP中中 绝对寻址:绝对寻址:指令中包含有所要寻址的存储单元的指令中包含有所要寻址的存储单元的16位地址。位地址。有四种绝对寻址:有四种绝对寻址:dmad寻址,寻址,pmad寻址,寻址,PA寻址,寻址,*(lk)寻址。)寻址。数据页分配情况:数据页分配情况:地址地址DP27=1280000-007Fh第第0页页0080-00FF10100-017F20180-01FF30200-027F40280-02FF50300-037F60380-03FF7.Dmad寻址寻址:vMVDK *AR3-,1000hvMVDM 300h,BK vMVKD 1000h,*+AR5vMVMD AR7,8000hPmad寻址寻址:vMVDP DAT0,0FE00hvMVPD 2000h,*AR7vMVPD 0FE00h,DAT5PA寻址寻址:vPORTR 05,INDAT vPORTW OUTDAT,5h *(lk)寻址)寻址:vLD *(2000h),),AvSTL A,*(200h)累加器寻址累加器寻址:v利用累加器的内容作为地址来访问程序存储利用累加器的内容作为地址来访问程序存储器中的数据器中的数据vREADA:从程序存储器中(:从程序存储器中(A的内容为地址)的内容为地址)读数据到数据存储器中读数据到数据存储器中vWRITA:将数据存储器中的数写到程序存储:将数据存储器中的数写到程序存储器中(器中(A的内容为地址)的内容为地址)直接寻址直接寻址:指令包含了数据地址的低指令包含了数据地址的低7位,作为偏移地址与位,作为偏移地址与DP或或SP中中的基地址组合形成完整的的基地址组合形成完整的16位数据地址。在位数据地址。在DP和和SP不变的情不变的情况下,可以直接访问况下,可以直接访问128个地址。个地址。使用使用SP还是还是DP由状态寄存器中的由状态寄存器中的CPL位决定:位决定:CPL=0,使用,使用DP的的9位作为高位作为高9位与偏移地址相加位与偏移地址相加CPL=1,使用,使用SP的的16位与偏移地址相加位与偏移地址相加直接寻址指令编码格式:直接寻址指令编码格式:158760 opcode I=0 damI=0,表示直接寻址,表示直接寻址直接寻址的地址产生:直接寻址的地址产生: DP的取值范围:的取值范围:0511(29=512),),dma的取值范围从的取值范围从0128,所以,所以,DP指向全部的指向全部的512页之一,页之一,dma指向这一页的指向这一页的128个字个字地址之一。地址之一。 SP指向全空间的任意一个地址,指向全空间的任意一个地址,dma指向某页的特定地址。从指向某页的特定地址。从一个数据空间的任何一个基地址访问连续的一个数据空间的任何一个基地址访问连续的128个字的块。个字的块。 在偏移地址前加在偏移地址前加来设定来设定举例:注意举例:注意(流水线等待流水线等待.)见见p34、LD#1234h,SPSSBXCPLST#5678h,30h;(1264h)=#5678h2、LD#020h,DPRSBXCPLST#1234h,30h;(;(1030h)=#1234h0001000000110000=1030间接寻址间接寻址:v使用辅助寄存器使用辅助寄存器16位的地址,访问数据存储位的地址,访问数据存储空间的任意单元空间的任意单元v间接寻址类型间接寻址类型v循环寻址循环寻址 (*)v位倒序寻址位倒序寻址(*)例:完成下列表达式的程序例:完成下列表达式的程序.bss x,4 ;伪指令,为变量;伪指令,为变量X,Y保留一个保留一个5个字的空间个字的空间.bss y,1.text ;程序开始,该段后包含了可执行的代码;程序开始,该段后包含了可执行的代码 STM #X,AR1 ;将;将#X送到送到AR1中中 LD *AR1+,A ;(;(AR1)A ,AR1=AR1+1 ADD *AR1+,A ;(;(AR1)+(A)A ADD *AR1+,A ; +X3 ADD *AR1,A ; +X4 STL A,*(y) ;A中的低位数送到中的低位数送到y中中X1X2X3X4YAR1 x1000h.1004h .title “add001.asm” .mmregs.def start.bss x,5.bss y,1.data Table: .word 1,2,3,4,5 .text ld *ar1+,aadd *ar1+,aadd *ar1+,aadd *ar1+,aadd *ar1+,a stl a,ystart:stm #0,swwsrstm #x,ar1rpt #4mvpd table,*ar1+ ;初始化数据;-1111111111-normal-STM #x,AR1 ;将#X送到AR1中 LD *AR1+,A ;(AR1)A ,AR1=AR1+1 ADD *AR1+,A ; (AR1)+(A)A ADD *AR1+,A ; +X3 ADD *AR1,A ; +X4 STL A,*(y) ;A中的低位数送到y中;-2222222222-rpt- stm #x,ar1 ld *ar1+,a rpt #3 add *ar1+,a stl a,*(y) ;-222222222222-v;-3333- add- 1 3 5 STM #x,AR1 STM #2,AR0 ld *ar1+0,a add *ar1+0,a add *ar1+0,a stl a,*(y) ;-3333-xh:b xh; 空循环例:求例:求Y=X2+X4+X6+X8+X10.bssx,10;给变量;给变量x保留保留10个空间个空间.bssy,1;给变量;给变量y保留保留1个空间个空间.text;程序开始;程序开始STM#X+1,AR1STM#2,AR0LD*AR1+0,A;X2AADD*AR1+0,A;X2+X4AADD*AR1+0,A;X2+X4+X6AADD*AR1+0,A;X2+X4+X6+X8AADD*AR1+0,A;X2+X4+X6+X8+X10ASTLA,*(Y);Y为数据存储器的绝对地址为数据存储器的绝对地址1 3 5和和2 4 6这样的都容易寻址这样的都容易寻址,如何寻址如何寻址 0 8 4 12 2 10 14 1 9 5 13 3 11 7 15 ?位码倒序寻址功能:位码倒序寻址功能:p36 -2位码倒序寻址功能提高了位码倒序寻址功能提高了FFT的运算速度和在程序中使用存储的运算速度和在程序中使用存储器的效率。在这种方式中,器的效率。在这种方式中,AR0存放的整数是存放的整数是FFT点数点数N的一的一半,执行半,执行*ARX+0B时,进位是从左到右。例:时,进位是从左到右。例:N=8,AR0=N/2=4,AR2=8H *AR2+0B ; C *AR2+0B ; A *AR2+0B ; E 1000 + 100 1100 =C + 100 1010 =A + 100 1110 =E例:例:AR2=(01100000)2,AR0=(00001000)2执行执行*AR2+0B;01100000执行完后执行完后AR2的内容的内容+0000100001101000;68h+0000100001100100;64h+0000100001101100;6Ch循环寻址功能:循环寻址功能:许多算法,例如卷积、相关和许多算法,例如卷积、相关和FIR滤波需要一个环形的缓冲区。滤波需要一个环形的缓冲区。它就向一个滑动窗口包含了所有最新的数据。当接收到最新的它就向一个滑动窗口包含了所有最新的数据。当接收到最新的数据时,丢弃最老的数据。环形缓冲区的大小包含在数据时,丢弃最老的数据。环形缓冲区的大小包含在BK中,中,BK的数值由指令的数值由指令STM #lk,BK设定;长度为设定;长度为R的缓冲区首地址的缓冲区首地址必须排列在必须排列在N的边界上,即循环缓冲区基地址的的边界上,即循环缓冲区基地址的N个最低位必个最低位必须为须为0,N满足满足2的的N次幂大于次幂大于R,R必须加载到必须加载到BK寄存器中。寄存器中。例如,例如, R=31的缓冲区首地址必须在低的缓冲区首地址必须在低 5位为位为 0的地址上(的地址上( 0 0000),而),而31则必须装载到则必须装载到BK中。又如,中。又如,32个字大小的缓冲区首地址必须在低个字大小的缓冲区首地址必须在低6位为位为0的地址上(的地址上( 00 0000),而),而 32则装载到则装载到 BK中。中。缓冲区的有效首地址由用户指定的缓冲区的有效首地址由用户指定的ARx中的低中的低N位为位为0的地址决的地址决定定 0 0000,缓冲区的有效结束地址由用户指定,缓冲区的有效结束地址由用户指定的的ARx中的高中的高16N位与位与BK中的值连接而成中的值连接而成 1 1111。而缓冲区的索引值则由。而缓冲区的索引值则由ARx的低的低N位决定。下面是使用位决定。下面是使用循环寻址的三条规则:循环寻址的三条规则:(1) 把循环缓冲区的首地址放在符合上述算法的把循环缓冲区的首地址放在符合上述算法的N的边界地址上的边界地址上(2) 使用一个小于或等于缓冲区大小的步长。使用一个小于或等于缓冲区大小的步长。(3) 在开始寻址之前,辅助寄存器必须指向循环缓冲区内的元在开始寻址之前,辅助寄存器必须指向循环缓冲区内的元素。素。循环寻址的计算方法:循环寻址的计算方法:IF0=index+step=BKTHENindeXindex+step-BKELSEIFindex+step0THENindex=index+step+BK例:例:R=9,STEP=5STM#9,BKSTM#5,AR0STM#0H,AR2;0000,24=169,index=0ADD*AR2+0%,A;index=5ADD*AR2+0%,A;16例:例:BK=6STM#8HAR1;INDEX*AR1(0)%;0*AR1(5)%;5*AR1(2)%;1*AR1(-3)%;4*AR1(6)%;4步长步长新的位置新的位置存储器映像寄存器寻址:存储器映像寄存器寻址:存储器映像寄存器寻址用于修改存储器映像寄存器。这种存储器映像寄存器寻址用于修改存储器映像寄存器。这种寻址方式不需要修改寻址方式不需要修改DP或或SP的值。存储器映像寄存器寻址的值。存储器映像寄存器寻址可以通过直接寻址和间接寻址来实现。可以通过直接寻址和间接寻址来实现。存储器映像寄存器寻址地址产生方式:存储器映像寄存器寻址地址产生方式:1)在直接寻址时,强制认为存储器地址的高)在直接寻址时,强制认为存储器地址的高9位为位为0,低,低7位位由指令提供,不考虑由指令提供,不考虑DP或或SP。2)在间接寻址时,仅仅使用当前辅助寄存器的低)在间接寻址时,仅仅使用当前辅助寄存器的低7位为数据位为数据存储器地址,高存储器地址,高9位清位清0。例如:例如:AR1=FF25h,经存储器映像寄存器寻址后,经存储器映像寄存器寻址后,AR1的值的值变成变成25h,即指向,即指向PRD寄存器(定时器周期寄存器)。寄存器(定时器周期寄存器)。8条指令:条指令:LDM,MVDM,MVMD,MVMM,POPM,PSHM,STLM,STM。堆栈寻址堆栈寻址:v利用堆栈指针寻址利用堆栈指针寻址v堆栈是从高地址到低地址,堆栈是从高地址到低地址,SP始终指向最后始终指向最后存入的数据的地址,压入时,先减小存入的数据的地址,压入时,先减小SP再压再压入,弹出时先弹出数据在增加入,弹出时先弹出数据在增加SPv4条指令:条指令:PSHD,PSHM,POPD,POPM见指令举例v有4条使用堆栈寻址的指令:vPSHD 把一个数据存储器数据压入堆栈;vPSHM 把一个存储器映象寄存器中的值压入堆栈;vPOPD 从堆栈中弹出一个数据至数据存储器单元;vPOPM 从堆栈中弹出一个数据至存储器映象寄存器。设置一个100保留空间单元的名为”的堆栈区。必须如下设置:vSize .set 100vStack .usect “stk”,sizev stm #stack+size,sp数据类型:数据类型:16位和位和32位数。访问位数。访问16数,通过数,通过DB或或EB总线,总线,访问访问32位操作数,通过位操作数,通过CB(高位)和(高位)和DB(低位)。(低位)。写操作时,访问写操作时,访问32位数时,第一个字是高位字,第二个字位数时,第一个字是高位字,第二个字是低位字。如果在偶数地址访问第一个字,则在下一个是低位字。如果在偶数地址访问第一个字,则在下一个(更高的)地址访问第二个字。如果在奇数地址访问第一(更高的)地址访问第二个字。如果在奇数地址访问第一个字,则在下一个、(更低的)地址访问第二个字。个字,则在下一个、(更低的)地址访问第二个字。高位字低位字低位字高位字1000h1001h1000h1001h当addr=1000h当addr=1001h双操作数指令举例:双操作数指令举例:C16:双重:双重16位或双精度算法模式。位或双精度算法模式。C16=0:双精度方式;:双精度方式;C16=1:双:双16位方式。位方式。1、DADD2、DADST3、DLD4、DRSUB5、DSADT6、DST7、DSUB8、DSUBT
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号