DSP程序题Word格式文档下载.docx

上传人:b****2 文档编号:1523684 上传时间:2023-04-30 格式:DOCX 页数:31 大小:28.55KB
下载 相关 举报
DSP程序题Word格式文档下载.docx_第1页
第1页 / 共31页
DSP程序题Word格式文档下载.docx_第2页
第2页 / 共31页
DSP程序题Word格式文档下载.docx_第3页
第3页 / 共31页
DSP程序题Word格式文档下载.docx_第4页
第4页 / 共31页
DSP程序题Word格式文档下载.docx_第5页
第5页 / 共31页
DSP程序题Word格式文档下载.docx_第6页
第6页 / 共31页
DSP程序题Word格式文档下载.docx_第7页
第7页 / 共31页
DSP程序题Word格式文档下载.docx_第8页
第8页 / 共31页
DSP程序题Word格式文档下载.docx_第9页
第9页 / 共31页
DSP程序题Word格式文档下载.docx_第10页
第10页 / 共31页
DSP程序题Word格式文档下载.docx_第11页
第11页 / 共31页
DSP程序题Word格式文档下载.docx_第12页
第12页 / 共31页
DSP程序题Word格式文档下载.docx_第13页
第13页 / 共31页
DSP程序题Word格式文档下载.docx_第14页
第14页 / 共31页
DSP程序题Word格式文档下载.docx_第15页
第15页 / 共31页
DSP程序题Word格式文档下载.docx_第16页
第16页 / 共31页
DSP程序题Word格式文档下载.docx_第17页
第17页 / 共31页
DSP程序题Word格式文档下载.docx_第18页
第18页 / 共31页
DSP程序题Word格式文档下载.docx_第19页
第19页 / 共31页
DSP程序题Word格式文档下载.docx_第20页
第20页 / 共31页
亲,该文档总共31页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

DSP程序题Word格式文档下载.docx

《DSP程序题Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《DSP程序题Word格式文档下载.docx(31页珍藏版)》请在冰点文库上搜索。

DSP程序题Word格式文档下载.docx

●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;

SHIFT<

0,指令执行算术右移;

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,ALEQ

MAR*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_中的操作。

||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

●分别解释以下指令的功能。

LD#80h,A;

把立即数80H装入累加器A

LD80h,A;

把80H为地址的数据装如累加器A

LD#80h,16,A;

把立即数80H左移16位后装如累加器A

5、MACX0,Y0,AX:

(R0)+,X0Y:

(R4)+N4,Y0

这条指令命令DSP56300

将寄存器X0和Y0中的数相乘,结果加到AccA中,将寄存器R0所指的X存储器地址中的值装入寄存器X0,将寄存器R4所指的Y存储器地址中的值装入寄存器Y0,R0的值加1,寄存器N4的值加给R4。

6、定点加法temp3=temp1+temp2

ldtemp1,a;

变量temp1装入累加器A

addtemp2,a;

变量temp2与累加器A相加,结果放入A中

stla,temp3;

结果(低16位)存入变量temp3中。

(没有特意考虑temp1和temp2是整数还是小数)

●编程实现小数乘法,要求将变量temp1装入累加器高16位与temp2相乘,结果存入temp3。

SSBXFRCT;

置FRCT标志位,准备小数乘法

LDtemp1,16,A;

将变量temp1装入累加器A的高16位

MPYAtemp2;

完成temp2与累加器A的高16位相乘,结果放入B累加器,并将temp2装入T寄存器

STHtemp3;

将乘积结果的高16位存入变量temp3

7、定点减法stm#temp1,ar3;

变量temp1的地址装入ar3寄存器

stm#temp2,ar2;

变量temp2的地址装入ar2寄存器

sub*ar2,*ar3,b;

变量temp2和temp1都左移16位,然后相减,结果放入

累加器B中(高16位)

sthb,temp3;

相减的结果(累加器B的高16位)存入变量temp3。

8、定点整数乘法

rsbxFRCT;

清FRCT标志,准备整数乘

ldtemp1,T;

变量temp1装入T寄存器

mpytemp2,a;

temp2*temp1,结果放入累加器A(32位)

stha,temp3;

结果的高16位存入temp3

stla,temp4;

结果的低16位存入temp4

9、定点小数乘法

ssbxFRCT;

FRCT=1,准备小数乘法

ldtemp1,16,a;

temp1装入A的高16位

mpyatemp2;

temp2乘A的高16位,结果在B中,同时将temp2装入T寄存器

sthb,temp3;

将乘积的高16位存temp3

10、使用C54X汇编语言编程计算z1=x1+y1;

z2=x1-y1;

z3=x1*y1;

z4=x2*y2。

其中,x1=20,y1=54,x2=,y2=编写汇编源程序如下:

.title“”

.mmregs

.bssx1,1

.bssx2,1

.bssy1,1

.bssy2,1

.bssz1,1

.bssz2,1

.bssz3_h,1

.bssz3_l,1

.bssz4,1

v1.set014h;

v1=20

v2.set036h;

v2=54

v3.set04000h;

v3=

v4.set0b548h;

v4=

start:

LD#x1,DP

ST#v1,x1

ST#v2,y1

LDx1,A;

x1A

ADDy1,A;

A+Y1A

STLA,z1;

保存ALz1

LDx1,A

SUBy1,A

STLA,z2

RSBXFRCT;

准备整数乘法,FRCT=0

LDX1,T

MPYY1,A;

x1*y1A

STHA,z3_h;

乘法结果高16位在z3_h单元

STLA,z3_l;

乘法结果低16位在z3_l单元

ST#v3,x2

ST#v4,y2

SSBXFRCT;

准备小数乘法,FRCT=1

LDx2,16,A;

将x2加载到AH

MPYAy2;

x2*y2B,andy2T

STHB,z4;

结果放到z4单元

11、对数组x[8]={0,1,2,3,4,5,6,7}进行初始化

.bssx,8

.data

Table:

.word0,1,2,3,4,5,6,7

.text

Start:

STM#x,AR5

RPT#7

MVPDtable,*AR5+

●将数组x[5]初始化为{1,2,3,4,5}。

.data;

定义初始化数据段起始地址

TBL:

.word1,2,3,4,5;

为标号地址TBL

开始的5个单元赋初值

.sect“.vectors”;

定义自定义段,并获得该段起始地址

BSTART;

无条件转移到标号为START的地址

.bssx,5;

为数组x分配5个存储单元

.text;

定义代码段起始地址

START:

STM#x,AR5;

将x的首地址存入AR5

RPT#4;

设置重复执行5次下条指令

MVPDTBL,*AR5+

end:

Bend

.end

●实现对数组X[5]={1,2,3,4,5}的初始化,然后将数据存储器中的数组X[5]复制到数组Y[5]。

最后实现数组X和数组Y中对应元素相乘并累加,即z=1*1+2*2+3*3+4*4+5*5

.mmregs

.bssx,5

.bssy,5

.bssz,1

.defstart

table:

.word1,2,3,4,5

.text

start:

STM#x,AR1

RPT4

MVPDtable,*AR1+;

从程序存储器传送到数据存储器数组X[5]

STM#x,AR2

STM#y,AR3

MVDD*AR1,*AR3;

从数据存储器数组X[5]传送到Y[5]

SSBXFRCT;

准备整数乘法

STM#x,AR2

STM#y,AR3

STM#z,AR4

RPTZ4

MAC*AR2+,*AR3+,A

STLA,*AR4

End:

.end

12、对数据x[8]中的每个元素加1

Begin:

LD#1,16,B

STM#7,BRC

STM#x,AR4

RPTBnext-1

ADD*AR4,16,B,A

STHA,*AR4+

next:

LD#0,B

12、求解.其中数据均为小数,且a1=a2=a3=a4=

