объяснение процедуры пролога

Я совершенно новичок в этом, и у меня есть некоторые вопросы, которые я буду благодарен за вашу помощь, чтобы понять это.

Первое, что должна выполнить процедура при вызове, - это сохранение предыдущего   FP (поэтому его можно восстановить при выходе процедуры). Затем он копирует SP в   FP для создания нового FP и продвигает SP для резервирования места для   локальные переменные. Этот код называется прологом процедуры. на   выход процедуры, стек должен быть очищен снова, что-то называемое   процедура epilog. Инструкции Intel ENTER и LEAVE и   Инструкции Motorola LINK и UNLINK были предоставлены для большинства   процедуры proog и epilog работают эффективно.

Вышеприведенный текст цитируется из разбивки стопкой бумаги, и мне было довольно сложно понять следующие вопросы:

«Первое, что должна выполнить процедура при вызове, - это сохранение предыдущего   FP (поэтому его можно восстановить при выходе процедуры). Затем он копирует SP в   FP для создания нового FP "

1) копирует ли SP в FP стираемое сохраненное значение FP, которое должно быть сохранено?

"Затем он копирует SP в FP для создания нового FP и продвигает SP к   зарезервируйте место для локальных переменных.

2) почему необходимо продвигать СП? не предполагается ли оно автоматически уменьшаться при вводе локальных переменных?

3) каково значение SP, IP и FP при запуске основной функции без вызова какой-либо подпрограммы?

1
nl ja de

1 ответы

1) выполняется ли копирование SP в FP с сохраненным значением FP, которое предполагается сохранить?

Копирование указателя стека в регистр указателя фрейма (e/bp на Intel) перезаписывает предыдущее значение, да, но вы только что сохранили это значение в стеке на предыдущем шаге именно так, чтобы его можно было восстановить при выходе.

2), почему необходимо продвигать SP? не предполагается ли оно автоматически уменьшаться при вводе локальных переменных?

Да, push делает это, но этот шаг обычно выполняется с помощью mov (на Intel), который не изменяет указатель стека.

3) каково значение SP, IP и FP при запуске основной функции без вызова какой-либо подпрограммы?

IP указывает на первую команду в main , очевидно. Указатель стека указывает на последний элемент, сохраненный в стеке. Указатель кадра обычно указывает на фрейм функции операционной системы, который вызывается main .

0
добавлено