文章
8
粉丝
0
获赞
1
访问
618
(1)第3、10、14条指令会使程序发生跳转,采用相对寻址方式,第三条指令跳转目的地址计算:00401008H+2H+21H=00401031H。
(2)SF=0,OF=0,ZF=0,判断跳转的逻辑表达式是((SF ≠ OF) || ZF)
(3)第五条指令移位找到当前A[i]的位置第六条指令实现sum值的累加,第七条指令实现i的自增1,第七条指令采用寄存器间接寻址,计算机是按字节编址,A[0]起始地址是080040A0H
(4)是CISC因为指令长度不一致。
评分及理由
(1)得分及理由(满分4分)
得分:3分
理由:学生正确识别了第3、10、14条指令可能发生跳转,并指出采用相对寻址方式(得1分)。跳转目标地址计算过程基本正确,但起始地址错误:指令3的虚拟地址应为00401008H(而非0040100EH,但学生计算中使用了00401008H,实际标准答案中指令3地址为00401008H,但标准解析中写为0040100EH可能是笔误,根据代码行虚拟地址00401008正确),计算过程为当前指令地址+指令长度+偏移量(00401008H+2+21H=00401031H),结果正确(得2分)。但未明确说明偏移量为补码形式(21H即+33),扣1分。
(2)得分及理由(满分3分)
得分:2分
理由:学生正确给出了SF=0、OF=0、ZF=0(sum=150>100,非零且无溢出,符号为正,故标志位正确,得1分)。判断跳转的逻辑表达式写为“((SF ≠ OF) || ZF)”,这与标准答案“(SF ⊕ OF)| ZF”等价(异或即不等),表达正确(得2分)。但符号使用不规范(≠应写作异或或文字描述),不扣分。
(3)得分及理由(满分7分)
得分:2分
理由:学生正确指出第7条指令操作数“(%eax)”采用寄存器间接寻址(得1分),并正确判断计算机按字节编址(因偏移量计算需×4,得1分)。但其他部分错误:第5条指令功能(shll)是计算数组偏移(i×4),而非“找到A[i]位置”;第6条指令(addl)是计算A[i]地址(基址+偏移),而非“sum累加”;第7条指令(movl)是读取A[i]值到ecx,而非“i自增”;ecx存储内容应为A[i]的值,未回答;A[10]起始地址计算错误(应为0804A010H + 10×4 = 0804...
登录后发布评论
暂无评论,来抢沙发