您好,欢迎访问三七文档
乘法指令1.输入来源数据存储器数据、A(16-32)、T2.输出:累加器;3.A作为输入时,使用MPYA4.其他乘法指令,累加器A用来存储结果的5.缺省乘数为T中的数据6.T不参与运算,将第一操作数→T7.乘法结果受小数方式位FRCT影响,当FRCT=1时,乘法结果左移一位,否则不做处理。MPYDATA3,AMPYADATA3,B例:数据寻址方式C54xDSP提供了7种数据寻址方式:⒈立即数寻址:操作数是一个立即数,包含在指令中;立即数表示方法:应在数值或符号前面加一个“#”号例如:LD#80H,A⒉绝对寻址:指令中有一个16位的有效地址;C54xDSP提供了四种类型的绝对寻址。①数据存储器地址(dmad)寻址:指令中16位的有效地址为数据存储空间的地址。②程序存储器地址(pmad)寻址:指令中16位的有效地址为程序存储空间的地址。③端口地址(PA)寻址:指令中16位的有效地址为外部的端口地址。PORTRPA,SmemPORTWSmem,PA④长立即数*(Ik)寻址指令中16位的有效地址为数据存储空间地址。1.MVDKDAT10,8000H例:⒉MVDPDAT0,0FE00H3.PORTR05,INDAT;INDAT.equ60H⒊累加器寻址:把累加器内的内容作为地址去访问程序存储器的一个单元;(A)→PmemREADASmemWRITASmem⒋直接寻址⑴指令中的7bit是一个数据页内的偏移地址,Dmem的实际地址由基地址DP/SP和偏移地址共同决定的。⑵Dmem实际地址=①DP(9)——偏移地址(7)②SP(16)+偏移地址(7)※CPL=0:①DP(9)——偏移地址(7)CPL=1:②SP(16)+偏移地址(7)⑶采用哪种方式来产生实际地址位于ST1中的编译方式位(CPL)决定。1514131211109876543210来自DP的值来自IR的值图4.1以DP为基地址的直接寻址1514131211109876543210来自SP的值1514131211109876543210000000000来自IR的值(dmad)1514131211109876543210有效的存储器地址+图4.2以SP为基地址的直接寻址⒌间接寻址按照辅助寄存器中的地址访问存储器;⑴数据存储空间的地址⑵(ARx)→Dmem⑶*⑷(ARx)增量、减量、偏移或变址的修改,还可以提供循环和位反转寻址表4.8单操作数间接寻址类型句法功能说明*ARxaddr=ARx以ARx内容为地址,ARx内容不变①*ARx-addr=ARxARx=ARx-1以ARx内容为地址,访问后ARx减1①*ARx+addr=ARxARx=ARx+1以ARx内容为地址,访问后ARx增1①②③*+ARxaddr=ARx+1ARx=ARx+1ARx内容先增1,再寻址*ARx-0Baddr=ARxARx=B(Arx-AR0)寻址后,ARx内容按位反序减去AR0的内容*ARx-0addr=ArxARx=Arx-AR0寻址后,ARx内容减去AR0的内容句法功能说明*ARx+0addr=ARxARx=ARx+AR0寻址后,ARx内容加上AR0的内容*ARx+0Baddr=ARxARx=B(ARx+AR0)寻址后,ARx内容按位反序加上AR0的内容*ARx-%addr=ARxARx=circ(ARx-1)寻址后,ARx内容按循环寻址方式减1①*ARx-0%addr=ARxARx=circ(ARx-AR0)寻址后,ARx内容按循环寻址方式减AR0的内容*ARx+%addr=ARxARx=circ(ARx+1)寻址后,ARx内容按循环寻址方式加1*ARx+0%addr=ARxARx=circ(ARx+AR0)寻址后,ARx内容按循环寻址方式加上AR0的内容*ARx(1k)addr=ARx+1kARx=ARx以16位符号数1k和ARx之和作地址去寻址,但ARx仍维持原值*+ARx(1k)addr=ARx+1kARx=ARx+1k将16位符号数1k加ARx,再以ARx内容寻址②*+ARx(1k)%addr=circ(ARx+1k)ARx=circ(ARx+1k)将16位符号数按循环寻址方式加到ARx中,再以ARx内容寻址②*(1k)addr=1k16位无符号偏移量1k作为数据存储器的绝对地址③(2)双操作数间接寻址双数据存储器操作数间接寻址类型:*ARx、*ARx-、*ARx+、*ARx+0%。所用辅助寄存器只能是AR2、AR3、AR4、AR5。其特点是:占用程序空间小,运行速度快,在一个机器周期内通过两个16位数据总线(C和D)读两个操作数。指令中Xmem表示从DB总线上读出的16位操作数,Ymem表示从CB总线上读出的16位操作数。⒍存储器映射寄存器寻址⑴这种寻址方式用来修改存储器映射寄存器的内容⑵存储器映射寄存器寻址可以在直接寻址和间接寻址中使用。※⑶MMR的地址产生方法为:将16位的有效地址高9位清0。例如:AR1.setFF25HSTLMsrc,*AR1*LDMMMR,dst*MVDMdmad,MMR*MVMDMMR,dmad*MVMMMMRx,MMRy*POPMMMR*PSHMMMR*STLMsrc,MMR*STM#1k,MMRC54xDSP只有8条指令能使用存储器映射寄存器的寻址方式⒎堆栈寻址PSHD:将数据存储器的一个值压入堆栈;PSHM:将存储器映射寄存器的一个值压入堆栈;POPD:将数据存储器的一个值弹出堆栈;POPM:将存储器映射寄存器的一个值弹出堆栈。4条指令采用了堆栈寻址的方式来访问堆栈ST#0x0144,DATA10STM#0x0421,TSTMA,*AR1+执行指令之前(AR1)=0321H,执行指令STT,*AR1-后,(AR1)=。直接寻址中,基地址可由或SP来确定。计算。.title“sum.asm”.mmregs(1).bssy,1STM#x,AR2STM#9,AR3LD#0,Aloop:(2)BANZloop,*AR3-(3)101iixyADD*AR1+,ASTLA,@y.bssx,10对数组z[8]={11,14,55,66,54,34,73,70}进行初始化。.title“Initialization.asm”.mmregsSTACK:.usect“STACK”,10H.bssz,8(1)table:.word11,14,55,66,54,34,73,70.def.textstart:STM#z,AR1(2)(3)end:Bend(4)RPT#7MVPDtable,*AR1+.data.end计算y=mx+n。.title“y=mx+n.asm”.mmregsSTACK:.usect“STACK”,10H.bssm,1.bssx,1.bssn,1.bssy,1.defstart.datatable:.word2,33,78(1)start:STM#0,SWWSR(2)STM#m,AR2RPT#2MVPDtable,*AR2+CALLSCend:BendSC:STM#m,AR3STM#x,AR5(3)ADD@n,ASTLA,@yRET.endSTM#stack+10H,SPMPY*AR3,*AR5,A计算y=a1x1+…+a4x4.titleexample5.asm.mmregsstack.usectSTACK,10H.bssa,4(1).bssy,1.defstart.datatable:.word3,15,20.textstart:STM#0,SWWSR;插入0个等待状态STM#stack+10H,SP;设置堆栈指针STM#a,AR1;AR1指向a(2)MVPDtable,*AR1+(3)end:BendSU:LD#a,AR3MPY#x,AR4RPTZA,#3(4)STLA,@y(5).endRPT#7.bssx,4MAC*AR3+,*AR4+,ACALLSURET设(IPTR)=08DH,中断号为16,则中断向量地址为。–下列属于非屏蔽中断的是()。A、主机接口中断B、缓冲串口中断C、D、定时器中断
本文标题:数据的寻址方式
链接地址:https://www.777doc.com/doc-3382375 .html