Использование регистров процессора
В данной таблице приведены сведения по использованию регистров процессора в 32-битных приложениях Дельфи. В первой колонке - список регистров. Во второй колонке - что содержится в регистре в секции входа в процедуру, а в третьей - что при выходе. В четвертой колонке - возможность использования регистра в коде и в последней колонке - необходимость сохранения регистра (сохранять при входе и восстанавливать при выходе).
Регистр | Код входа | Код выхода | Можно ли использовать? | Нужно ли сохранять |
EAX | Self (1), Первый параметр (2) или не определен (3) | Результат функции (4) | Да | Нет |
EBX | Неизвестно | Не используется | Да | Да |
ECX | Второй параметр (1), третий параметр (2) или не определен (3) | Не используется | Да | Нет |
EDX | Первый параметр (1), второй параметр (2) или не определен (3) | Для Int64 старшее двойное слово результата, или не используется | Да | Нет |
ESI | Не определен | Не используется | Да | Да |
EDI | Не определен | Не используется | Да | Да |
EBP | Указатель фрейма стека | Указатель фрейма стека | Да | Да |
ESP | Указатель стека | Указатель стека | Да | n/a |
cs | Кодовый сегмент (5) | Не используется | Нет | Да |
ds | Сегмент модели памяти (5) | Не используется | Нет | Да |
es | Сегмент модели памяти (5) | Не используется | Нет | Да |
fs | Резервировано для Windows | Резервировано для Windows | Нет | Да |
gs | Резервировано | Резервировано | Нет | Да |
ss | Сегмент стека (5) | Не используется | Нет | Да |
(1) Для метода, когда используется соглашение Register
(2) Для автономных функций и процедур, когда используется соглашение Register
(3) Для всех других случаев при всех соглашенияч о вызове
(4) Только для результата, который полностью помещается в регистр. См. таблицу для полного обзора как результаты возвращаются из функции.
(5) В плоской 32-битной модели памяти все сегментные регистры нормально указывают на один и тот же сегмент памяти. Тем не менее, при анализе поведения Дельфи, оказывается, что регистр cs имеет различное значение.