Ver Mensaje Individual
  #6  
Antiguo 30-06-2011
Avatar de Al González
[Al González] Al González is offline
In .pas since 1991
 
Registrado: may 2003
Posts: 5.604
Reputación: 29
Al González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en bruto
Cita:
Empezado por morringo Ver Mensaje
[...] 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.
Responder Con Cita