导航
您当前的位置:首页 > 学历类 > 研究生考试
问题:

答案窝,daanwo.com
[应用题] 45.(16分)已知f(n)=n!=n×(n-1)×(n-2)×…×2×1,计算f(n)的C语言函数f1的源程序(阴影部分)及其在32位计算机 M上的部分机器级代码如下:
int f1(int n){
1 00401000 55 push edp
... ... ...
if (n>1)
1100401018 83 7D 08 01 cmp dword ptr [ebp+8],1
120040101C 7E 17 jle f1+35h(00401035)
return n*f1(n-1);
130040101E 8B 45 08 mov eax,dword ptr [ebp+8]
1400401021 83 E8 01 sub eax,1
1500401024 50 push eax
1600401025 E8 D6 FF FF EF call f1( 00401000)
... ... ...
1900401030 0F AF C1 imul eax,ecx
2000401033 EB 05 jmp f1+3Ah(0040103a)
else return 1;
2100401035 B8 01 00 00 00 mov eax, 1
}
... ... ...
2600401040 3B EC cmp ebp,esp
... ... ...
300040104A C3 ret
其中,机器级代码行包括行号、虚拟地址、机器指令和汇编指令,计算机 M按字节编址,int 型数据占32位。请回答下列问题:
(1)计算 f(10)需要调用函数 f1多少次?执行哪条指令会递归调用 f1?
(2)上述代码中,哪条指令是条件转移指令?哪几条指令一定会使程序跳转执行?(3)根据第16行的 call指令,第 17行指令的虚拟地址应是多少?已知第16行的 call指令采用相对寻址方式,该指令中的偏移量应是多少(给出计算过程)? 已知第 16行的 call指令的后4字节为偏移量,M是采用大端方式还是采用小端方式?
(4)f(13)=6227020800,但 f1(13)的返回值为1932053504,为什么两者不相等?要使f1(13)能返回正确的结果,应如何修改 f1的源程序?
(5)第19行的imul指令(带符号整数乘)的功能是R[eax]←R[eax]×R[ecx],当乘法器输出的高、低32位乘积之间满足什么条件时,溢出标志OF=1?要使CPU在发生溢出时转异常处理,编译器应在 imul 指令后应加一条什么指令?
答案窝,daanwo.com
Tags:
答案解析:

相关问题
关于我们 | 用户指南 | 版权声明 | 给我留言 | 联系我们 | 积分商城 | 答案求助 | 网站地图
Copyright © 2024 www.daanwo.com All Rights Reserved