dsp考试 程序题

三.程序阅读题(本题总分30分,每小题10分)
1. 阅读下面的程序,回答问题。
.bss x, 8
LD #0001H,16,B
STM #7,BRC
STM #x,AR4
RPTB next-1
ADD *AR4,16,B,A
STH A,*AR4+
next: LD #0,B
问题:(1)寄存器“BRC”的功能是什么?
(2)汇编语句“ADD *AR4,16,B,A”执行了多少次?
(3)执行语句“LD #0001H,16,B”后,累加器B的内容是多少?

1.(1) 寄存器“BRC”的功能是暂存块循环的次数
(2) 8次
(3) B=0x0100H;

2. 阅读下面的程序:
.mmregs
DAT0 .SET 60H
DAT1 .SET 61H
DAT2 .SET 62H
DAT3 .SET 63H
add3 .macro P1,P2,P3,ADDRP
LD P1,A
ADD P2,A
ADD P3,A
STL A,ADDRP
.endm
ST #0034h,DAT0
ST #0243h,DAT1
ST #1230h,DAT2
ADD3 DAT0,DAT1,DAT2,DAT3
问题:(1)语句“.mmregs”的含义。
(2)语句“ADD3 DAT0,DAT1,DAT2,DAT3”是一条什么类型的语句?作用是什么?
(3)执行此段程序后,存储单元(DAT3)的运行结果多少?
2.(1) 定义存储器映像寄存器的符号名称。
(2)宏调用。执行三个数相加。
(3) 14a7H

3.阅读下面的程序片断,写出运行结果
.mmregs
DAT0 .SET 60H
LD #004h,DP
ST #0345h,DAT0
STM #0002h,T
MPY DAT0,A
NOP
问题:(1)寄存器T的作用是什么?
(2)执行“MPY DAT0,A”后,累加器A的内容是什么?
3.答:寄存器T的作用是暂存被乘数,
累加器A的内容为0x68A或68Ah

1. 阅读程序,回答后面的问题
STM #6,AR4
begin: STM #9,BRC
RPTB next-1
nop
next: LD #0,B
banz begin,*AR4-
问题:(1) BRC寄存器是做什么用途?
(2)语句“banz begin,*AR4-”的作用是什么?
(3)其中的“nop”语句被执行了多少次?
1. 答:BRC保存着RPTB指令的循环次数
判断AR4的内容是否为零,若不为零,跳转到标号begin。
70次


3. 已知DSP的三个时钟引脚状态CLKMD1-CLKMD3=111,外部晶振=10MHz,参数设置表:
CLKMD1 CLKMD2 CLKMD3 CLKMD复位值 时钟方式
0 0 0 E007H PLL×15
0 0 1 9007H PLL×10
0 1 0 4007H PLL×5
1 0 0 1007H PLL×2
1 1 0 F007H PLL×1
1 1 1 0000H 2分频
1 0 1 F000H 4分频
STM #00H,CLKMD
Status:LDM CLKMD,A
AND #01H,A
BC Status,ANEQ
STM #9007H,CLKMD
问题(1)DSP复位后,DSP的工作时钟是多少?
(2)执行上面的程序片段后,DSP的工作时钟是多少?
3. 答:(1)5MHz
(2)100MHz


1. 阅读下面的程序片断,写出运行结果
.mmregs
bei_hua .set 18
LD # bei_hua,A
问题:(1)“.mmregs”的作用是什么?
(2) 运行此段程序后,累加器A的结果是多少?
1. 答:定义存储器映

像寄存器的符号名称
A的结果是18

2. 阅读下面的程序,回答问题。
.sect ".vectors"
rst: B _c_int00 ;复位中断向量的入口
NOP
NOP
.space 18*4*16
tint: B timeout ;定时器0的中断向量的入口
NOP
NOP
问: (1) “.sect”伪指令的作用是什么?
(2) 标号“rst”的地址为6000H,请问标号“tint”的地址是多少?
2. 答:定义一个自定义段名的程序段
604Ch

