您好,欢迎访问三七文档
1、已知(80H)=50H,AR2=84H,AR3=86H,AR4=88H。MVKD80H,*AR2MVDD*AR2,*AR3MVDM86H,AR4运行以上程序后,(80H)、(84H)、*AR3和AR4的值分别等于多少?解:(80H)=50H,(84H)=50H,*AR3=50H,AR4=50H2、已知,(80H)=20H、(81H)=30H。LD#0,DPLD80H,16,BADD81H,B运行以上程序,B等于多少?答:(B)=0000000000H3、阅读以下程序,分别写出运行结果。.bssx,4.datatable:.word4,8,16,32……STM#x,AR1RPT#2MVPDtable,*AR1+①解:数据表table中的常量4传送到以变量x的地址为地址的存储单元中;数据表table中的常量8传送到以变量x+1的地址为地址的存储单元中;数据表table中的常量16传送到以变量x+2的地址为地址的存储单元中;.bssx,4.datatable:.word4,8,16,32……STM#x,AR1RPT#2MVPDtable,*+AR2②解:数据表table中的常量4传送到以变量x+1的地址为地址的存储单元中;数据表table中的常量8传送到以变量x+2的地址为地址的存储单元中;数据表table中的常量16传送到以变量x+3的地址为地址的存储单元中;4、指令●ADD#4568H,8,A,B//将4568H左移8位与A相加,赋给B。●ADDA,-8,B//将A右移8位加上B,保存于B。●ADD*AR3+,14,A//将AR3左移4加上A→A。●DSTB,*AR1-//B存到长字单元→AR1中,且AR减1。●LDMAR1,A//存储器映像寄存器寻址方式,将映像寄存器加载累加器AR1→A的低位,其余位置0。●LD#10H,4,A//将10H左移4位加载到累加器A中。●MAC*AR3+,*AR4+,A,B//AR3.AR44+A→B,AR3与AR3都加1。●MVKDSAMPLE,*AR5//SAMPLE→AR5中。●MVDD*AR3+,*AR5+//数据存储器内部传送数据AR3→AR5,且指令结束后AR3与AR5加1。●MPYATEMP2//B=A.Temp2,T=Temp2。●PPT#99NOP//重复NOP100次。●STLA,@quot//将累加器A的低16位字存放在quot的存储单元中。●STLB,*AR3+//将累加器的低位移位后加载到AR3所指地址。●WRITASMEM//将A的内容写入SMEM中。●LD#0032H,4,A//立即数0032H先左移4位后,再加载累加器A.●STM#1000H,*AR2//立即数1000H存储到AR2指向的地址单元●MAC#345,A,B//立即数345与T寄存器内值相乘后与累加器A值相加,结果加载累加器B.●MVDD*AR3-,100H//AR3指向的地址单元的值传送给地址100H单元,AR3中地址减一。●LDM*AR1,A//AR1指向的地址单元的值加载到累加器A.●SYM1.set2;符号SYM1=2●Begin:LD#SYM1,AR1;将2装入AR1●Label:ADD#123,B;表示将操作数123(十进制)和累加器B中的内容相加●Label:LD*AR4,A;操作数*AR4为间接地址,将AR4中的内容作为地址,然后将该地址的内容装入到指定的累加器A●RPT#99;将下一条指令循环100次●LD#0h,DP;将0装入数据页指针●ADD#0ffh,A;将0ffh加给AccA●ADD#1234h,A;将#1234h加给AccA●MVKDsample,*AR5;sample所代表的就是一个dmad●MVKD1000h,*AR5;将数据存储器1000h单元的数据传送到由AR5所指的存储单元中。1000h代表的是一个dmad(数据存储器地址(dmad)寻址)●MVPDtable,*AR5table所代表的就是一个pmad(程序存储器地址(pmad)寻址)●PORTRPA,Smem;从PA单元端口读入一个数据,传送到Smem所指的数据单元中去●PORTWSmem,PA;从Smem所指的数据单元取出一个数据,传送到PA单元端口●PORTRFIFO,*AR5;把一个数从端口为FIFO的I/O口传送到AR5所指向的数据单元●LD*(BUFFER),A;把地址为BUFFER的数据单元中的数据装到AccA中●LD#4,DP;指向页4(0200h-027Fh)●ADD9h,A;将数据页4中地址9h的数据加给AccA●ADD*,8,A;将当前辅助寄存器所指的地址里的数据,左移8-bit后加给AccA●ADD*+,8,A;将当前辅助寄存器所指的地址里的数据,左移8-bit后加给AccA,当前辅助寄存器加1.●ADD*+,8,A,AR4;数据左移加给AccA后,当前辅助寄存器加1,选择辅助寄存器AR4●ADD*0+,8,A;执行加法后,将AR0的值加给当前辅助寄存器●ADD*AR0+,8,A;执行加法后,将AR0的值加给当前辅助寄存器,但反向进位●ADD*AR3+,14,A;将AR3指向的地址单元0100h的内容1500h左移14位,得到5400000h加上1200h,将结果5401200h存在累加器A中●ADDC*+AR2(5),A;将AR2加上5后指向的地址单元内容,并进位加到累加器A中,此指令计算0013h+0004h+1h=0018h。●MAC#345h,A,B;B=A+T*#345h●MAC*AR5+,*AR6+,A,B;B=A+(*AR5)*(*AR6)T=(*AR5)●MACR*AR5+,A;A=rnd(A+T*(*AR5))●MACR*AR5+,*AR6+,A,B;B=rnd(A+((*AR5)*(*AR6)))T=(*AR5)●MACA*AR5+;B=B+(*AR5)*A(31~16)T=(*AR5)AR5=AR5+1●AND*AR3+,A;A=A&(*AR3)AR3=AR3+1●ANDM#00FFh,*AR4+;(*AR4)=(*AR4)&(#00FF)AR4=AR4+1●SFTAA,–5,B;SHIFT0,指令执行算术右移;SXM=1,移出的高位用符号位填。●BIT*AR5+,15-12;指令中的(15-12)表示测试第12位,TC=(*AR5)(15-12),AR5=AR5+1●BITF5,#00FFh;测试Smem中指定的某些位,lk常数在测试一位或多位时起屏蔽作用。假如指定的一位或多位为0,状态寄存器ST0的TC位清0,否则该位置1。●CMPM*AR4+,0404h;比较16位单数据存储器操作数Smem和16位常数lk是否相等。若相等,ST0寄存器的TC位置1,否则该位清0。●CMPR2,AR4;测试AR4是否大于AR0●BD1000h;程序指针指向指定的程序存储器地址(pmad),该地址可以是符号或一个数字。如果是延迟转移(指令带有后缀D),紧接着该指令的两条单字指令或一条双字指令从程序存储器中取出先执行。●BACCA;程序指针指向src的低16位所确定的地址。如果是延迟转移(指令带有后缀D),紧跟着该指令的两条单字或一条双字指令从程序存储器中取出先执行。●CALAA;程序指针转移到src的低位所确定的地址单元,返回地址压入栈顶。如果是延迟调用,紧接着该指令的两条单字指令或一条双字指令从程序存储器中取出来先执行。●RPTDATA127;该指令实现对下一条指令的自动循环执行。在循环执行期间,所有外部的中断都不会响应,如果有较长时间的循环,一定保证循环期间没有中断产生。●ST#99,BRC;执行循环块100次●RPTBend_block–1;循环执行一段指令块,循环的次数由存储器映射的块循环计数器(BRC)确定。BRC的值必须在指令执行之前设置。程序执行时,块循环起始地址寄存器(RSA)中装入程序指针PC+2(如果是采用了延迟就是PC+4);块循环尾地址寄存器(REA)中装入程序存储器地址(pmad)。●RPTZA,#1023;对目的累加器dst清0,并且循环执行下一条指令n+1次。FRAME10h;把一个短立即数K加到堆栈指针SP中。●POPD10;把由堆栈指针SP寻址的数据存储器单元的内容转移到由Smem确定的数据存储器单元中,然后堆栈指针SP执行加1操作。●POPMAR5;把由堆栈指针SP寻址的数据存储器单元的内容转移到指定的存储器映射寄存器MMR中,然后堆栈指针SP执行加1操作。●PSHD*AR3+;SP减1后将数据压入堆栈。●PSHMBRC;BRC:存储器映射的块循环计数器。SP减1后,将MMR压入堆栈。●MAR*AR3+;修改由Smem所确定的辅助寄存器的内容。在兼容方式下(CMPT=1),并且ARx≠AR0,指令会修改ARx的内容以及辅助寄存器指针(ARP)的值;在非兼容方式下(CMPT=0),指令只修改辅助寄存器的值,而不改变ARP。●XC1,ALEQMAR*AR1+该指令的运行情况由n和所选择的条件决定。如果n=1并且满足条件,就执行该指令的下一条单字指令;如果n=2并且满足条件,就执行该指令的下两条单字指令或者一条双字指令;如果不满足条件,执行n次nop操作。●DLD*AR3+,B;把一个32位的长操作数Lmem装入目的累加器dst中。●LD*AR4,DP;把一个数据存储器的值或一个短立即数装入T寄存器或状态寄存器中的DP、ASM和ARP位。●LDMAR4,A;把存储器映射寄存器MMR中的值装入到目的累加器的低位字中,累加器的高位字和保护位清0。不论DP的当前内容或ARx的高9位是多少,有效地址的高9位清0,将数据页指针设置为0。●LDR*AR1,A;把单数据存储器操作数Smem左移16位后装入目的累加器DST的高端(位31~16)。Smem通过对累加器的位14~0清0进行四舍五入运算,累加器的第15位设置为1。●LDU*AR1,A;把单数据存储器Smem的值装入目的累加器dst的低端(位15~0),dst的保护位和高端(位39~16)清0。因此,数据被看成是一个无符号的16位数,不管SXM位的状态如何都不进行符号扩展。●DSTB,*AR3+;把源累加器的内容存放在一个32位的长数据储存器单元中Lmem中。●STHA,10;把源累加器src的高端(位31~16)存放到数据存储器单元Smem中.●STHB,–8,*AR7–;把源累加器移位后位31~16存放到数据存储器单元(Smem或Xmem)中。●STLMA,BRC;把源累加器src的低端(位15~0)存放到存储器映射寄存器MMR中。无论DP的当前值或ARx的高9位是多少,有效地址的高9位清0。●LD*AR4+,16,A||MAC*AR5+,B16位双数据存储器操作数Xmem左移16位后装入目的累加器的高端。同时并行执行一个双数据操作数Ymem与T寄存器的值相乘再把乘积加到dst_中的操作。●LD*AR4+,16,A||MACR*AR5+,B指令带有R后缀,则对乘积和累加器操作的结果进行四舍五入,再存在dst中。四舍五入的方法是:给该值加上215,然后将结果的低端(位15~0)清0。●MVDD*AR3+,*AR5+;将Xmem寻址的数据存储器单元的内容复制到Ymem寻址的数据存储器单元中。●若辅助寄存器AR0的值为0x0005H,AR3的值为0x030FH,请分别给出下列寻址方式修改后的辅助寄存器的值。(6分)*AR3+;AR3=0310H*AR3+0;AR3=0314H*AR3(15);AR3=0324H●分别解释以下指令的功能。(6分)LD#80h,A;把立即数80H装入累加器ALD80h,A;把80H为地址的数据装如累加器ALD#80h,16,A;把立即数80H左移16位后装如累加器A5、MACX0,Y0,AX:(R0)+,X0Y:(R4)+N4,Y0这条指令命令DSP56300将寄存器X0和Y0中的数相乘,结果加到AccA中,将寄存器R0所指的X存储器地址中的值装入寄存器X0
本文标题:DSP程序题
链接地址:https://www.777doc.com/doc-6004039 .html