如果堆栈大小为32,那么-16(%ebp)
和16(%esp)
会引用相同的四个字节吗?假设我们一次只想读取或写入四个字节,esp
位于地址0
。
从我的阅读中,似乎从ebp
读取/写入从较高地址到较低地址的偏移和从esp
的偏移从低到高。因此,我的回答是不,他们不会引用相同的四个字节。 -16(%ebp)
会将字节16
引用到20
,而16(%esp)
会将字节12
引用到16
。这个假设是正确的还是我完全错了?如果它是正确的,为什么存在这种差异?
答案 0 :(得分:2)
如果“堆栈大小为32”,则表示%esp + 32 == %ebp
,则-16(%ebp)
和16(%esp)
引用相同的地址,即%esp + 16
。因此,它们指的是相同的字节,字或双字 - 始终从计算的地址开始读取对象并向更高的地址移动(即使偏移表达式为负)。因此,您将通过%esp + 16
读取字节%esp + 19
。