我目前正在阅读以下博客,了解如何编写汇编程序。我理解博客中的所有内容,但我无法理解一件事。
https://www.recurse.com/blog/7-understanding-c-by-learning-assembly
代码:
0x0000000100000f50 <main+0>: push %rbp
0x0000000100000f51 <main+1>: mov %rsp,%rbp
0x0000000100000f54 <main+4>: mov $0x0,%eax
0x0000000100000f59 <main+9>: movl $0x0,-0x4(%rbp)
我不明白为什么我们可以将0写入-0x4(%rbp)。在第1行,我们将指针保存在堆栈中的寄存器%rbp中。由于%rbp寄存器大小为64位,我后来预计我们必须将0写入堆栈中的-0x8(%rbp)位置而不是-0x4(%rbp),这只是4个字节(32位)。
任何人都可以解释一下吗?
提前致谢。