Cita:
Empezado por morringo
[...] metes el 10, ¿en qué parte lo metes? ¿Lo metes en la pila? [...] tengo entendido que para meter algo necesitas especificarle si en eax, edx o el registro en el cual lo quieras meter el dato.
|
Eso depende de la
convención de llamada que emplee la función en cuestión. En el caso de la función Sleep de la API de Windows su convención de llamada es
stdcall, lo cual significa (entre otras cosas) que los parámetros son pasados usando la pila y no copiándolos en los registros de la CPU (que sería lo usual con funciones nativas de Delphi). Por ello la sugerencia de
ecfisa es correcta.
Código Delphi
[-]
Procedure MuestraEntero (I :Integer);
Begin
ShowMessage (IntToStr (I));
End;
procedure TForm1.Button1Click(Sender: TObject);
begin
Asm
// Llamada a función de estilo "StdCall"
Push 10
Call Sleep
// Llamada a función de estilo "Register" (nativo de Delphi)
Mov EAX, 20
Call MuestraEntero
End;
end;
Te recomiendo leer los temas
Calling conventions y
Parameter passing de la ayuda de Delphi.
Saludos.
Al González.