gpt4 book ai didi

c - 了解一些汇编代码

转载 作者:行者123 更新时间:2023-11-30 15:48:04 27 4
gpt4 key购买 nike

我想学习一些汇编代码,所以我在一些教程中读到了汇编代码

int proc(void)
{
int x,y;
scanf("%x %x", &y, &x);
return x-y;
}

1   proc:
2 pushl %ebp
3 movl %esp, %ebp
4 subl $40, %esp
5 leal -4(%ebp), %eax
6 movl %eax, 8(%esp)
7 leal -8(%ebp), %eax
8 movl %eax, 4(%esp)
9 movl $.LC0, (%esp)
10 call scanf
Diagram stack frame at this point
11 movl -4(%ebp), %eax
12 subl -8(%ebp), %eax
13 leave
14 ret

如果我理解得很好的话,第5行到第8行的指令存储了一些地址,这些地址将用于存储scanf的输入值。那么,是否可以说 scanf 系统地使用地址 %esp 加上一定数量的字节(取决于输入的 sizeof)来获取数据存储的地址?

最佳答案

这里发生的是建立一个堆栈帧来将参数传递给scanfsubl 用于为新堆栈帧分配空间,movl 用于与堆栈指针 %esp 的偏移量一起写入值用于新分配的堆栈帧上的参数。

关于 x86 调用约定和 cdecl 的更全面的解释可以在 here 找到。 。了解堆栈帧的高级结构和 cdecl 约定将帮助您理解此代码片段的意图。

关于c - 了解一些汇编代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17040214/

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