Ver Mensaje Individual
  #1  
Antiguo 15-12-2010
LuisAlf:: LuisAlf:: is offline
Miembro
 
Registrado: nov 2009
Posts: 60
Reputación: 15
LuisAlf:: Va por buen camino
Thumbs up Significado de sentencias en ensamblador

Hola a todos..

Hace tiempo que estuve viendo un foro pasado que habla sobre el ensamblador en Delphi..
Por cuestiones de no poder abrir el foro pasado para poner mis dudas sobre codigo que no entiendo, habro este para tal objetivo..

Miren en el post encontre este codigo en ensamblador:

Código Delphi [-]
program Ejecutor;
uses  Windows;
const  WM_CHAR= $0102; 
var   miHandle : DWORD;   
data : string ;    
App :string ='Notepad.exe';    
Wndclass : string = 'Notepad';    
Childclass : string= 'Edit';
begin
     data := ' Estamos probando como funciona el assembler'+ #13#10+    
        'en Delphi y como no tenemos ni idea, no sabemos'+#13#10+   
         'que sucederà .'+#13#10+        
                   'Bueno, no tenemos ni idea de Delphi,'+#13#10+            
          'en ensamblador , algo si sabemos ,es el primer len-'+#13#10+            
'guaje de programación  que nos pusimos a intentar '+#13#10+           
 'aprender o debí escribir aprehender............'+#13#10+                  
  '¿ End ?' ;    
asm      
pushad      
push SW_SHOW      
push dword ptr [App ]      
call WinExec      
push 0      
push dword ptr [Wndclass]      
call FindWindow      
push  0      
push Childclass      
push 0      
push eax      
call FindWindowEx      
mov [miHandle], eax      
mov edx, data   
@@eti1:      
xor eax, eax      
mov al ,byte [edx]      
or al, al      
jz @@eti2      
push edx      
push 0      
push eax      
push WM_CHAR      
push [miHandle]      
call SendMessage      
push 100      
call Sleep      
pop edx      
inc edx      
jmp @@eti1    
@@eti2:       
push 0       
call ExitProcess       
popad    
end;
end.

Posteriormente viene en el post el equivalente codigo pero en codigo Delphi..

Código Delphi [-]
uses Windows, Messages; 
var hWnd, Pos: Cardinal; 
Str: PChar = ' Estamos probando como funciona el assembler'#13+              
    'en Delphi y como no tenemos ni idea, no sabemos'#13+              
    'que sucederà .'#13+              
    'Bueno, no tenemos ni idea de Delphi,'#13+              
    'en ensamblador , algo si sabemos ,es el primer len-'#13+              
    'guaje de programación  que nos pusimos a intentar '#13+              
    'aprender o debí escribir aprehender............'#13+              
    '¿ End ?';

begin 

Pos := 0; 

WinExec('notepad.exe', SW_SHOW); 

hWnd := FindWindowEx(FindWindow('Notepad', nil), 0, 'Edit', nil); 

  while Str[Pos] <> #0 do  begin   
    SendMessage(hWnd, WM_CHAR, Integer(Str[Pos]), 0);   
    Sleep(100);   
    Inc(Pos);  
  end;

end.

Lo que pasa es que tengo ciertas dudas con algunas sentencias como:

1. "Pushad".
2. push dword ptr [App ]??
3. push 0
4. mov [miHandle], eax:
Mi duda aqui es: si el registro eax se pasa al la variable manejado o como??
5. xor eax, eax: esta sentencia borra el registro "eax"?
6. mov al ,byte [edx]: mueve un caracter al registro "al"?
7. or al, al??
8. push edx
push 0
push eax: para que se utilizan estos push??
9. push 100: para que es?...

Bueno esas son mis dudas..

Espero que alguien pueda responder a mis dudas y de antemano disculpen mi ignorancia...

Gracias..

Última edición por LuisAlf:: fecha: 15-12-2010 a las 19:48:23.
Responder Con Cita