gpt4 book ai didi

c - 这个movl指令有必要吗?

转载 作者:行者123 更新时间:2023-12-03 22:07:44 24 4
gpt4 key购买 nike

我读了教科书《计算机系统程序员的视角》。它给出了一个示例程序:

/* 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。当gets返回时,buf将位于栈顶。

我的问题是:9号线在这里没用吗?

编辑:这是Linux。

最佳答案

My question is: Is line 9 useless here?

没有。您不能假设 gets 不会更改堆栈上的值。这是它的参数,允许修改它。

%ebx 另一方面 is callee-savegets 函数必须保留它。

关于c - 这个movl指令有必要吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29599253/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com