Почему эти регистры помещаются в стек? - PullRequest
4 голосов
/ 21 марта 2012
push    %ebp
push    %esp, %ebp
push    edi
push    esi
push    ebx

(32-битная Linux x86)

Почему эти регистры помещаются в стек?
Мигрировали по какой-то причине ...?
Но почему толкаются только «edi», «esi», «ebx»?

1 Ответ

5 голосов
/ 21 марта 2012

Это деталь реализации gcc для генератора кода x86.Удивительно трудно найти хорошие документы для этого, я нашел эту страницу , что довольно точно.Ключевая часть:

после инструкции повтора:

%eip contains return address
%esp points at arguments pushed by caller
called function may have trashed arguments
%eax contains return value (or trash if function is void)
%ecx, %edx may be trashed
%ebp, %ebx, %esi, %edi must contain contents from time of call 

Фраза «должен содержать контент с момента вызова» объясняет, почему они помещаются в пролог функции и выталкиваютсяснова в эпилоге.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...