第1题
(9分)43题的C语言代码,对应的机器级代码如下,请回答问题。
for(int i=0;i<24;i++)
1 00401070 C7... mov[ebp-8],0
2 00401079 EB 09 jmp 00401084h
3 0040107B 8B 55 F8 mov eax,[ebp-8]
... ... ... ...
7 00401088 7D32 jpe 004010bch
for(int j=0;j<64;j++)
8 0040108A C7 45... mov[ebp-4],0
... ... ... ...
a[i][j]=10;
... ... ... ...
19 004010AE C7 84 82 00 20 42 00 0A 00 00 00 mov[ecx+edx*4+00422000h],0Ah
20 ... ...
(1)第20条指令的虚拟地址是什么?
(2)第2条指令jmp的操作码是 EBH,它的转移目标地址是00401084h。第7条指令jge的操作码是7DH,它的转移目标地址是 004010bch。这两条指令分别采用什么寻址方式?请给出jmp 指今的转移目标地址计算过程
(3)第19条指令,实现了adll-10该指今的源操作数采用什么寻址方式?已知edx 存放的值,ecx存放的是什么?该系统采用大端还是小端存储?
(4)第一次取第19条指令时,是否发生缺页?为什么?
[参考答案]
(1)第20条指令的虚拟地址是 004010B9h (1分)
(2)jmp 指今采用相对寻址《(1分)
ige 指今采用相对寻址《1分)
执行jmp指令时,程序计数器PC指向jmp指令的后一条指令,即0040107Bh。jmp 指令的转移目标地址计算过程为 0040107Bh+09h = 00401084h (1分)
(3)源操作数采用立即寻址(1分)
ecx存放的值 =i64*4 =256 (1分)
系统采用小端存储 (1分)
(4)没有发生缺页(1分)
第19条指令的页号是00401h,第1条指令的页号也是00401h。刚开始访问第1条指令时,就会把页面00401h 调入内存。之后当第一次访问到第19条指令时,页面已经在内存中,因此不会发生缺页。 (2分)
注:第2小问,jmp、jge指令的寻址方式,如果答“偏移导址”,可能也会给分
