这是否可以保证CPU在与堆栈增长相反的方向上获取内存?

时间:2011-07-18 13:27:17

标签: assembly stack

0x00000000004004b7 <func+31>:   mov    -0x18(%rbp),%rax

对于堆栈增长到较低地址的体系结构,上面提取-0x18(%rbp)~-0x20(%rbp);反之亦然。

这是真的吗?

如果是这样的话,技术原因是什么?

2 个答案:

答案 0 :(得分:3)

通常,CPU不知道堆栈是如何实现的(通常由编译器决定)。

因此,在您的情况下,它会从地址%rbp-0x18开始提取一个字。如果一个单词是4个字节,那么它将获取跨越{%rbp-0x18%rbp-0x17%rbp-0x16%rbp-0x15}的单词。

答案 1 :(得分:2)

没有。事情二是无关的。一个是ISA的属性,另一个是平台的ABI。

顺便说一下,我不知道任何多字节访问不在升序地址上的架构。