题4

题目

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

请回答下列问题。

  1. 第 20 条指令的虚拟地址是多少?
  2. 已知第 2 条 jmp 和第 7 条 jgc 都是跳转指令, 其操作码分别是 EBH7DH, 跳转目标地址分别为 00401084H004010BCH,这两条指令都采用什么寻址方式?给出第 2 条指令 jmp 的跳转目标地址计算过程。
  3. 已知第 19 条 mov 指令的功能为a[i][j]←10, 其中 ecxedx 为寄存器名, 00422000H 是数组 a 的首地址,指令中源操作数采用什么寻址方式?已知 edx 中存放的是变量 j, ecx 中存放的是什么?根据该指令的机器码判断 M 采用的是大端还是小端方式。
  4. 第一次执行第 19 条指令时, 取指令过程中是否会发生缺页异常? 为什么?

分析

涉及虚拟地址在汇编语言中它是怎么看的问题

题44

  1. 第19条指令的虚拟地址为004010AEH,且第19条指令占11字节,因此第20条指令的虚拟地址为

  2. 第2条指令的虚拟地址为,占2字节,取该指令后,,变为,转移指令的目标地址为,因此偏移量为,根据第2条指令的机器码可知,恰好是第2条指令给出的偏移量。第7条指令的分析同理。因此,第2条jmp和第7条jge指令都采用相对寻址方式。第2条指令jmp的跳转目标地址

  3. 第19条指令的源操作数为,直接在机器指令中(0A 000000)给出,因此采用立即(数)寻址方式。数组的一行有64个元素,每个元素占4字节,因此的地址应为,根据汇编指令中给出的计算公式可知,ecx中存放的是。M采用小端方式。

  4. 第一次执行第19条指令时,取指令过程中不会发生缺页异常。因为第19条指令所在的该程序段都在页号为的同一个页面中,执行第19条指令时,该页已在主存,因此取指令过程中不会发生缺页异常。