我对计算机体系结构教科书中的这个示例程序感到困惑。
这是C代码......
这是生成的Y86代码......
我的问题是0x046
mrmovl 8(%ebp), %ecx
为什么在堆栈指针前面设置Start到8个字节呢?我想我一切都很困惑。就像堆栈正在查看0x100一样,为什么%ecx被设置为远离那里8个字节,然后当Count已经设置为距离%ebp 12个字节时增加4?我对堆栈指针究竟是什么的理解可能是错误的。
答案 0 :(得分:1)
代码按以下顺序将事物压入堆栈:
Count
(4
)Start
(array
)%eip
(由call
隐式推送); %ebp
。然后代码将%ebp
设置为%esp
,堆栈如下所示:
(您主要对标有%EBP
及以上的部分感兴趣。)
希望这能澄清事情。您可以阅读更多here。