DSP考试编程题.docx
《DSP考试编程题.docx》由会员分享,可在线阅读,更多相关《DSP考试编程题.docx(13页珍藏版)》请在冰点文库上搜索。
DSP考试编程题
第一题:
C语言Helloworld程序
#include
intmain()
{
printf("helloworld!
\n");
return1;
}
.text 文本段 通常包含可执行代码
.data 数据段 通常包含初始化的数据
.bss 保留空间段 通常为没有初始化的变量保留空间
自定义段
.usect 保留空间段 为没有初始化的数据保留空间的自定义段
.sect 初始化段 自定义段
.asect 初始化段
第二题:
程序的控制与转移指令BANZ
题目:
已知数据10、20、3、4、5,将其累加求累加之后的结果
要求:
为x分配5个字空间存储中间数据,为y分配1个字空间保存最终结果。
.title"example2.asm"
.mmregs;预定义的寄存器
STACK.usect"STACK",10H;堆栈的设置给堆栈段分配空间
.bssx,5;为变量分配6个字的存储空间
.bssy,1
.defstart
.data
table:
.word10,20,3,4,5;x1,x2,x3,x4,x5
.text
start:
STM#0,SWWSR;插入0个等待状态
STM#STACK+10H,sp;设置堆栈指针
STM#x,AR1;AR1指向x;存储器映像寄存器寻址
RPT#4;下一条被重复执行5遍
MVPDtable,*AR1+;把程序存储器中的数据传送到数据存储器绝对地址访问
LD#0,A;A清零
CALLSUM;调用求和函数
end:
Bend
SUM:
STM#x,AR3;AR3指向x
STM#4,AR2;AR2=4
loop:
ADD*AR3+,A;*AR3+A-->A,然后AR3+
BANZloop,*AR2-;如果AR2的值不为0,则跳到loop处;否则执行下一条指令
STLA,*(y);把A的低16位赋给变量y
RET
.end
---------------------------------------------------------------
vectors.obj
example2.obj
-oexample2.out
-mexample2.map
-estart
MEMORY
{
PAGE0:
EPROM:
org=0090Hlen=0F70H
VECS:
org=0080Hlen=0010H
PAGE1:
SPRAM:
org=1000Hlen=1000H
DARAM:
org=2000Hlen=2000H
}
SECTIONS
{
.text:
>EPROMPAGE0
.data:
>EPROMPAGE0
.bss:
>SPRAMPAGE1
STACK:
>DARAMPAGE1
.vectors:
>VECSPAGE0
}
---------------------------------------------------------------
.title"vectors.asm"
.refstart
.sect".vectors"
Bstart
.end
---------------------------------------------------------------
第三题:
乘法累加,并寻找最大值
题目:
已知数据:
1、5、3、4和8、6、7、2进行乘法累加操作,并求出其中乘法最大值,并保存。
要求:
为a分配4个空间,存放1、5、3、4
为x分配4个空间,存放8、6、7、2
为y分配1个空间,存放乘积最大值
.title"example8.asm"
.mmregs
STACK.usect"STACK",10H;堆栈的设置
.bssa,4;为变量分配9个字的存储空间
.bssx,4
.bssy,1
.defstart
.data
table:
.word1,5,3,4;a1,a2,a3,a4
.word8,6,7,2;x1,x2,x3,x4
.text
start:
STM#0,SWWSR;插入0个等待状态
STM#STACK+10H,SP;设置堆栈指针
STM#a,AR1;存储器映像寄存器寻址
RPT#7
MVPDtable,*AR1+
CALLMAX
end:
Bend
MAX:
STM#a,AR1
STM#x,AR2
STM#2,AR3
LD*AR1+,T
MPY*AR2+,A;第一个乘积在累加器A中*AR2指令和T相乘
loop:
LD*AR1+,T
MPY*AR2+,B;其他乘积在累加器B中
MAXA;累加器A和B比较,选出较大者存入A中
BANZloop,*AR3-;此循环中共进行3次乘法和比较
STLA,*(y)
RET
.end
---------------------------------------------------------------
---------------------------------------------------------------
第四题:
数据块传送指令MVPD、MVDD
题目:
将数据表中的20个数据:
1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20
传送到x分配的20个字存储空间,再将x的20个字存储空间中的内容传送到y的20个字存储空间。
.title"zhao3.asm"
.mmregs
STACK.usect"STACK",30H
.bssx,20
.bssy,20
.data
table:
.word1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20
.defstart
.text
start:
STM#x,AR1
RPT#19
MVPDtable,*AR1+;程序存储器传送到数据存储器
STM#x,AR2
STM#y,AR3
RPT#19
MVDD*AR2+,*AR3+;数据存储器传送到数据存储器
end:
Bend
.end
---------------------------------------------------------------
---------------------------------------------------------------
运行答案:
x:
1000H:
0x0001~1013H:
0x0014
y:
1014H:
0x0001~1028H:
0x0014
---------------------------------------------------------------
第五个:
乘法累加实验
题目:
整数系数时:
其中:
=1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20
=21,22,23,24,25,26,27,28,29,30,1,2,3,4,5,6,7,8,9,10
求:
y。
.title"zhao6.asm"
.mmregs
STACK.usect"STACK",30H
.bssa,20
.bssx,20
.bssy,2
.data
table:
.word1,2,3,4,5,6,7,8,9,10,11
.word12,13,14,15,16,17,18,19,20
.word21,22,23,24,25,26,27,28
.word29,30,1,2,3,4,5,6,7,8,9,10
.defstart
.text
start:
STM#0,SWWSR
STM#STACK+30H,SP
STM#a,AR1
RPT#39
MVPDtable,*AR1+
CALLSUM;调用中断子程序SUM
end:
Bend
SUM:
STM#a,AR3;中断子程序SUM
STM#x,AR4
RPTZA,#19;累加器A清零,并且重复执行下一条指令
MAC*AR3+,*AR4+,A
STLA,*(y)
STHA,*(y+1)
RET
.end
---------------------------------------------------------------
---------------------------------------------------------------
答案:
y:
0x1028H:
0x0000
0x1029H:
0x0974
---------------------------------------------------------------
小数系数时:
其中:
=0.1,0.2,-0.3,0.2
=0.8,0.6,-0.4,-0.2
求:
y。
注意:
0.1写成1*32768/10
0.2写成2*32768/10
·
·
·
.title"zhao9e.asm"
.mmregs
STACK.usect"STACK",10H
.bssa,4
.bssx,4
.bssy,1
.defstart
.data
table:
.word1*32768/10
.word2*32768/10
.word-3*32768/10
.word2*32768/10
.word8*32768/10
.word6*32768/10
.word-4*32768/10
.word-2*32768/10
.text
start:
SSBXFRCT
STM#a,AR1
RPT#7
MVPDtable,*AR1+
STM#x,AR2
STM#a,AR3
RPTZA,#3
MAC*AR2+,*AR3+,A
STHA,*(y)
end:
Bend
.end
y:
0x1008H:
0x23D5