3. 阅读下面的命令连接文件(简称CMD文件)和程序文件:
CMD文件:
MEMORY
{ PAGE 0: PROG: origin = 0x1000, length = 0x1000
PAGE 1: DATA: origin = 0x2000, length = 0x1000
}
SECTIONS
{ .text: {} > PROG PAGE 0
.data: {} > DATA PAGE 1
}
.data
table: .word 1,2,3,4 ; 变量初始化
.text
start: STM # 0,SWWSR ; 插入0个等待状态
问:(1)MEMORY和SECTIONS的作用各是什么?
(2)标号“table”和“start”的地址分别是什么,分别位于程序空间还是数据空间?
3. 答:MEMORY和SECTIONS链接伪指令,用来指定目标存储器结构和地址分配。
标号table:1000h(程序空间)
标号start:2000h(数据空间)


1. 阅读下面的程序片断,回答下面的问题
DAT0 .SET 60H
DAT1 .SET 61H
DAT2 .SET 62H
DAT3 .SET 63H
LD #004h,DP
ST #83h,DAT0
ST #0041h,DAT1
RSBX SXM
LD DAT0,A
RPT #15
SUBC DAT1,A
STL A,DAT2
STH A,DAT3
问:在CPL=0的情况下,
(1) 语句“STL A,DAT2”,其中DAT2所指的地址是多少?
(2) 存储单元(DAT2)和(DAT3)的内容是多少?
1.答:(1) 0262h
(2) (DAT2)=02H (DAT3)=01H

2. 阅读下面的程序,回答问题。
MEMORY
{ PAGE 0: PROG: origin = 0x2000, length = 0x1000
PAGE 1: DATA: origin = 0x3000, length = 0x1000
}
SECTIONS
{ .text: {} > PROG PAGE 0
.bss: {} > DATA PAGE 1
}
汇编程序:
.bss a,4
.bss x,4
.bss y,1
STM #a, AR3
STM #x, AR4
RPTZ A, #3
MAC *AR3+,*AR4+,A
STL A,*(y)
问题:(1)指令“STM #a, AR3”的作用是什么?执行此句指令后,寄存器AR3的内容是多少?
(2)指令“MAC *AR3+,*AR4+,A”执行了几次?每执行一次寄存器AR3和AR4的内容如何变化?
(3)这段代码的功能是什么?
2.答:(1)将标号a的地址赋给辅助工作寄存器AR3,AR3=3000h。
(2)执行了4次,每执行一次辅助工作寄存器AR3和AR4的内容增一。
(3)

3. 阅读下面的程序,回答问题。
MEMORY
{ PAGE 0: PROG: origin = 0x2000, length = 0x1000
PAGE 1: DATA: origin = 0x4000, length = 0x1000
}
SECTIONS
{ .text: {} > PROG PAGE 0
STACK: {} > DATA PAGE 1
}
汇编程序
size .set 0x0120
stack .usect “STACK”,size
.text
STM # stack + size,SP
问题:(1)指令“stack .usect “STACK”

,size”的作用是什么?
(2)标号“stack”的存储器地址是多少?
(3)执行这段代码之后,SP寄存器的内容是多少?
3.答:(1)定义一个未初始化段,段名为”STACK”,目的是为变量stack保留size个单元的存储空间。
(2) stack的存储空间为0x4000;
(3) SP=0x4120;

1. MEMORY
{PAGE 0: PROM: org=0E000h,len=100h VECS: org=0FF80h,len=04h PAGE 1: SPRAM: org=0060h,len=20h DARAM: org=0080h,len=100h}
SECTIONS{ .text :>EPROM PAGE 0
.data :>EPROM PAGE 0.bss :>SPRAM PAGE 1STACK :>DARAM PAGE 1vectors :>VECS PAGE 0
}问题:(1)该文件是如何配置程序空间和数据空间的? (2)该文件中出现了几个段?哪些是初始化段?哪些是未初始化段?各段是如何分配的?
1.答:该文件使用MEMORY伪指令将程序空间划分为两个小区间:名为PROM的区间其起始地址为0E000h,长度为100h字;名为VECS的区间其起始地址为0FF80h,长度为4字。将数据空间也分为了两个小区间: 名为SPRAM的区间其起始地址为0060h,长度为20h字;名为DARAM的区间其起始地址为0080h,长度为100h字。
(2)出现了5个段,.text,.data和vectors是初始化段,.bss和STACK段是未初始化段。
.text和.data分配到程序空间的EPROM区间;.bss分配到数据空间SPRAM区间;STACK段分配到数据空间的DARAM区间; vectors段分配到程序空间的VECS区间。


2. 阅读下面的程序片段,写出运行结果
.mmregs
DAT0 .SET 60H
LD #004h,DP
ST #0345h,DAT0
STM #0002h,T
MPY DAT0,A
NOP
NOP
问题:(1)寄存器T的作用是什么?
(2)执行“MPY DAT0,A”后,累加器A的内容是什么?
2.答:寄存器T的作用是暂存被乘数,
累加器A的内容为0x68A或68Ah


3. 已知DSP的三个时钟引脚状态CLKMD1-CLKMD3=101,外部晶振=10MHz,参数设置表:
CLKMD1 CLKMD2 CLKMD3 CLKMD复位值 时钟方式
0 0 0 E007H PLL×15
0 0 1 9007H PLL×10
0 1 0 4007H PLL×5
1 0 0 1007H PLL×2
1 1 0 F007H PLL×1
1 1 1 0000H 2分频
1 0 1 F000H 4分频
STM #00H,CLKMD
Status:LDM CLKMD,A
AND #01H,A
BC Status,ANEQ
STM #9087H,CLKMD
问题:(1)DSP复位后,DSP的工作时钟是多少?
(2)执行上面的程序片段后,DSP的工作时钟是多少?
3.答: (1)2.5MHz
(2)100MHz

1. 阅读程序,回答后面的问题
STM #9,AR4
begin: STM #7,BRC
RPTB next-1
nop
next: LD #0,B
banz begin,*AR4-
问(1)BRC寄存器是做什么用途?
(2)其中的“nop”语句被执行了多少次?
1.答:BRC保存着RPTB指令的循环次数
80次

2. 阅读下面的程序,回答问题。
MEMORY
{ PAGE 0: PROG: origin = 0x2000, length = 0x1000

PAGE 1: DATA: origin = 0x3000, length = 0x1000
}
SECTIONS
{ .text: {} > PROG PAGE 0
STACK: {} > DATA PAGE 1
}
汇编程序
size .set 0x0120
stack .usect “STACK”,size
.text
STM # stack + size,SP
问题:(1)指令“stack .usect “STACK”,size”的作用是什么?
(2)标号“stack”的存储器地址是多少?
(3)执行这段代码之后,SP寄存器的内容是多少?
2.答:(1)定义一个未初始化段,段名为”STACK”,目的是为变量stack保留size个单元的存储空间。
(2) stack的存储空间为0x4000;
(3) SP=0x4120;

3. 阅读下面的程序,回答问题。
MEMORY
{ PAGE 0: PROG: origin = 0x2000, length = 0x1000
PAGE 1: DATA: origin = 0x3100, length = 0x1000
}
SECTIONS
{ .text: {} > PROG PAGE 0
.bss: {} > DATA PAGE 1
}
汇编程序:
.bss x,16
.bss y,16
.text
STM #x,AR2
STM #y,AR3
RPT #15
MVDD AR2+,*AR3+
问题:(1)变量“x”的存储器地址是多少?位于哪个存储空间(程序还是数据存储空间)。
(2)语句“STM #x,AR2”的作用是什么?执行此句指令后,寄存器AR2的内容是多少?
(3)语句“MVDD AR2+,*AR3+”的执行了多少次?每执行一次寄存器AR2和AR3的内容如何变化?
(4)此段代码的功能是多少?
3.答:(1)变量“x”的存储器地址是0x3100;位于数据存储空间
(2)将变量“x”的地址赋给辅助工作寄存器AR2,AR2=3100h。
(3)执行了16次,每执行一次辅助工作寄存器AR2和AR3的内容增一。
(4)将数组变量“x”的数据传送到数组变量“y”中。

1.阅读下面的程序,回答后面的问题
.bss x,10
.bss y,1
STM #x,AR1
STM #9,AR2
LD #0,A
loop: ADD *AR1+,A
BANZ loop,*AR2-
STL A, * (y)
问:(1) 解释语句“.bss x,10”的含义。
(2) 解释语句“STL A, * (y)”的含义。
(3)这一段程序实现什么功能?
1.答:(1) 给x保留10个空间
(2)将累加器A的低16位数据存储到变量y中。
(3)




3. 阅读下面的程序,回答问题。
MEMORY
{ PAGE 0: PROG: origin = 0x2000, length = 0x1000
PAGE 1: DATA: origin = 0x3100, length = 0x1000
}
SECTIONS
{ .text: {} > PROG PAGE 0
.bss: {} > DATA PAGE 1
}
汇编程序:
.bss x,16
.bss y,16
.text
STM #x,AR2
STM #y,AR3
RPT #15
MVDD AR2+,*AR3+
问题:(1)变量“x”的存储器地址是多少?位于哪个存储空间(程序还是数据存储空间)。
(2)语句“STM #x,AR2”的作用是什么?执行此句指令后,寄存器AR2的内容是多少?
(3)语句

“MVDD AR2+,*AR3+”的执行了多少次?每执行一次寄存器AR2和AR3的内容如何变化?
(4)此段代码的功能是多少?
3.答:(1)变量“x”的存储器地址是0x3100;位于数据存储空间
(2)将变量“x”的地址赋给辅助工作寄存器AR2,AR2=3100h。
(3)执行了16次,每执行一次辅助工作寄存器AR2和AR3的内容增一。
(4)将数组变量“x”的数据传送到数组变量“y”中。

1. 阅读下面的程序片段,回答后面的问题
.sect ".vectors"
rst: B _c_int00
NOP
NOP
.space 18*4*16
tint: B timeout
NOP
NOP
问:(1) “.sect”伪指令的作用是什么?
(2) 标号“rst”的地址为6000H,请问标号“tint”的地址是多少?
1.答: 定义存储器映像寄存器的符号名称 (5)
A的结果是18 (5)

2.阅读下面的命令连接文件(简称CMD文件)和程序文件:
CMD文件:
MEMORY
{ PAGE 0: PROG: origin = 0x1000, length = 0x1000
PAGE 1: DATA: origin = 0x2000, length = 0x1000
}
SECTIONS
{ .text: {} > PROG PAGE 0
.data: {} > DATA PAGE 1
}
程序文件:
.data
table: .word 1,2,3,4 ; 变量初始化
.text
start: STM # 0,SWWSR ; 插入0个等待状态
问题:(1)MEMORY和SECTIONS的作用各是什么?
(2)标号“table”和“start”的地址分别是什么,分别位于程序空间还是数据空间?
2.答:定义一个自定义段名的程序段 (5)
604Ch (5)

3.已知DSP的三个时钟引脚状态CLKMD1-CLKMD3=110,外部晶振=10MHz,参数设置表:
CLKMD1 CLKMD2 CLKMD3 CLKMD复位值 时钟方式
0 0 0 E007H PLL×15
0 0 1 9007H PLL×10
0 1 0 4007H PLL×5
1 0 0 1007H PLL×2
1 1 0 F007H PLL×1
1 1 1 0000H 2分频
1 0 1 F000H 4分频
STM #00H,CLKMD
Status: LDM CLKMD,A
AND #01H,A
BC Status,ANEQ
STM #4087H,CLKMD
问题:(1)DSP复位后,DSP的工作时钟是多少?
(2)执行上面的程序片段后,DSP的工作时钟是多少?
3.答:(1)10 MHz (5)
(2)50MHz (5)

相关主题
相关文档
最新文档