我無法找到答案。從我讀過的%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