Quais registros de CPU devem ser restaurados no final de um procedimento asm no Delphi
Ao escrever um procedimento ou função Delphi no código de montagem, quais registros devem ser salvos e restaurados para o valor original no final do procedimento?
Ao chamar outro procedimento ou função Delphi do código de montagem (em linha), o que posso esperar que outra função faça com os registradores? Quais registros serão restaurados aos seus valores originais e quais não?
(Obviamente, a mesma resposta se aplicaria a ambas as perguntas)
Estou assumindo oconvenção de chamada padrão de Delphi. Eu sei dissoEAX
é usado para valores de retorno de 32 bits. E olhando para o código ASM em SysUtils.pas, parece queEBX
, ESI
eEDI
são empurrados e restaurados, mas os outros não. Não consigo encontrar nenhuma documentação sobre isso, no entanto.