elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.


 


Tema destacado: (TUTORIAL) Aprende a emular Sentinel Dongle By Yapis


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  Pasar programa C a ensamblador
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: 1 [2] 3 Ir Abajo Respuesta Imprimir
Autor Tema: Pasar programa C a ensamblador  (Leído 27,551 veces)
>FedeX<

Desconectado Desconectado

Mensajes: 151



Ver Perfil WWW
Re: Pasar programa C a ensamblador
« Respuesta #10 en: 11 Febrero 2009, 20:11 »

De todas formas te falta inicializar una de las variables...

Todas están inicializadas, solo se me olvidó suma2, que no le dí uso...

Igual es un buen aporte puesto que es totalmente válido hacerlo así... pero me pregunto ¿porque no haces el bucle usando ECX?.... esta mal codificado, pero el bucle es un for( x=0 ; x<N ; x++).

Es cierto, pero si hubiese llamadas dentro del bucle, el contador podría perderse...

Entonces así estaría mejor
Código
  1. N = 10
  2. main:
  3. sub ESP,(N+N+2)*4 ; Todas las variables
  4. mov DWORD PTR SS: ESP,2 ; v1[0]
  5. mov DWORD PTR SS: ESP+4,5
  6. mov DWORD PTR SS: ESP+8,7
  7. mov DWORD PTR SS: ESP+12,9
  8. mov DWORD PTR SS: ESP+16,10
  9. mov DWORD PTR SS: ESP+20,10
  10. mov DWORD PTR SS: ESP+24,9
  11. mov DWORD PTR SS: ESP+28,8
  12. mov DWORD PTR SS: ESP+32,7
  13. mov DWORD PTR SS: ESP+36,5 ; v1[9]
  14. mov DWORD PTR SS: ESP+80,0 ; Suma1
  15. mov DWORD PTR SS: ESP+84,0 ; Suma2
  16. mov ECX,N-1
  17. .bucle:
  18. mov EAX,ECX
  19. shl EAX,2
  20. add EAX,ESP
  21. mov EAX,DWORD PTR SS: EAX
  22. add DWORD PTR SS: ESP+80,EAX ; Suma1 += v1[x]
  23. cmp EAX,5
  24. jbe .comparo1
  25. mov EAX,ECX
  26. shl EAX,2
  27. add EAX,ESP
  28. add EAX,40
  29. mov DWORD PTR SS: EAX,5
  30. add DWORD PTR SS: ESP+84,5 ; Suma2 += v2[x]
  31. jmp .comparo1e
  32. .comparo1:
  33. mov EDX,ECX
  34. shl EDX,2
  35. add EDX,ESP
  36. add EDX,40
  37. mov DWORD PTR SS: EDX,EAX
  38. add DWORD PTR SS: ESP+84,EAX ; Suma2 += v2[x]
  39. .comparo1e:
  40. DEC ECX
  41. cmp ECX,-1
  42. jne .bucle
  43. add ESP,(N+N+2)*4 ; Todas las variables
  44. ret



« Última modificación: 11 Febrero 2009, 20:17 por >FedeX< » En línea

dark_hat

Desconectado Desconectado

Mensajes: 185



Ver Perfil
Re: Pasar programa C a ensamblador
« Respuesta #11 en: 11 Febrero 2009, 20:30 »

@>FedeX<: El problema con acceder a las variables subiendo por el stack es que no puedes mover el stack pointer de donde está, y si haces push o pop en algún momento todos los accesos a las variables deberían cambiar su offset respecto de éste.

Una puntualización, a las variables de la pila se accede por EBP, y push y pop modifican ESP, por lo que no pasa nada por hacer push o pop a la hora de acceder a las variables locales.


En línea

Eso que huele es un poco de incienso,
eso marrón una tableta de turrón...
D4RIO


Desconectado Desconectado

Mensajes: 1.004


U N I X


Ver Perfil WWW
Re: Pasar programa C a ensamblador
« Respuesta #12 en: 11 Febrero 2009, 20:51 »

@dark_hat:
Tenes toda la razon, pero... yo me referia el code que posteo >FedeX< en el que no se hace uso del EBP sino del ESP  ;D ...
Precisamente porque normalmente el acceso a las variables es en la pila y usando EBP, pero como bien postea >FedeX<, en éste caso no es necesario y se puede dejar a EBP libre.  ;)

@>FedeX< :
Citar
Es cierto, pero si hubiese llamadas dentro del bucle, el contador podría perderse...
Normalmente las funciones solo modificarán el registro EAX, y para retornar datos >4bytes usarán punteros. De todas formas se puede guardar ECX en el stack si una función trata de modificarlo...

Código
  1. .comparo1e:
  2. DEC ECX
  3. cmp ECX,-1 ; <<<<<<<<<<<<<<<<< WTH!
  4. jne .bucle

Pero para que usar ECX si vas a usar CMP???  :rolleyes:
Usa ECX y la orden LOOP  ;) ... ese es el uso correcto por el que ECX es el registro contador...
Cuando tenga tiempo lo hago y se los paso... ahora estoy saliendo del trabajo..

