首页 > 其他 > 详细

信息安全系统设计基础第四章作业—20135227黄晓妍

时间:2015-10-27 23:19:20      阅读:293      评论:0      收藏:0      [点我收藏+]

4.43

A:没有,其实这段代码中REG能代替除了栈指针%esp以外的寄存器,但是%esp不行。这相当于将%esp先减去4,再将这个减去4的值压入栈。和pushl %esp直接将其        压入栈的情况不相符。

B:movl  REG,%edx;

   subl   $4,%esp;

   movl   %edx,(%esp) ;

4.44

A:没有,当REG指的是%esp时,这段代码相当于将%esp里的值复制到%esp里,再将%esp加4,但是并没有将原来的栈顶的结果保存到%esp里。和popl %esp的情况不符合。

B:movl (%esp), %edx;

addl  $4,%esp;

movl (%esp),REG;

 

4.47

取值:icode:ifun<-----M1[pc]=D:0   #题目中的已知条件

      valP<-----pc+1             #这个指令只有表明指令类型的一个字节,所以下一条指令的地址只需要加上1.

译码:valA<----R[%ebp]          #因为本条leave指令相当于 rrmovl %ebp,%esp;popl %esp;所以读取%ebp的地址值是必须的。

      valB<----R[%esp]          #因为popl %esp;所以读取%esp的地址值是必须的。

执行:valE<-----valB+4           #弹栈需要将栈顶指针%esp增加4.

访存:valM<----M4[valA]         #将%ebp的值读入存储器

写回:R[%esp]<----valE          #栈顶指针下移

      R[%ebp]<----valM         #将栈顶的值放入%esp中

更新PC:PC<----valP            #下一条指令的地址

 

思路:前提:leave相当于rrmovl %ebp,%esp;popl %ebp;参照了书上popl指令在顺序中的计

算。在这道题中思考明白了一个问题,就是rrmovl rA,%esp;与pushl rA;的区别。前者是将rA的地址复制到栈顶指针指向的位置,指针并不移动,后者是将rA的地址压入栈,指针地址值减去4,指针上移。

4.48

取值:icode:ifun<-----M1[pc]=C:0   #题目中的已知条件

      rA:rB<----M1[pc+1]         #指令类型一个字节,所以寄存器标识符的起始地址只需要+1

      vlaC<-----M4[pc+2]         #指令类型+寄存器标识符=2个字节,所以常数字的起始地址只需要pc+2

      valP<-----pc+6             #指令类型+寄存器标示符+常数字=1+1+4=6字节,所以下一条指令的地址需要加上6.

译码:valA<----R[rB]             #因为将一个常数字与寄存器的值相加并复制到寄存器,需要读取寄存器中的值

执行:valE<-----valA+valC         #计算寄存器和常数字之和的值.

      Set CC                   #标识标志位

访存:

写回:R[rB]<----valE             #将计算出来的值复制到寄存器中

更新PC:PC<----valP            #下一条指令的地址

思路:前提:iaddl V,rB;相当于将两者值相加,并把值移动到寄存器rB中。参照了irmovl和opl的顺序计算。

信息安全系统设计基础第四章作业—20135227黄晓妍

原文:http://www.cnblogs.com/angelahxy/p/4915693.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!