Какие регистры CPU должны быть восстановлены в конце процедуры ASM в Delphi

StackOverflow https://stackoverflow.com/questions/3557500

Вопрос

При написании процедуры 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 не может принимать ничего о том, что содержимое регистрации в записи в заявлении.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top