bye guys!!
En línea

OpenBSDFreeBSD
>FedeX<

Desconectado Desconectado

Mensajes: 151



Ver Perfil WWW
Re: Pasar programa C a ensamblador
« Respuesta #13 en: 11 Febrero 2009, 21:47 »

Código
  1. .comparo1e:
  2. DEC ECX
  3. cmp ECX,-1 ; <<<<<<<<<<<<<<<<< WTH!
  4. jne .bucle

Pero para que usar ECX si vas a usar CMP???  :rolleyes:
Usa ECX y la orden LOOP  ;) ... ese es el uso correcto por el que ECX es el registro contador...
Cuando tenga tiempo lo hago y se los paso... ahora estoy saliendo del trabajo..

bye guys!!

Eso habia hecho pero....
Reemplazé la variable x por ECX...
Entonces coloqué:
Código:
mov ECX,N-1
y no
Código:
mov ECX,N

v1 va solo de
  • a [9]... Es por eso que ECX inicializo como 9 (N-1)

Ese N-1 hace que loop cuente 9 veces... Del 9 al 1
En línea

D4RIO


Desconectado Desconectado

Mensajes: 1.004


U N I X


Ver Perfil WWW
Re: Pasar programa C a ensamblador
« Respuesta #14 en: 11 Febrero 2009, 22:03 »

Eso lo entendi, pero la instrucción loop es precisamente para evitar usar un dec, un cmp un jump... es algo trivial, pero si se puede hacer mejor... just do it!

S2
En línea

OpenBSDFreeBSD
Arkangel_0x7C5


Desconectado Desconectado

Mensajes: 361



Ver Perfil
Re: Pasar programa C a ensamblador
« Respuesta #15 en: 12 Febrero 2009, 00:47 »

pero en los procesadores actuales tarda menos hacer

Código
  1. bucle:
  2. .....
  3. .....
  4. .....
  5. dec ecx
  6. cmp ecx,0
  7. jne bucle
  8.  

que un loop
Al parecer han abandonado un poco el loop
En línea

dark_hat

Desconectado Desconectado

Mensajes: 185



Ver Perfil
Re: Pasar programa C a ensamblador
« Respuesta #16 en: 12 Febrero 2009, 01:24 »

pero en los procesadores actuales tarda menos hacer

Código
  1. bucle:
  2. .....
  3. .....
  4. .....
  5. dec ecx
  6. cmp ecx,0
  7. jne bucle
  8.  

que un loop
Al parecer han abandonado un poco el loop

O!, curioso, siempre se aprende algo.

http://www.gui.uva.es/udigital/ap06.html
En línea

Eso que huele es un poco de incienso,
eso marrón una tableta de turrón...
D4RIO


Desconectado Desconectado

Mensajes: 1.004


U N I X


Ver Perfil WWW
Re: Pasar programa C a ensamblador
« Respuesta #17 en: 12 Febrero 2009, 01:34 »

Oh!!  :rolleyes:
En línea

OpenBSDFreeBSD
Ragnarok
Colaborador
***
Desconectado Desconectado

Mensajes: 4.588


Shrödingerificado


Ver Perfil
Re: Pasar programa C a ensamblador
« Respuesta #18 en: 14 Febrero 2009, 09:52 »

pero en los procesadores actuales tarda menos hacer

Código
  1. bucle:
  2. [...]
  3. jne bucle
  4.  

que un loop

¿por? ¿cuánto tarda cada cosa?
En línea

No olvidéis leer las normas generales, además de las específicas de cada tablón.sgae, ladrones
dark_hat

Desconectado Desconectado

Mensajes: 185



Ver Perfil
Re: Pasar programa C a ensamblador
« Respuesta #19 en: 15 Febrero 2009, 22:05 »

¿por? ¿cuánto tarda cada cosa?

Mira la web que puse:

http://www.gui.uva.es/udigital/ap06.html

Los datos que hay son para 486 pero supongo que no habrá cambiado demasiado.
En línea

Eso que huele es un poco de incienso,
eso marrón una tableta de turrón...
Páginas: 1 [2] 3 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Pasar 1 a PUERTO B Ensamblador
Electrónica
Riki_89D 8 6,520 Último mensaje 29 Diciembre 2013, 23:00
por pic16f84a
Pasar a código ensamblador [Ayuda]
ASM
leogtz 6 7,963 Último mensaje 6 Diciembre 2011, 21:41
por leogtz
flujo programa ensamblador
Ingeniería Inversa
fumioli 4 1,885 Último mensaje 7 Abril 2013, 19:21
por fumioli
Programa de leds en ensamblador (MPLAB) con PIC16F84A
Ejercicios
Magiiq 2 13,760 Último mensaje 21 Mayo 2013, 19:15
por Magiiq
Pasar de c++ a ensamblador
Programación C/C++
kur79 6 5,765 Último mensaje 1 Enero 2015, 17:13
por kur79
Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines