20135202闫佳歆-第四章家庭作业-4.47+4.48
第四章家庭作业
选题:4.47、4.48两题
分值:两题各一分
作业过程:
4.47题:
leave指令等价于如下代码序列:
rrmovl %ebp,%esp
popl %ebp
也就是说它要执行的动作是,将帧指针ebp的内容赋给栈指针esp,然后弹出ebp,栈指针+4,结果是消灭这个栈。
参照pop指令的格式,可以得出如下的过程:
取指阶段 icode:ifun<--M1[PC] = D:0
valP <= PC + 1 ;下一条指令地址
译码阶段 valB <= R[%ebp] ;得到ebp的值,这个值就是新的栈指针esp的值
执行阶段 valE <= valB + 4 ;栈指针的值+4
访存阶段 valM <= M4[valB] ;读ebp中的值
写回阶段 R[%esp] <= valE ;把更新后的指针赋值给esp
R[%ebp] <= valM ;弹出的ebp的值
4.48题
iaddl的指令是集合了irmovl指令和addl指令,先用irmovl指令将一个常数加到寄存器,再用addl把这个值加入目的寄存器。
由题中的图,参考irmovl和addl指令的过程,可以得到如下过程:
取指阶段 icode:ifun = M1[PC] = C:0
rA:rB <= M1[PC+1] ;取出操作数指示符
valC <= M4[PC+2] ;取出一个四字节常数字,即想要加进去的那个常数
valP <= PC + 6 ;下一条指令地址
译码阶段 valB <= R[rB] ;读入想要存到的那个寄存器
执行阶段 valE <= valB + valC ;得到目的寄存器中的值和常数值的和
SetCC
访存阶段
写回阶段 R[rB] <= valE ;把结果写回到目的寄存器中。
感想
这次的作业难度比较低,主要是复习了对顺序实现的几个步骤里都做了些什么,每一步都代表着什么意义,练习熟练后可以做到举一反三。