1
45
一般来说,情况就是这样:
|
2
13
您可以亲自查看: 在Linux下,使用以下命令“编译”您的程序:
您将在assembler(myprogram.s)中获得一个程序列表。 当然,为了理解汇编程序,您应该了解一点汇编程序(但它值得学习,因为它有助于理解您的计算机是如何工作的)。调用函数(在x86体系结构上)基本上是:
|
3
3
简要说明:保存当前堆栈状态,创建新堆栈,加载并运行要执行的函数的代码。这涉及到给微处理器的几个寄存器带来不便,一些疯狂地来回读/写内存,一旦完成,调用函数的堆栈状态就会恢复。 |
4
2
会发生什么?在x86中,主函数的第一行可能类似于:
|
5
1
调用是一个简单的“jmp”,将指令地址推入堆栈(方法末尾的“ret”弹出并跳到堆栈上) |
6
1
我认为您需要查看调用堆栈,以便更好地了解函数调用期间发生的情况: http://en.wikipedia.org/wiki/Call_stack |
7
1
|
8
1
会发生什么? C模拟将在汇编中发生的情况。。。 它离机器如此之近,以至于你们可以意识到将会发生什么
|
9
0
1-在堆栈上建立调用上下文
3-对方法执行“调用” |
10
0
一般的 我的想法是你需要
Wikipedia article on calling conventions . 例如,在x86上,堆栈几乎总是用于向函数传递参数。然而,在许多RISC体系结构上,寄存器主要使用,而堆栈仅在例外情况下才需要。 |
11
0
通常的想法是调用方法中使用的寄存器被推送到堆栈上(堆栈指针位于
当函数结束时,反过来也会发生同样的情况:堆栈将恢复到调用前的状态。这称为“弹出寄存器”。
更新:
通常,函数的参数按相反的顺序推送到堆栈上,当从堆栈中检索时,它们的显示顺序似乎正常。此订单不由C担保(裁判:
|