我读了教科书“计算机系统程序员的观点”。它给出了一个示例程序:
/* read input line and write it back */
void echo(){
char buf[8]; /* way too small !*/
gets(buf);
puts(buf);
}
汇总代码为:
1 echo:
2 pushl %ebp
3 movl %esp, %ebp
4 pushl %ebx
5 subl $20, %esp
6 leal -12(%ebp), %ebx
7 movl %ebx, (%esp)
8 call gets
9 movl %ebx, (%esp) // This does not look useful for me
10 call puts
11 addl $20, %esp
12 popl %ebx
13 popl %ebp
14 ret
第9行似乎没用,因为第7行已经在堆栈顶部存储了buf。然后它调用gets。返回时,buf将位于堆栈的顶部。
我的问题是: 第9行在这里没用吗?
编辑:这是Linux。
答案 0 :(得分:5)
答案 1 :(得分:0)
当你调用gets函数时,可能会发生它可以修改参数的值(在你的情况下为%ebx)。因为你还没有提到代码的其他部分,所以不能说明......但是在函数调用之后再次将buff存储到堆栈顶部是好的。