DSP技术与原理复习之编程题

更新时间:2023-09-24 14:40:01 阅读量: IT计算机 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

指令解释(每题3分,共15分)

1、LD #0032H,4,A 立即数0032H先左移4位后,再加载累加器A. 2、STM #1000H,*AR2 立即数1000H存储到AR2指向的地址单元

3、MAC #345,A,B 立即数345与T寄存器内值相乘后与累加器A值相加,结果加载累加器B. 4、MVDD *AR3-,100H AR3指向的地址单元的值传送给地址100H单元, AR3中地址减一。 5、LDM *AR1,A AR3指向的地址单元的值加载到累加器A.

1.设计一存储空间为100个单元的堆栈。将栈底地址指针送SP,对其初始化(共5分) size .set 100 ;设置堆栈空间的大小为100 stack .usect “STK”,size ;设置堆栈段的首地址和堆栈空间 STM #stack+size,SP

1. 分别解释以下指令的功能。(6分)

LD #80h, A; 把立即数80H装入累加器A LD 80h, A; 把80H为地址的数据装如累加器A LD #80h,16, A; 把立即数80H左移16位后装如累加器A 说明以下各量的理论值(4分)

A: 2A a1的地址:81H 内容:1 AR1: 88H AR3: 84H

1. 编程实现小数乘法,要求将变量temp1装入累加器高16位与temp2相乘,结果存入temp3。(共5分) 答:SSBX LD STH

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

temp1,16,A;将变量temp1装入累加器A的高16位 temp3 ;将乘积结果的高16位存入变量temp3

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

2. 将数组x[5] 初始化为{1,2,3,4,5}。(共10分) 答: .data ;定义初始化数据段起始地址

TBL: .word 1,2,3,4,5 ;为标号地址TBL ;开始的5个单元赋初值

.sect “.vectors” ;定义自定义段,并获 ;得该段起始地址

B START;无条件转移到标号为START的地址 .bss x,5 ;为数组x分配5个存储单元 .text ;定义代码段起始地址

START:STM #x,AR5 ;将x的首地址存入AR5

RPT #4 ;设置重复执行5次下条指令 MVPD TBL,*AR5+ end: B end .end

1.实现计算z=x+y-w的程序。

.title \ .mmregs

STACK .usect \ .bss x,1 .bss y,1 .bss w,1 .bss z,1 .def start .data

table: .word 10,26,23 .text

start: STM #0,SWWSR

STM #STACK+10h,SP ;初始化堆栈指针SP STM #x,AR1 RPT #2

MVPD table,*AR1+ ;数据从程序存储器传送到数据存储器 CALL SUMB end: B end SUMB: LD @x, A ADD @y, A

SUB @w,A ;实现减法运算 STL A, @z RET .end

2.实现对数组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

.bss x, 5 .bss y, 5 .bss z, 1 .def start

table: .word 1,2,3,4,5 .text

start: STM #x, AR1 RPT 4

MVPD table,*AR1+ ;从程序存储器传送到数据存储器数组X[5] STM # x, AR2 STM # y, AR3

RPT 4

MVDD *AR1,*AR3 ;从数据存储器数组X[5]传送到Y[5] SSBX FRCT ;准备整数乘法 STM # x, AR2

STM # y, AR3 STM # z, AR4 RPTZ 4

MAC *AR2+,*AR3+,A STL A,*AR4

End: B end .end 四、分析程序回答问题(共8分) .def _c_int00 .mmregs

stack: .usect \ .bss a,4 .bss x,4 .bss y,1 .data

table: .word 1,2,4,3 .word 8,6,4,2 .text

_c_int00: STM #stack+10h,sp STM #a,AR1 RPT #7

MVPD table,*AR1+ CALL sum end: B end sum: STM #a,AR3 STM #x,AR4 RPTZ A,#3

MAC *AR3+,*AR4+,A STL A,@y

ret .end

(1) 说明该程序的功能:(4分) 答:a1*x1=a2*x2+a3*x3+a4*x4 (2) 说明以下各量的理论值(4分)

A: 2A a1的地址:81H 内容:1 AR1: 88H AR3: 84H 2. 假设目标存储器的配置如下:(共10分)

程序存储器:EPROM E000h~FFFFH(片外) 数据存储器:SPRAM 0060H~007FH (片内)

DARAM 0080H~017FH (片内)

要求编写链接命令文件ex421.cmd。此命令用来链接ex421.obj和vector.obj两个目标文件(输入文件),并生成一个映像文件ex421.map,以及一个可执行的输出文件ex421.out。标号“start”是程序的入口。

答: ex421.obj vectors.obj -o ex421.out -m ex421.map -e start MEMORY {

PAGE 0: EPROM : org=0E000H,len=100H vecs : org=0FF80H,len=04H vecs1 : org=0FFC8H,len=04H PAGE 1:

SPRAM : org=0060H,len=20H DARAM : org=0080H,len=100H }

SECTIONS {

.text : >EPROM PAGE 0 .bss : >SPRAM PAGE 1 .data : >EPROM PAGE 0 STACK : >DARAM PAGE 1

.vectors: >vecs PAGE 0 INT_2 : >vecs1 PAGE 0 }

3.阅读下列汇编源程序,在每条语句后写出注释,并叙述程序的功能(共20分)。

答: .title “cjy4.asm” .mmregs

STACK .usect “STACK”,10H .bss a,4 ;为a分配4个存储单元 .bss x,4 ;为x分配4个存储单元 .bss y,1 ;为结果y分配1个存储单元 .def start

.data ;定义数据代码段

table: .word 1*32768/10 ;在table开始的8个 .word 2*32768/10 ;地址放数据 .word -3*32768/10 .word 4*32768/10 .word 8*32768/10 .word 6*32768/10 .word -4*32768/10 .word -2*32768/10

.text ;定义可执行程序代码段

start:SSBX FRCT ;设置FRCT位,表示进行小数乘 STM #x,AR1 ;将x的首地址传给AR1 RPT #7 ;重复8次下条指令

MVPD table,*AR1+ ;将程序空间8个数传给数据存储器 STM #x,AR2 ;将数据存储器第一个数x1的地址传给AR2 STM #a,AR3 ;将数据存储器第五个数a1的地址传给AR3 RPTZ A,#3 ;将A清零,重复4次下条指令 MAC *AR2+,*AR3+,A ;执行乘法累加和,结果放在A中 STH A,@y ;将A的高端字存入结果y,低端字省去 end: B end ;原处循环等待 .end

计算 y ? ? a 的程序段,其中数据均为小数:a1=0.1,a2=0.2,a3=-0.3,a4=0.4,x1=0.8, xiix2=0.6,x3=-0.4,x4=-0.2。

i?143.阅读下列汇编源程序,在每条语句后写出注释,并叙述程序的功能(共20分)。 答:.title “cjy1.asm” ;为汇编源程序取名

.mmregs ;定义存储器映象寄存器

本文来源:https://www.bwwdw.com/article/cnsd.html

Top