{ .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)该文件中出现了几个段?哪些是初始化段?哪些是未初始化段?各段是如何分配的?出现了5个段,.text,.data和vectors是初始化段,.bss和STACK段是未初始化段。.text和.data分配到程序空间的EPROM区间;.bss分配到数据空间SPRAM区间;STACK段分配到数据空间的DARAM区间; vectors段分配到程序空间的VECS区间。 ● 阅读下面的程序片段,写出运行结果 .mmregs DAT0 .SET 60H
LD #004h,DP
ST #0345h,DAT0
STM #0002h,T MPY DAT0,A NOP NOP
问题:(1)寄存器T的作用是什么?寄存器T的作用是暂存被乘数(2)执行“MPY DAT0,A”后,累加器A的内容是什么?累加器A的内容为0x68A或68Ah ●阅读下面的程序,回答问题。 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”的存储器地址是多少?位于哪个存储空间(程序还是数据存储空间)。)变量“x”的存储器地址是0x3100;位于数据存储空间(2)语句“STM #x,AR2”的作用是
什么?执行此句指令后,寄存器AR2的内容是多少?将变量“x”的地址赋给辅助工作寄存器AR2,AR2=3100h。(3)语句“MVDD AR2+,*AR3+”的执行了多少次?每执行一次寄存器AR2和AR3的内容如何变化?执行了16次,每执行一次辅助工作寄存器AR2和AR3的内容增一。(4)此段代码的功能是多少?将数组变量“x”的数据传送到数组变量“y”中。
●阅读下面的程序,回答后面的问题
.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?110●阅读下面的程序片段,回答后面的问题 .sect \rst: B _c_int00 NOP NOP
.space 18*4*16
tint: B timeout NOP NOP
问:(1) “.sect”伪指令的作用是什么?定义存储器映像寄存器的符号名称 (2) 标号“rst”的地址为6000H,请问标号“tint”的地址是多少?A的结果是18 ●分析程序回答问题(共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)说明该程序的功能:答:a1*x1=a2*x2+a3*x3+a4*x4(2)说明以下各量的理论值 A: 2A ;a1的地址:81H ;AR1: 88H ;AR3:84H