我无法找到答案。从我读过的%ebp有32位,将%esp移动到%ebp,你仍然会有32位,然后减去70到32,我不明白其余的。我对此很陌生,所以我不是很精通。请给出详细的解释。谢谢!查找有多少字节将esp和程序堆栈上存储的返回地址分开
下面是我遇到的问题。
在这个指令序列的末尾,多少个字节将esp和程序堆栈上存储的返回地址分开?假设我们使用标准的32位x86调用约定来调用这个函数。
804847c functioname:
804847c: push %ebp
804847d: mov %esp,%ebp
804847f: sub $0x70,%esp
8048482: movl $0x0,0x4(%esp)
804848a: movl $0x8048580,(%esp)
此指令子$ 0x70,%esp中的$ 0x70值被符号扩展为32位,所以它也有32位,就像'esp'和'ebp'一样。 (尽管内部0x70值在指令中只编码了8位,但这不是它的使用方式,这只是在这种特殊情况下的存储优化)。使用的比特数限制了可以在那些比特中编码的不同值的数量,即8比特可以被解释为从0到255,或从-128到+127,或者作为八个1比特标志(开/关)的值。在你的问题中,这并不重要,因为所有涉及的值都是32b。 – Ped7g