PDA

Ver la Versión Completa : ASM En delphi - Me ayudan? (Sleep)


MarkPwn
05-06-2011, 17:45:03
Hola a todos, estaba pasando un codigo de RadASM a delphi, al parecer lo he pasado, mas necesito hacer sleep(10) Entre un codigo y otro

ASM
invoke Sleep,10

delphi
Sleep(10);

como pudiese invocar sleep en delphi en este codigo pro ejemplo :

begin
Asm
mov eax, dword ptr [00851456h]
mov eax, dword ptr [eax]
add eax, 1248h
mov Variable,eax
push Variable
call Funcion
invoke Sleep,10
push Valor
push Variable
end;

///Como declaro Sleep10? lo pongo tal cual y me da error.

ecfisa
06-06-2011, 05:48:25
Hola MarkPwn.


...
begin
asm
...
push 10 // milisegundos
call Sleep
...
end
end;


Saludos.

morringo
29-06-2011, 18:08:35
Hola ecfisa, una duda:
¿Para C++ builder también sería igual verdad? En cuanto a que metes el 10, ¿en qué parte lo metes? ¿Lo metes en la pila? Disculpa la pregunta, ya que soy nuevo en las dos (C++ y ASM) y según tengo entendido que para meter algo necesitas especificarle si en eax, edx o el registro en el cual lo quieras meter el dato.

Gracias y saludos =).

maeyanes
29-06-2011, 22:09:45
Hola...

Si bien recuerdo, la instrucción Push de ensamblador se usa para agregar datos a la pila.


Saludos...

ecfisa
29-06-2011, 23:58:15
Hola maeyanes.

La memoria no te falla en absoluto. :)

Saludos.

Al González
30-06-2011, 00:39:02
[...] 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.


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. :)

MarkPwn
03-07-2011, 18:15:02
Gracias a todos amigos! me ha servido!