【发布时间】:2014-04-01 05:38:41
【问题描述】:
在汇编中您可以将数据存储在寄存器或堆栈中。在任何给定时刻只能访问堆栈的顶部(对吗?)。考虑以下 C 代码:
main(){
int x=2;
func();
}
func( int x ){
int i;
char a;
}
在调用 func() 时,以下内容被压入堆栈(考虑 32 位系统):
variable x (4 bytes, pushed by main)
<RETURN ADDRESS> (4 bytes pushed by main?)
<BASE POINTER> (4 bytes pushed by func())
variable i (4 bytes, pushed by func())
variable a (1 byte, pushed by func())
我有以下问题:
在 C 代码中,您可以从函数内部的任何位置访问局部变量,但在汇编中您只能访问堆栈顶部。 C 代码被翻译成汇编(在机器代码中,但汇编是它的可读形式)。那么汇编如何支持读取不在栈顶的变量呢?
在我的示例中,我是否遗漏了也将被推送到堆栈的任何内容?
在汇编中,如果你在堆栈上压入一个char或一个int,它如何确定它需要压入4个字节还是1个字节?因为它使用相同的操作(推)吧?
提前致谢 格。马里克鲁兹
【问题讨论】: