我讀例如 「LEA EAX,[EBP - 120]」 基本上是指lea指令如何與esp交互?
mov eax, ebp
sub eax, 120
給出的例子中,所述ESP是在EBP-200,然後在後面的功能
lea eax, [ebp - 120]
push eax
call xyz
這是否意味着ebp-120的值被加載到eax寄存器中,然後這個4字節的值被壓入棧中?或者這意味着esp會進一步減少120,從而創建從ebp-200到ebp-320的緩衝區,尤其是在ebp-320?
你的第一個解釋是正確的。 –
'push eax'將'eax'寄存器的內容壓入堆棧。 –
代碼傳遞一個指向局部變量的指針。存儲在ebp-120主叫方的堆棧幀中。很常見。與esp沒有任何關係,除了在調用者的函數入口處,esp值需要被調整以爲局部變量留出空間。許多教程和書籍都很好地描述了堆棧框架的工作方式。 –