Какие регистры CPU должны быть восстановлены в конце процедуры ASM в Delphi
-
01-10-2019 - |
Вопрос
При написании процедуры Delphi или функции в монтажном коде, какие регистры должны быть сохранены и восстановлены на исходное значение в конце процедуры?
При вызове другой процедуры Delphi или функции из (встроенного) кода сборки, что я могу ожидать, что другая функция делать с регистрами? Какие регистры будут восстановлены к их первоначальным значениям и которые не могут?
(Очевидно, что тот же ответ будет применяться к обоим вопросам)
Я предполагаю, что Конвенция о вызове по умолчанию дельфи. я знаю это EAX
используется для 32-битных возвратных значений. И глядя на код ASM в Sysutils.pas, кажется, что EBX
, ESI
а также EDI
толкнули и восстановлены, но другие нет. Однако я не могу найти документацию об этом.
Решение
Три первых аргумента функции приведены в EAX
, EDX
, а также ECX
, соответственно. Дополнительные аргументы нажаты на стек. Для метода объекта, Self
Указатель всегда (невидимый) первый параметр. Результат должен быть в EAX
. Отказ Для функций, возвращающих длинные строки, (невидимый) прошлой Параметр функции является указателем к полученной строке (который сам по себе является указателем на первый символ строки).
EBX
не должны быть изменены (если вы не восстановите его до конца процедуры / функции), и поэтому не должны ESP
, EBP
, ESI
, или EDI
либо.(1) Отличное введение в Delphi Inline ASM, который был найден здесь: http://www.delphi3000.com/articles/article_3766.asp.
Другие советы
Я не знаю, будут ли документы в курсе, но вы должны посмотреть на Использование встроенного монтажника (только Win32) На эмбаркеро Вики:
Цитировать:
В целом, правила использования реестра в операторе ASM совпадают, что и для внешней процедуры или функции. Заявление ASM должно сохранить регистры EDI, ESI, ESP, EBP и EBX, но может свободно модифицировать регистры EAX, ECX и EDX. При входе в оператор ASM EBP указывает на текущий кадр стека и указывает на верхнюю часть стека. За исключением ESP и EBP, оператор ASM не может принимать ничего о том, что содержимое регистрации в записи в заявлении.