文章
266
粉丝
0
获赞
0
访问
27.8k
1):需要调用函数10次,执行call f1 会递归调用f1;
2):jle f1+35h是条件转移指令,jmp f1+3Ah,call f1,ret一定会让程序跳转执行;
3):0040102A是第17行指令的虚拟地址;此时pc里的内容是0040102A,它要跳转到00401000,所以偏移量应该是00401000-0040102A=FFFFFFD6;
此时为小端存储;
4):6227020800已经超出int表示的范围此时f1执行中发生了溢出导致结果错误;将int改为double;
5):当高32位不全是低32位的第32位所表示的数时,此时OF=1;要使CPU在发生溢出时转异常处理,编译器应在imul指令后应加一条自陷指令;
评分及理由
(1)得分及理由(满分2分)
第一问回答正确(调用10次),第二问回答正确(call指令递归调用)。得2分。
(2)得分及理由(满分2分)
第一问回答正确(jle是条件转移指令),第二问回答正确(jmp、call、ret一定会跳转)。得2分。
(3)得分及理由(满分4分)
第一问(虚拟地址)计算正确(0040102A),得1分;第二问(偏移量)计算正确(FFFFFFD6),得1分;第三问(大小端)回答正确(小端),得1分;但偏移量计算过程未给出(标准答案要求给出计算过程),扣1分。本小题共得3分。
(4)得分及理由(满分4分)
第一问回答正确(溢出导致结果错误),得2分;第二问修改方案(改为double)可行但非最优(标准答案为long long等整型,double有精度损失),扣1分。本小题共得3分。
(5)得分及理由(满分4分)
第一问回答不准确(未明确高33位是否全0或全1),得1分;第二问回答正确(自陷指令),得2分。本小题共得3分。
题目总分:2+2+3+3+3=13分
登录后发布评论
暂无评论,来抢沙发