регистры esp и ebp

В настоящее время я изучаю ассемблер для процессоров Intel. Поскольку стек "растет вниз", почему мы должны добавить для доступа к определенному элементу

[ebp + 8] ;; This will access the first param

Я знаю, что мы должны пропустить старое значение ebp и адрес возврата, и поэтому мы используем 8 (потому что каждый из них имеет длину 4 байта). Это довольно странно.

Также, если ebp является резервной копией для esp, каково значение ebp в основной функции. Ex:

_start:

;; what's ebp value here ?

push eax
push ebx
call someFunction ;; this will create a stack frame

+-----------+
|   param1  |
+-----------+
|   param0  | <--- this is [ebp + 8] ( assuming mov ebp, esp )
+-----------+
|ret_address|
+-----------+
|    ebp    |
+-----------+ <--- esp

И еще, когда мы выделяем память для локалов, мы должны вычесть из ebp ... Пожалуйста, дайте не однозначный ответ. Спасибо!

16
задан Andrei 2 December 2011 в 20:02
поделиться