¿Qué registros de la CPU son para ser restaurado al final de un procedimiento de ASM en Delphi

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

Pregunta

Al escribir un procedimiento Delphi o función en código ensamblador, que registros deben ser salvados y restaurados al valor original al final del procedimiento?

Cuando se llama a otro procedimiento Delphi o función a partir de (en línea) código ensamblador, ¿qué puedo esperar que otra función que ver con los registros? ¿Qué registros se restaurarán a sus valores originales y que no podrá ser?

(Obviamente, la misma respuesta se aplicaría a las dos preguntas)

Estoy asumiendo la llamada predeterminada convención de Delphi. Sé que EAX se utiliza para valores de retorno de 32 bits. Y mirar el código asm en SysUtils.pas, parece que EBX, ESI y EDI se empujan y se restauran, pero los otros no lo son. No puedo encontrar ninguna documentación acerca de esto, sin embargo.

¿Fue útil?

Solución

Los primeros tres argumentos de una función se dan en EAX, EDX, y ECX, respectivamente. Los argumentos adicionales son empujados en la pila. Para un método de un objeto, el puntero Self es siempre el (invisible) primer parámetro. El resultado debe ser en EAX. Para funciones que devuelven cadenas largas, el (invisible) última parámetro de la función es el puntero a la cadena resultante (que por sí mismo es un puntero al primer carácter de la cadena).

EBX no debe ser alterado (a menos que restaure antes del final del procedimiento / función), y por lo tanto no debe ESP, EBP, ESI, o bien EDI (1) una excelente introducción a Delphi inline ASM utiliza para encontrar aquí: http://www.delphi3000.com/articles/article_3766.asp

Otros consejos

No sabemos si los documentos están al día, pero usted debe tener una mirada en Uso de Código de ensamblador en línea (Win32 únicamente) en el Embarcardero Wiki:

Cita:

  

En general, las normas de uso de registro en una declaración asm son los mismos que los de un procedimiento o función externa. Una declaración asm debe preservar el EDI, ESI, ESP, registros EBP, y EBX, pero se puede modificar libremente los registros EAX, ECX y EDX. En la entrada a una declaración asm, puntos EBP al marco de pila actual y ESP apunta a la parte superior de la pila. A excepción de ESP y EBP, una declaración asm puede asumir nada de contenido del registro en la entrada a la declaración.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top