Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Asm для Linux/Unix > Использование %ebp


Автор: Goganchic 17.12.2008, 14:53
Всем привет! Начинаю изучать ассемблер, и у меня такой вопрос: при вызове функции происходит следующее: сначала на стек кладется адрес возврата, а потом параметры в обратном порядке. Соответственно указатель стека (%esp) здесь сдвигается. Как я понимаю, при вызове или возврате из функции еще как-то используется регистр %ebp. В http://ru.wikibooks.org/wiki/Ассемблер_в_Linux_для_программистов_C нашел такой текст:
Цитата

%ebp: Base pointer register — указатель базы кадра стека (англ. stack frame). Предназначен для организации произвольного доступа к данным внутри стека.

И больше ничего. Хотелось бы подробнее узнать, что такое %ebp и с чем его едят.

P.s. в ассемблере, я мягко говоря начинающий, так что заранее извиняюсь за глупый или кривосформулированный вопрос.

Заранее спасибо за ответы.

Автор: MAKCim 18.12.2008, 18:11
Цитата(Goganchic @  17.12.2008,  14:53 Найти цитируемый пост)
Хотелось бы подробнее узнать, что такое %ebp и с чем его едят.

обычно пролог функции следующий
Код

pushl %ebp
movl %esp, %ebp
subl $128, %esp

здесь 128 - это размер локального стекового фрейма функции (для хранения локальных переменных)
в рамках этого фрейма каждая переменная имеет фиксированное смещение относительно %ebp
и ее значение может быть получено, например, следующим образом
Код

movl -32(%ebp), %eax

32 взято от балды  smile

Добавлено через 1 минуту и 7 секунд
Цитата(Goganchic @  17.12.2008,  14:53 Найти цитируемый пост)
сначала на стек кладется адрес возврата, а потом параметры в обратном порядке.

сначала параметры, потом адрес возврата

Автор: Goganchic 19.12.2008, 13:32
MAKCim, пасиб, разобрался

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)