x1=x2=x3=x4=

.bssa,4

.bssx,4

.word3*32768/10

.word2*32768/10

.word-4*32768/10

.word1*32768/10

.word6*32768/10

.word5*32768/10

.word-1*32768/10

.word-2*32768/10

SSBXFRCT

STM#a,AR4

MVPDtable,*AR4+

STM#a,AR6

RPTZA,#3

MAC*AR5+,*AR6+,A

13、计算y=

.bssx,4,1

a0.word012h

a1.word3211h

a2.wordfe11h

a3.wordff03h

.sect“program”

LD#X,AR1

LD#0,A,AR1

LD#a0,T

MAC*+,A

LD#a1,T

LD#a2,T

LD#a3,T

MAC*,A

14、在堆栈操作中,PC当前地址为4020H,SP当前地址为1013H,运行PSHMAR7后,PC和SP的值分别是多少?

SP=1012H;

PC=4021H

16、试编写×

的程序代码。

.title"

"

.mmregs

.global_c_int00

.bssx,1

.bssy,1

.bssz,1

.data

AmpCoef:

.word25*32768/100

.word-1*32768/10

.text

_c_int00:

ssbxFRCT

stm#x,ar1

rpt#0x1

mvpd#AmpCoef,*ar1+

stm#x,ar2

stm#y,ar3

mpy*ar2,*ar3,A

sthA,*ar1

Wait:

bWait

.end

17、将定点数用浮点数表示。

A=28H;

T=19H

18、试写出以下两条指令的运行结果:

①EXPA

A=FFFD876624T=0000

则以上指令执行后,B、T的值各是多少?

解:

A=0xFFFD876624;

T=5

②NORMB

B=420D0D0D0D,T=FFF9

B=0x841A1A1A,T=FFF9

19a[20]={0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19},x[20]={1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]的初始化,并将数据存储器中的数组x[20]复制到数组y[20],将数据存储器中的a[20]写入到程序存储器PROM(2000H-2013H),再将程序存储器PROM中的20个数据存入数据存储器DATA(0200H-0213H)

.mmregs

.word

0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19

.word1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1

PROM:

.usect“PROM”,20

.bssa,20

.bssx,20

.bssy,20

DATA.usect“DATA”,20

STM#a,AR1

RPT#39

MVPDTBL,*AR1+

STM#x,AR2

STM#y,AR3

RPT#19

MVDD*AR2+,*AR3+

LD#PROM,A

STM#19,AR3

LOOP:

WRITA*AR1+

ADD#1,A,A

BANZLOOP,*AR3-

LD#PROM-1,A

STM#DATA,AR1

ST#19,BRC

RPTBLOOP1

LOOP1:

READA*AR1+

WAIT:

NOP

BWAIT

20、建立链接命令文件

_o

_m

MEMORY

{PAGE0:

RAM:

origin=1000h,length=800h

RAM1:

origin=2000h,length=300h

PAGE1:

DARAM1:

origin=0100h,length=100h

DARAM2:

origin=0200h,length=100h

}

SECTIONS

{

.data:

>

RAMPAGE0

.text:

PROM:

RAM1PAGE0

.bss:

DARAM1PAGE1

DATA:

DARAM2PAGE1

21、●设计一存储空间为100个单元的堆栈。

将栈底地址指针送SP,对其初始化。

Size.set100;

设置堆栈空间的大小为100

Stack.usect"

STK"

size;

设置堆栈段的首地址和堆栈空间

STM#stack+size,SP

●利用SUBC完成整除法,41H/7H=9H,余数是2H。

LD#0041H,B

STM#0100H,AR2

STM#0110H,AR3

ST#0007H,*AR2

RPT#15

SUBC*AR2,B

STLB,*AR3+

STHB,*AR3

●编写求解加、减法的程序,计算z=x+y-w。

.title"

STACK.usect“STACK”,10H

.bssx,1

.bssy,1

.

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 求职职场 > 简历

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2