如果堆栈大小为32,那么-16(%ebp)和16(%esp)会引用相同的四个字节吗?

时间:2015-04-08 04:31:08

标签: assembly x86 stack

如果堆栈大小为32,那么-16(%ebp)16(%esp)会引用相同的四个字节吗?假设我们一次只想读取或写入四个字节,esp位于地址0

从我的阅读中,似乎从ebp读取/写入从较高地址到较低地址的偏移和从esp的偏移从低到高。因此,我的回答是不,他们不会引用相同的四个字节。 -16(%ebp)会将字节16引用到20,而16(%esp)会将字节12引用到16。这个假设是正确的还是我完全错了?如果它是正确的,为什么存在这种差异?

1 个答案:

答案 0 :(得分:2)

如果“堆栈大小为32”,则表示%esp + 32 == %ebp,则-16(%ebp)16(%esp)引用相同的地址,即%esp + 16。因此,它们指的是相同的字节,字或双字 - 始终从计算的地址开始读取对象并向更高的地址移动(即使偏移表达式为负)。因此,您将通过%esp + 16读取字节%esp + 19