Использование ассемблера в Дельфи


         

Использование регистров процессора


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



Содержание раздела