题4
题目
【2023 统考真题】某 C 语言程序段在计算机 M 上的部分机器级代码如下,数组 a 的定义为 int a[24][64];,每个机器级代码行中依次包含指令序号、虚拟地址、机器指令和汇编指令。

请回答下列问题。
- 第 20 条指令的虚拟地址是多少?
- 已知第 2 条
jmp和第 7 条jgc都是跳转指令, 其操作码分别是EBH和7DH, 跳转目标地址分别为00401084H、004010BCH,这两条指令都采用什么寻址方式?给出第 2 条指令jmp的跳转目标地址计算过程。 - 已知第 19 条
mov指令的功能为a[i][j]←10, 其中ecx和edx为寄存器名,00422000H是数组a的首地址,指令中源操作数采用什么寻址方式?已知edx中存放的是变量j,ecx中存放的是什么?根据该指令的机器码判断M采用的是大端还是小端方式。 - 第一次执行第 19 条指令时, 取指令过程中是否会发生缺页异常? 为什么?
分析
涉及虚拟地址在汇编语言中它是怎么看的问题

解
-
第19条指令的虚拟地址为004010AEH,且第19条指令占11字节,因此第20条指令的虚拟地址为
。 -
第2条指令的虚拟地址为
,占2字节,取该指令后, ,变为 ,转移指令的目标地址为 ,因此偏移量为 ,根据第2条指令的机器码可知, 恰好是第2条指令给出的偏移量。第7条指令的分析同理。因此,第2条jmp和第7条jge指令都采用相对寻址方式。第2条指令jmp的跳转目标地址 。 -
第19条指令的源操作数为
,直接在机器指令中(0A 000000)给出,因此采用立即(数)寻址方式。数组 的一行有64个元素,每个元素占4字节,因此 的地址应为 ,根据汇编指令中给出的计算公式 可知,ecx中存放的是 。M采用小端方式。 -
第一次执行第19条指令时,取指令过程中不会发生缺页异常。因为第19条指令所在的该程序段都在页号为
的同一个页面中,执行第19条指令时,该页已在主存,因此取指令过程中不会发生缺页异常。