深入理解计算机系统 - 练习题 - 第三章(练习题3.33)

问题

给定C函数如下:

int proc(void)

{

int x,y;

scanf(“%x %x”, &y, &x);

return x-y;
}


GCC 产生以下的汇编代码


push %ebp

mov %esp,%ebp

sub $40,%esp//local statck 64bytes

leal -4(%ebp),%eax//get &x

mov %eax,8(%esp)//push &x to stack

leal -8(%ebp),%eax//get &y

mov %eax,4(%esp)//push &y to stack

mov .LC0,(%esp)//poniter to "%x %x"

call scanf

movl -4(%epb),%eax//get x

subl -8(%epb),%eax//get y, then put x-y at %eax

leave

ret


假设过程proc开始执行时,寄存器的值如下:

%esp 0x800040

%ebp 0x800060

如果proc调用scanf,且scanf从标准输入读入值0x46和0x53。假设字符串"%x %x"存放在存储器位置0x300070处。


答案

A. 第3行%ebp的值是多少?0x80003C
B. 第4行%esp的值是多少?0x800014
C. 局部变量x和y存放的位置是多少?x 0x800038, y0x800034


你可能感兴趣的:(读书)