文章
35
粉丝
0
获赞
1
访问
4.5k
(1)调用10次,执行第16行的call指令
(2)第12行的jle指令为条件转移指令,ret,jmp,call指令一定会使程序跳转执行
(3)16行指令字长为5字节,应为00401025+0000005=0040102A,采用相对寻址,跳转到00401000处,pc存储下一条指令地址,所以相对偏移量应为0040102A-00401000=0000002A,所以应采用大端方式
(4)阶乘应该全为正数,图中程序为imul,相比无符号整数的表示范围小,可能产生溢出导致结果错误,应将程序中的imul改为umul。
(5)当高32位乘积不全为低32位乘积的符号位时,结果发生溢出,应该添加一个自陷指令。
评分及理由
(1)得分及理由
得分:2分
理由:学生正确回答了计算f(10)需要调用函数f1的次数(10次),并正确指出了递归调用发生在第16行的call指令。答案与标准答案完全一致。
(2)得分及理由
得分:2分
理由:学生正确识别了条件转移指令(第12行jle)和无条件跳转指令(ret、jmp、call)。答案与标准答案完全一致。
(3)得分及理由
得分:1分
理由:学生正确计算了第17行指令的虚拟地址(0040102A),但在计算偏移量时错误(应为00401000-0040102A=FFFFFFD6,而非0000002A),且错误判断为大端方式(实际为小端方式)。偏移量计算错误扣2分,端方式判断错误扣1分。
(4)得分及理由
得分:1分
理由:学生正确指出了溢出问题,但提出的解决方案(将imul改为umul)不正确。正确的解决方案应为修改返回值类型为更大范围的数据类型(如long long)。溢出原因分析正确得1分,解决方案错误扣3分。
(5)得分及理由
得分:2分
理由:学生正确描述了溢出条件(高32位乘积不全为低32位乘积的符号位时溢出),并正确提出了添加自陷指令的解决方案。答案与标准答案基本一致,但表述略有不同,不扣分。
题目总分:2+2+1+1+2=8分
登录后发布评论
暂无评论,来抢沙发