家庭作业

3.65我们可以从题目所给的汇编代码画出结构体变量的栈结构。

我们从汇编代码中可以看到

由变量t和u相差16个地址值可知,short s[B]存放在16个字节中,而一个short型变量在内存中占用2个字节,所以我们可以推断出,

B取四的倍数的上整数 = 8。 
8+4+ (B*2)取四的倍数的上整数 = 28。 所以B的可选值为8和7。 
2*A*B取四的上整数为44,所以A*B的可选值为21和22。 所以 A=3, B=7。

 

4.43

没有正确执行pushl %esppushl %esp是将esp当前的内容入栈。 如果REGesp,那么代码是先减去了esp,然后将减了4以后的REG移入了esp

修改:(我只能想到利用其它的寄存器)

movl REG, %eax

 subl $4, %esp

 movl %eax, (%esp)

 

4.44

也没有正确执行popl %esp,因为popl %esp是将当前栈顶的值放入esp

如果REGesp,那么最后得到esp是栈顶值减4之后的值。

movl (%esp), %eax

addl $4, %esp

movl %eax, REG

 

原文地址:https://www.cnblogs.com/java-stx/p/4934715.html