Запрос на использование указателя стека в ассемблере - PullRequest
4 голосов
/ 02 марта 2010

Я был готов опубликовать статью в Википедии о рекурсии Tail: http://en.wikipedia.org/wiki/Tail_call

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

Ответы [ 2 ]

4 голосов
/ 02 марта 2010

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

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

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

3 голосов
/ 02 марта 2010

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

...