15.阅读下面的程序片断,回答下面的问题
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所指的地址是多少?
0262h
(2) 存储单元(DAT2)和(DAT3)的内容是多少? (DAT2)=02H (DAT3)=01H
16.阅读下面的程序,回答问题。 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的内容是多少?
将标号a的地址赋给辅助工作寄存器AR3,AR3=3000h。
(2)指令“MAC *AR3+,*AR4+,A”执行了几次?每执行一次寄存器AR3和AR4的内容如何变化?
执行了4次,每执行一次辅助工作寄存器AR3和AR4的内容增一。 (3)这段代码的功能是什么?
第页(共 2 页) 26
y??aixi
i?1417. 阅读下面的程序,回答问题。 MEMORY {PAGE0: 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”的作用是什么?
定义一个未初始化段,段名为”STACK”,目的是为变量stack保留size个单元的存储空间。
(3) 标号“stack”的存储器地址是多少?
stack的存储空间为0x4000;
(3)执行这段代码之后,SP寄存器的内容是多少?
SP=0x4120;
18. 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 1 STACK :>DARAM PAGE 1 vectors :>VECS PAGE 0 } 问题:(1)该文件是如何配置程序空间和数据空间的?
答:该文件使用MEMORY伪指令将程序空间划分为两个小区间:名为PROM的区间其起始地址为0E000h,长度为100h字;名为VECS的区间其起始地址为0FF80h,长度为4字。将数据空间也分为了两个小区间: 名为SPRAM的区间其起始地址为0060h,长度为20h字;名为DARAM的区间其起始地址为0080h,长度为100h字。
(2)该文件中出现了几个段?哪些是初始化段?哪些是未初始化段?各
第页(共 2 页) 27
出现了5个段,.text,.data和vectors是初始化段,.bss和STACK段是未初始化段。
.text和.data分配到程序空间的EPROM区间;.bss分配到数据空间SPRAM区间;STACK段分配到数据空间的DARAM区间; vectors段分配到程序空间的VECS区间。
19.已知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.5MHz
(2)执行上面的程序片段后,DSP的工作时钟是多少?
100MHz
20. 阅读程序,回答后面的问题
STM #9,AR4
begin: STM #7,BRC RPTB next-1 nop
next: LD #0,B
banz begin,*AR4-
问(1)BRC寄存器是做什么用途? BRC保存着RPTB指令的循环次数
(2)其中的“nop”语句被执行了多少次? 80次
21. 阅读下面的程序,回答问题。 MEMORY {PAGE 0: PROG: origin = 0x2000, length = 0x1000 PAGE 1:DATA: origin = 0x3100, length = 0x1000 }
SECTIONS { .text: {} > PROG PAGE 0 .bss: {} > DATA PAGE 1
第页(共 2 页) 28
}
汇编程序:
.bss x,16
.bss y,16 .text
STM #x,AR2 STM #y,AR3 RPT #15
MVDD AR2+,*AR3+ 问题:(1)变量“x”的存储器地址是多少?位于哪个存储空间(程序还是数据存储空间)。
变量“x”的存储器地址是0x3100;位于数据存储空间
(2) 语句“STM #x,AR2”的作用是什么?执行此句指令后,寄存器AR2
的内容是多少?
将变量“x”的地址赋给辅助工作寄存器AR2,AR2=3100h。
(3)语句“MVDD AR2+,*AR3+”的执行了多少次?每执行一次寄存器AR2和AR3的内容如何变化?
执行了16次,每执行一次辅助工作寄存器AR2和AR3的内容增一。 (4)此段代码的功能是多少?
将数组变量“x”的数据传送到数组变量“y”中。
22.阅读下面的程序,回答后面的问题
.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”的含义。 给x保留10个空间
(2) 解释语句“STL A, * (y)”的含义。
将累加器A的低16位数据存储到变量y中。 (3)这一段程序实现什么功能?
y??xi
i?11023.阅读下面的程序,回答问题。 MEMORY {PAGE 0: PROG: origin = 0x2000, PAGE 1:DATA: origin = 0x3100, }
SECTIONS
length = 0x1000 length = 0x1000
第页(共 2 页) 29
{ .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)此段代码的功能是多少? 答:(1)变量“x”的存储器地址是0x3100;位于数据存储空间
(2)将变量“x”的地址赋给辅助工作寄存器AR2,AR2=3100h。
(3)执行了16次,每执行一次辅助工作寄存器AR2和AR3的内容增一。 (4)将数组变量“x”的数据传送到数组变量“y”中。
24. 阅读下面的程序片段,回答后面的问题 .sect \rst: B _c_int00 NOP NOP
.space 18*4*16 tint: B timeout NOP NOP
问:(1) “.sect”伪指令的作用是什么?
(2) 标号“rst”的地址为6000H,请问标号“tint”的地址是多少? 答: 定义存储器映像寄存器的符号名称
A的结果是18
25.阅读下面的命令连接文件(简称CMD文件)和程序文件: CMD文件: MEMORY
{ PAGE 0: PROG: origin = 0x1000, length = 0x1000 PAGE 1: DATA: origin = 0x2000, length = 0x1000 }
SECTIONS { .text: {} > PROG PAGE 0
第页(共 2 页) 30