Delphi - Instrucciones bajo nivel

 
Vista:

Instrucciones bajo nivel

Publicado por Cuervo (262 intervenciones) el 12/08/2005 21:19:05
Como ocultar una ventana ejecutando una instrucciones en ensamblador?

// es equivalente a la API: Windows.ShowWindow(Handle, SW_HIDE);

procedure OcultarForm(Handle: THandle);
asm
push SW_HIDE // push 0 = pasar el segundo parámetro
push Handle // push eax = y el primero
call Windows.ShowWindow // llamar al API ShowWindow()
end;

// y para mostrarlo es el mismo procedimiento pero SW_HIDE lo cambiamos por SW_SHOW

.no es gran cosa pero se podria usar.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Instrucciones bajo nivel

Publicado por Mr. Sade (76 intervenciones) el 13/08/2005 01:50:48
si se podria usar pero no se ganara absolutamente nada con eso, las API son lentas!.
preferible es usar asm para manejar buffer grandes, arrays, mover grandes cantidades de memoria, etc y no para llamar APIs, windows ofrece funciones pero son lentas asi hayan sido escritas en C/C++. cuando digo lentas me refiero comparandolas con asm.

[+]Delphi por defecto usa la llamada tipo "register" que significa que pasara los 3 primeros parametros en los registros eax, edx, ecx y los demas parametros se pasaran en la pila.
[+]las APIs usan la llamada tipo "stdcall" (standard call) que significa que todos los parametros se pasaran en la pila y que la funcion es la encargada de limpiar la pila.

[+]C/C++ por defecto usa la llamada "cdecl" que es similar a la stdcall pero con la diferencia de que la funcion no limpia la pila sino el que llamo a la funcion.
wsprintf esta mal declarada en delphi ya que es cdecl y no stdcall.
esta funcion acepta multiples argumentos y por lo tanto no sabe cuantos parametros debe sacar de la pila, solo el programador sabe cuantos parametros empujo y por eso el es el encargado de limpiar la pila. eso lo hace delphi automaticamente por ti.
limpiar la pila solo significa aumenta esp por numero_de_parametros * 4.

hay otras llamas como pascal y safecall tambien.

procedure OcultarForm(Handle, Flag: THandle);
asm
push Flag // push edx
push Handle //push eax
call ShowWindow
end;

Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar