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