В данной таблице приведены сведения по использованию регистров процессора в 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 имеет различное значение.