三.程序阅读题(本题总分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分频
汇编table指令什么意思
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)

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。