机电113班胡燕2011012579实验一汇编数据的访问一、实验目的1、了解DSP结构2、熟悉CCS开发环境3、熟悉TDB-C54XplusDSP实验箱的硬件环境4、掌握C54Xplus存储区数据访问的方法二、实验内容1、C54Xplus汇编初始化程序2、C54Xplus存储区数据访问源程序三、实验要求在程序区预留2个数据块,每块大小为128字;在数据区预留4个数据块,每块大小为128字,分别将数据区的数据移动到程序区,将程序区的数据移动到数据区,将数据区的数据移动到数据区,运行程序,观察各寄存器、片内程序区和数据区的值。四、实验代码T.set00EHBRC.set01AHSWWSR.set028HCLKMD.set058HPADD.set1F00H;PROGRAM_MEMORYADDRESSDADD.set2000H;DATA_MEMORYADDRESS.def_main.def_c_int00.def_DELAY.text_c_int00:RPT#1000HNOPLD#40H,DPSTM#4000H,SPADDM#7FFH,*(SP)ANDM#0FFFEH,*(SP)SSBXINTM;禁止中断STM#07FFFH,SWWSR;置外部等待时间STM#06004H,CLKMDLD#0FFFFH,ACALL_DELAYSTM#087FBH,CLKMDLD#0FFFFH,ACALL_DELAYB_main_main:CALLINIT_DATA;;初始化程序区为0,数据区为0-127NOPNOPCALLWRITE_A;;将1#数据区的内容写到1#程序区NOPNOPCALLREAD_A;;将1#程序区的内容写到2#数据区NOPNOPCALLMOVE_DP;将2#数据区的内容写到2#程序区NOPNOPCALLMOVE_PD;;将2#程序区的内容写到3#数据区NOPNOPCALLMOVE_DD;;将3#数据区的内容写到4#数据区NOPNOPB$_DELAY:STLMA,BRCRPTB_DELAY1-1NOPNOPNOPNOP_DELAY1:RETINIT_DATA:STM#PADD,AR2RPTZA,#00HSTLA,*AR2+NOPNOPNOPLD#0,ASTM#DADD,AR2STM#127,BRCRPTB_INIT_DATA1-1STLA,*AR2+ADD#1,0,ANOPNOP_INIT_DATA1:RET;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ThisroutineusestheMVDDinstructiontomove;informationindatamemorytootherdatamemory;locations.;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MOVE_DD:STM#DADD+100h,AR2;Loadpointertosourceindatamemory.STM#DADD+180h,AR3;Loadpointerto;destinationindatamemory.RPT#127;Move128value.MVDD*AR2+,*AR3+RET;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ThisroutineusestheMVDPinstructiontomoveexternal;datamemorytointernalprogrammemory.;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MOVE_DP:STM#DADD+80h,AR1;Loadpointertosourceindatamemory.RPT#127;Move128toprogrammemoryspace.MVDP*AR1+,#PADD+80HRET;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ThisroutineusestheMVPDinstructiontomoveexternal;programmemorytointernaldatamemory.;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MOVE_PD:STM#DADD+100h,AR1;Loadpointertodestinationindatamemory.RPT#127;Move128wordsfromexternalMVPD#PADD+80h,*AR1+;programtointernaldatamemory.RET;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ThisroutineusestheREADAinstructiontomoveexternal;programmemorytointernaldatamemory.Thisdiffers;fromtheMVPDinstructioninthattheaccumulator;containstheaddressinprogrammemoryfromwhichto;transfer.Thisallowsforacalculated,ratherthan;pre-determined,locationinprogrammemorytobe;specified.READAcanaccesslocationsinprogrammemory;beyond64Kwordboundary;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;READ_A:LD#PADD,ASTM#DADD+80h,AR1;Loadpointertodestinationindatamemory.RPT#127;Move128wordsfromexternalREADA*AR1+;programtointernaldatamemory.RET;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ThisroutineusestheWRITAinstructiontomovedata;memorytoprogrammemory.Thecallingroutinemust;containthedestinationprogrammemoryaddressinthe;accumulator.WRITAcanaccessprogrammemoryaddress;beyond64Kwordboundary;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;WRITE_A:LD#PADD,ASTM#DADD,AR1;Loadpointertosourceindatamemory.RPT#127;Move128wordsfromdataWRITA*AR1+;memorytoprogrammemory.RET.end五、实验结果1、数据指针指向的地址答:2000HDP=40H=01000000(B)则地址为0010000000000000=2000H2、CALL指令执行需要几个周期?答:CALL指令执行需要4个周期.3、RPTB指令如何执行?答:设置块重复的范围,从此句的下一句至_INIT_DATA1前一句的程序块循环执行128次。4、MVDD*AR2+,*AR3+MVDD指令执行需要几个周期,循环后指令输出周期变为多少?答:MVDD指令执行需要1个机器周期,循环后输出128个周期。5、RPT#00;Move128toprogrammemoryspace.修改程序,完成实验指导书的操作答:改为RPT#127因为循环的次数为RPT后的数字加1.6、MVDP*AR1+,#PADD+80HMVDD指令是如何执行的?答:从2080H开始的128个单元,将数据存储器中数据传给程序存储器1F80H后的单元中。7、READA*AR1+;programtointernaldatamemory.READA指令是如何执行的?答:按累加器A直接寻址1F00H后128单元数据,并将其传给数据存储器AR1(2080H)后128单元中8、RPT#127;Move128wordsfromexternalMVPD#00h,*AR1+;programtointernaldatamemory.修改程序,完成实验指导书的操作答:RPT#127;Move128wordsfromexternalMVPD#PADD+80h,*AR1+;programtointernaldatamemory.9、修改程序,完成实验指导书的操作RPT#00;Move128wordsfromdataWRITA...;memorytoprogrammemory.答:RPT#127;Move128wordsfromdataWRITA*AR1+;memorytoprogrammemory六实验总结通过本次实验我们学习了重复指令以及DP指针指令的应用,更加掌握了这些指令的基本含义。通过修改指令,了解了指令的和类似指令的区别。本次实验更加了解了DSP的编程环境,也更加了解DSP的程序,同时了解其编程环境。本次实验过程中遇到很多问题,通过查书向老师同学请教,都把问题解决了收获较多。