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   ;把结果写回到目的寄存器中。

感想

这次的作业难度比较低,主要是复习了对顺序实现的几个步骤里都做了些什么,每一步都代表着什么意义,练习熟练后可以做到举一反三。

原文地址:https://www.cnblogs.com/20135202yjx/p/4914943.html