|
|
|
vngrdserg |
|
|||
Новичок Профиль Группа: Участник Сообщений: 8 Регистрация: 13.9.2005 Репутация: нет Всего: нет |
Не пойму как работает стек :
1. Какую функцию выполняют регистры esp , ebp ? 2. Смысл команды movl $10, -4(%ebp) ? Это сообщение отредактировал(а) vngrdserg - 13.9.2005, 22:07 |
|||
|
||||
adejneka |
|
||||||
Шустрый Профиль Группа: Участник Сообщений: 105 Регистрация: 8.7.2005 Где: Москва, Россия Репутация: нет Всего: 11 |
При входе в функцию в ESP хранится адрес первого аргумента. Внутри функции - указатель на вершину стека. EBP указывает на начало фрейма стека текущей функции; выше располагаются аргументы текущей фукнции, ниже - переменные, временные объекты, аргументы функций, вызываемых из текущей.
Присвоить первой переменной значение 10. Насколько я понимаю, Вы привели оттранслированный код такой функции:
Вообще, поищите "System V Application Binary Interface". |
||||||
|
|||||||
vngrdserg |
|
|||
Новичок Профиль Группа: Участник Сообщений: 8 Регистрация: 13.9.2005 Репутация: нет Всего: нет |
Дело в том , что я перехожу с интеловского синтаксиса на айти-шный
И меня в смущение привели 3 момента 1. перед регистром обязателен знак процента 2. Квадратные скобки в адресации поменяли на круглые 3. Интеловское [ebp-4] равносильно at-шному -4(%ebp) |
|||
|
||||
oleg1973 |
|
|||
asm fanat Профиль Группа: Экс. модератор Сообщений: 3283 Регистрация: 16.7.2003 Где: Italy Репутация: нет Всего: 34 |
ну так есть под линюх асм компиляторы с интеловским синтаксисом
-------------------- SST 465555 icq 200-512-712 |
|||
|
||||
vngrdserg |
|
|||
Новичок Профиль Группа: Участник Сообщений: 8 Регистрация: 13.9.2005 Репутация: нет Всего: нет |
С регистром esp понятно - это текущий указатель стека
Я не пойму , зачем нужен регистр ebp В этом смысле не понятна конструкция , которая существует при вызове процедур :
Это сообщение отредактировал(а) vngrdserg - 18.9.2005, 14:13 |
|||
|
||||
adejneka |
|
|||
Шустрый Профиль Группа: Участник Сообщений: 105 Регистрация: 8.7.2005 Где: Москва, Россия Репутация: нет Всего: 11 |
Так удобнее адресовать локальные переменные - их положение относительно начала кадра не меняется, а вот положение относительно подвижного верха стека - меняется. Кроме того, если Вы выделяется в стеке память переменного размера, используя псевдофункцию alloca, то адресация относительно EBP еще и более эффективна. |
|||
|
||||
Guest |
|
|||
Unregistered |
Регистр bp можно использовать для того , чтобы получить доступ к данным в стеке
по смещению , например [bp+2] А у меня такой вопрос : написано , что в sp хранится текущий указатель стека Что это означает ? Если я допусти добавляю число в стек , то соответсвенно и указатель перемещается вниз, а при извлечении числа вверх ? Т е можно ли изменить значение sp , кроме как командой push или pop ? И указывает ли sp всегда на последнее добавленное значение в стек ? |
|||
|
||||
oleg1973 |
|
|||
asm fanat Профиль Группа: Экс. модератор Сообщений: 3283 Регистрация: 16.7.2003 Где: Italy Репутация: нет Всего: 34 |
да sp указывает на последнее добавленое в стек значение
НО добавленное "легальным" способом типа push , call и так далее к примеру ничто не мешает сделать так
в данном случае на стек ложится адрес my_proc2 и возвратпроизойдет на этот адрес тоесть можно добавить число в стек не меняя сам sp главное не запутатся ) -------------------- SST 465555 icq 200-512-712 |
|||
|
||||
Гость_guest |
|
|||
Unregistered |
Сам sp тоже можно изменить , например так :
|
|||
|
||||
regis |
|
|||
Бывалый Профиль Группа: Участник Сообщений: 232 Регистрация: 12.12.2005 Где: Москва, Россия Репутация: нет Всего: 7 |
> А у меня такой вопрос : >написано , что в sp хранится текущий указатель стека >Что это означает ? Ну, если честно, именно это и означает ;) > Если я допусти добавляю число в стек , то соответсвенно и указатель перемещается вниз, >а при извлечении числа вверх ? Да. По соглашению все, что использует системный стек -- push/pop, call/ret, прерывания работают именно так. > Т е можно ли изменить значение sp , кроме как командой push или pop ? Да можно. В коде, приведенном сверху, есть прекрасный пример этого: sub #4, %esp. > И указывает ли sp всегда на последнее добавленное значение в стек ? Как ясно из приведенного примера, это, вообще-то говоря, неверно. Верно то, что [e]sp -- всегда указатель на вершину стека. --------------------
В. В чем разница между hardware и software?О. В отличие от второго, по первому можно двинуть кулаком или пнуть ногой. |
|||
|
||||
sgi1981 |
|
||||
Опытный Профиль Группа: Участник Сообщений: 284 Регистрация: 16.3.2006 Репутация: нет Всего: 10 |
Человек хотел задать вопрос так. Для чего регистр общего назначения esp хранит смещение в сегменте стека ? А просто не смог сформулировать свой вопрос. Разработчики микропроцессора решили использовать в архитектуре процессора этот регистр для команд процессора, использующих стек. Таких как call ret pop popf popfd popa popad push pusha pushad pushf pushfd enter leave Регистр esp был выбран для использования этими командами: для того чтобы ячейка памяти для хранения адреса точки возврата или временного хранения переменных или сохранения флагов при вызове подпрограммы обработки прерывания смогла использоваться неявно. В esp хранится смещение в сегменте стека, и при использовании этих команд смещение в машинной команде указывать не нужно. Тем самым уменьшается размер машинного кода. Возникает вопрос. А для чего тогда был выделен ещё один регистр общего назначения ebp ? Несмотря на то, что esp хранит некоторое значение смещения в сегменте стека, его использование в подпрограммах для адресации локальных переменных не всегда оправдано, потому что значение этого регистра может быть изменено за счет инструкций извлечения и размещения операндов в стеке во время выполнения подпрограммы. При записи операнда в стек командой типа push значение esp уменьшается на 4 или 2 байта, в зависимости от значения атрибута размера адреса. При извлечении операнда из стека командой типа pop значение esp увеличивается на 4 или 2 байта, в зависимости от значения атрибута размера адреса. Это сообщение отредактировал(а) sgi1981 - 28.3.2006, 15:52 -------------------- Тело в нашем пространстве - есть часть пространства, в которой пространство обладает дисторсией относительно внешнего пространства. |
||||
|
|||||
Правила форума "Asm для Linux/Unix" | |
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, MAKCim. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Asm для Linux/Unix | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |