1

我对我的计算机体系结构教科书中的这个示例程序感到困惑。

这是C代码...

在此处输入图像描述

这是生成的 Y86 代码...

在此处输入图像描述

我的问题是 0x046

mrmovl 8(%ebp), %ecx

为什么将 Start 设置为堆栈指针前面的 8 个字节?我想我对一切都在哪里感到困惑。就像堆栈正在查看 0x100 一样,为什么 %ecx 被设置为距离那里 8 个字节,然后当 Count 已经被设置为距离 %ebp 12 个字节时增加 4?我对堆栈指针到底在看什么的理解可能是错误的。

4

1 回答 1

1

代码按以下顺序将事物压入堆栈:

  • Count( 4)
  • Start( array)
  • 返回%eip(由 隐式推送call);
  • %ebp.

然后代码设置%ebp%esp,堆栈如下所示:

堆栈布局

(您主要对标记%EBP及以上的部分感兴趣。)

希望这可以澄清事情。你可以在这里阅读更多。

于 2014-10-05T07:07:48.490 回答