2010-03-02 3 views
4

Я приготовлена ​​еще статья размещена на википедии на хвостовую рекурсию: http://en.wikipedia.org/wiki/Tail_callЗапрос на использование указателя стека в ассемблере

Теперь здесь в конце статьи, пример показывает указатель стека используется для доступа аргументы, передаваемые вызов функции в псевдокоде сборки. Разве это не так? Я имею в виду, что аргументы вызываются вызываемым пользователем, используя указатель кадра справа, а не указатель стека?

ответ

4

Использование указателя стека в порядке. Он всегда указывает на стек в конце концов. Немного сложно отслеживать смещения от указателя стека к аргументам функции, если в функции есть какие-либо команды push или pop. И это действительно трудно переложить стек обратно в отладчик, когда нет указателя кадра.

Использование указателя кадра облегчает работу отладчика и писателя компилятора, но нет необходимости иметь его.

Настройка указателя кадра принимает инструкцию, и она использует регистр, который потенциально может быть использован для других целей. Поэтому использование указателя стека является общим методом оптимизации кода. У компиляторов Microsoft даже есть название для этой оптимизации, они называют это Frame Pointer Omission

+0

Точный и короткий ответ. Спасибо за информацию John –

+0

Джон, просто быстрый вопрос. Когда вы говорите, что работа отладчика становится легкой с указателем Frame, о котором вы говорите отладчиком? –

+0

Любой отладчик. Когда у вас есть указатели на рамки, легко восстановить стек вызовов и показать его в окне отладки. Без указателей на рамки отладчик должен фактически декомпилировать код для отображения стека вызовов. –

3

Выделенный регистр указателя фрейма, безусловно, является более популярным общепринятым общим вызовом ABI s, но нет ничего по своей сути «неправильного» в использовании другого (возможно, более простого) соглашения о вызове, когда оно чисто для иллюстративных целей (добавление регистра указателя кадра эти фрагменты просто сделают их чуть длиннее и ничего не изменят).

+0

благодарит за информацию. Этот сайт является лучшим в блоке прямо сейчас –

Смежные вопросы