2023-44
题 43 中的 C 程序段在计算机 M 上的部分机器级代码如下,每个机器级代码行中依次包含指令序号、虚拟地址、机器指令和汇编指令。

请回答下列问题。
1)第 20 条指令的虚拟地址是多少?
2)已知第 2 条 jmp 和第 7 条 jge 都是跳转指令,其操作码分别是 EBH 和 7DH,跳转目标地址分别为 0040 1084H、0040 10BCH,这两条指令都采用什么寻址方式?给出第 2 条指令 jmp 的跳转目标地址计算过程。
3)已知第 19 条 mov 指令的功能为 “a[i][j]←10”,其中 ecx 和 edx 为寄存器名,0042 2000H 是数组 a 的首地址,指令中原操作数采用什么寻址方式?已知 edx 中存放的是变量 j,ecx 中存放的是什么?根据该指令的机器码判断计算机 M 采用的是大端还是小端方式。
4)第一次执行第 19 条指令时,取指令过程中是否会发生缺页异常?为什么?

小程序中我的-账号中心-隐私与账号可绑定网页端账号
1)第 20 条指令的虚拟地址
0040 10B9H。第 19 条指令从 0040 10AEH 开始,机器码共 11 字节,因此第 20 条指令的虚拟地址为 0040 10AEH + 0BH = 0040 10B9H。
2)跳转指令的寻址方式及目标地址
第 2 条 jmp 和第 7 条 jge 都采用相对寻址,跳转目标地址由下一条指令的地址加上指令中的有符号位移得到。
第 2 条 jmp 的起始地址为 0040 1079H,指令长度为 2 字节,位移为 09H,所以跳转目标地址为 0040 1079H + 2 + 09H = 0040 1084H。
3)第 19 条指令的源操作数、ecx 内容及端序
第 19 条 mov 指令的源操作数为 0AH(十进制 10),直接由机器指令中的 0A 00 00 00 给出,因此采用立即(数)寻址。
数组 a 按行优先存放,每行有 64 个元素,每个元素占 4 字节,因此 a[i][j] 的地址为 0042 2000H + i×64×4 + j×4 = 0042 2000H + i×256 + j×4。与汇编指令给出的目的地址 ecx + edx×4 + 0042 2000H 对照,且 edx 保存 j,可知 ecx 中保存的是 i×256,即第 i 行相对数组首地址的字节偏移。
机器码中,地址 0042 2000H 按 00 20 42 00 排列,立即数 0000 000AH 按 0A 00 00 00 排列,均为低字节在前,因此计算机 M 采用小端方式。
4)第一次取第 19 条指令时是否会发生缺页异常
不会发生缺页异常。 页大小为 4 KB,该程序段的指令位于页号为 00401H 的同一虚拟页中,地址范围为 0040 1000H~0040 1FFFH。执行第 19 条指令之前,已经取过该页中的前序指令,所以该页已在主存;题设又说明执行过程中不会发生页面置换。第 19 条指令的 11 字节全部位于该页内,因此取指过程中不会发生缺页异常。