При написании процедуры или функции Delphi в коде сборки, какие регистры должны быть сохранены и восстановлены до исходного значения в конце процедуры?
При вызове другой процедуры или функции Delphi из (встроенной) сборкикод, что я могу ожидать, что другая функция делать с регистрами?Какие регистры будут восстановлены до их первоначальных значений, а какие нет?
(Очевидно, один и тот же ответ применим к обоим вопросам)
Я предполагаю соглашение о вызовах по умолчанию Delphi.Я знаю, что EAX
используется для 32-битных возвращаемых значений.И, глядя на код asm в SysUtils.pas, кажется, что EBX
, ESI
и EDI
выдвигаются и восстанавливаются, а остальные нет.Хотя я не могу найти никакой документации по этому поводу.