家庭作业
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 %esp,pushl %esp是将esp当前的内容入栈。 如果REG是esp,那么代码是先减去了esp,然后将减了4以后的REG移入了esp。
修改:(我只能想到利用其它的寄存器)
movl REG, %eax
subl $4, %esp
movl %eax, (%esp)
4.44
也没有正确执行popl %esp,因为popl %esp是将当前栈顶的值放入esp。
如果REG是esp,那么最后得到esp是栈顶值减4之后的值。
movl (%esp), %eax
addl $4, %esp
movl %eax, REG