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

 

 


Tema destacado: Usando Git para manipular el directorio de trabajo, el índice y commits (segunda parte)


+  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 35,171 veces)
dreams88

Desconectado Desconectado

Mensajes: 1


Ver Perfil
Pasar programa C a ensamblador
« en: 7 Febrero 2009, 12:00 pm »

¡Hola!

Me gustaría pasar este programa de C a ensamblador subDLX. El programa es el siguiente:

#include <studio.h>

#define N 10 /*tamaño de los vectores*/

main ()
{
int v1[N]={2, 5, 7, 9, 10, 10, 9, 8, 7, 5};
int v2[N];
int x=0, suma1=0, suma2=0;

while (x<N) {

suma1+=v1(x);    /*Tendria q ser corchetes en (x) pero m sale mal*/
if (v1(x)>5) v2(x)=5;
else v2(x)=v1(x);
suma2+=v2(x);
x++
}

}

¿Alguien podría ayudarme?

Muchas gracias y un saludo


« Última modificación: 7 Febrero 2009, 12:16 pm por dreams88 » En línea

Ragnarok
Colaborador
***
Desconectado Desconectado

Mensajes: 4.590


Shrödingerificado


Ver Perfil
Re: Pasar programa C a ensamblador
« Respuesta #1 en: 8 Febrero 2009, 11:43 am »

Claro, pero antes lee las normas.


En línea

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


Desconectado Desconectado

Mensajes: 361



Ver Perfil
Re: Pasar programa C a ensamblador
« Respuesta #2 en: 8 Febrero 2009, 19:15 pm »

pues si no sabes se ASM, lo mas facil es copilarlo y en los parametros para el compilador le pones el que te lo deja en asm o compilarlo y despues desemsamblarlo
En línea

Shrick

Desconectado Desconectado

Mensajes: 259


Yo no se nada, sino ¿porque pregunto?


Ver Perfil
Re: Pasar programa C a ensamblador
« Respuesta #3 en: 8 Febrero 2009, 21:13 pm »

El gcc no convertía el código a ensamblador antes de enlazar?
En línea

Ubuntu User
Pascal (2008/2009)
C/C++ (2009/¿?)
8080 Assembler (2009/2010)
MIPS I Assembler (2010/¿?)

Todo lo que yo haga o diga esta bajo:



No pertenece ni a mi ni a nadie :P .
-Ramc-


Desconectado Desconectado

Mensajes: 495



Ver Perfil
Re: Pasar programa C a ensamblador
« Respuesta #4 en: 8 Febrero 2009, 21:21 pm »

El gcc no convertía el código a ensamblador antes de enlazar?
Sí, con el flag -s te da el código en asm.
En línea


Shhh... be vewy, vewy, quiet!  I'm hunting wabbits...
LA PANDILLA MAS GRANDE DE MI CIUDAD, SE LLAMA POLICIA NACIONAL.
bizco


Desconectado Desconectado

Mensajes: 698


Ver Perfil
Re: Pasar programa C a ensamblador
« Respuesta #5 en: 8 Febrero 2009, 22:06 pm »

pero tampoco es tan dificil pasarlo.

Código:
v1    db 2,5,7,9,0Ah,0Ah,9,8,7,5
v2    db 10 dup(0)
x     db 0
suma1 db 0
suma2 db 0   

mov ecx,0Ah
bucle:
aqui pones lo demas que no tiene mayor complicacion. si no, hay que leer mas.
loop bucle
En línea

D4RIO


Desconectado Desconectado

Mensajes: 1.004


U N I X


Ver Perfil WWW
Re: Pasar programa C a ensamblador
« Respuesta #6 en: 11 Febrero 2009, 11:59 am »

@ctlon: El code que pones no es ni similar al que se generaría, y por lo tanto no es correcto pasar el programa asi.... Debes crear la pila del main() para luego reservar los int e inicializar los datos inicializados al inicio. Para eso guardas la dirección de retorno y todo eso y luego de guardar ebp lo pones con esp.

A parte de eso creo que es bueno crear en la pila local 4 bytes de más para poner 2 punteros a los vectores... así es más simple acceder por subíndices, y también pasar los punteros como argumentos

Ahora que tienes la pila local a main reservas memoria... o sea restas 4*10 y 4*10 por los dos vectores, más 4*3 por las variables x, suma y suma2, y luego 2*2 por los dos punteros.
A eso le inicializas los datos con MOV y accedes a las variables por EBP....  ;)

Salu2
En línea

OpenBSDFreeBSD
>FedeX<

Desconectado Desconectado

Mensajes: 151



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

También se puede sin el EBP. Claro que tiene sus inconvenientes, pero puedes usar el EBP para otra cosa ;D (claro, con su respectivo push al principio)

Código
  1. N = 10
  2. main:
  3. sub ESP,(N*4)+(N*4)+(3*4) ; Todas las variables
  4. mov DWORD PTR SS: ESP,2
  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
  14. mov DWORD PTR SS: ESP+84,0 ; Supongo que quieres inicializar este a 0
  15. mov DWORD PTR SS: ESP+80,0 ; Supongo que quieres inicializar este a 0
  16. jmp .bucle
  17. .bucle2:
  18. mov EAX,DWORD PTR SS: ESP+80
  19. shl EAX,2
  20. add EAX,ESP
  21. mov EAX,DWORD PTR SS: EAX
  22. add DWORD PTR SS: ESP+84,EAX ; Suma1 += v1[x]
  23. cmp EAX,5
  24. jbe .comparo1
  25. mov EAX,DWORD PTR SS: ESP+80
  26. shl EAX,2
  27. add EAX,ESP
  28. add EAX,40
  29. mov DWORD PTR SS: EAX,5
  30. jmp .comparo1e
  31. .comparo1:
  32. mov EDX,DWORD PTR SS: ESP+80
  33. shl EDX,2
  34. add EDX,ESP
  35. add EDX,40
  36. mov DWORD PTR SS: EDX,EAX
  37. .comparo1e:
  38. INC DWORD PTR SS: ESP+80
  39. .bucle:
  40. cmp DWORD PTR SS: ESP+80,N
  41. jb .bucle2
  42. add ESP,(N*4)+(N*4)+(3*4) ; Todas las variables
  43. ret
En línea

Arkangel_0x7C5


Desconectado Desconectado

Mensajes: 361



Ver Perfil
Re: Pasar programa C a ensamblador
« Respuesta #8 en: 11 Febrero 2009, 16:51 pm »

pero tampoco es tan dificil pasarlo.
pero se supone que el que lo pregunto no sabe ASM para pasarlo a mano, el pregunto que como pofia traducirlo, porque seguramente quiere pasar otra cosa a ASM, por eso pienso yo que es mas util que le digamos como puede traducir cualquier code a ASM en vez de hacerle nosotros la traduccion

XAO
En línea

D4RIO


Desconectado Desconectado

Mensajes: 1.004


U N I X


Ver Perfil WWW
Re: Pasar programa C a ensamblador
« Respuesta #9 en: 11 Febrero 2009, 17:23 pm »

@>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.
De todas formas te falta inicializar una de las variables... fijate que es:

Código
  1. int v1[N]={2, 5, 7, 9, 10, 10, 9, 8, 7, 5};
  2. int v2[N];
  3. int x=0, suma1=0, suma2=0;

Con lo que son 10 inicializaciones para los valores del arreglo v1, más las tres inicializaciones para x, suma1 y suma2...

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++).
En línea

OpenBSDFreeBSD
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 8,689 Último mensaje 29 Diciembre 2013, 23:00 pm
por pic16f84a
Pasar a código ensamblador [Ayuda]
ASM
leogtz 6 10,874 Último mensaje 6 Diciembre 2011, 21:41 pm
por leogtz
flujo programa ensamblador
Ingeniería Inversa
fumioli 4 3,250 Último mensaje 7 Abril 2013, 19:21 pm
por fumioli
Programa de leds en ensamblador (MPLAB) con PIC16F84A
Ejercicios
Magiiq 2 16,735 Último mensaje 21 Mayo 2013, 19:15 pm
por Magiiq
Pasar de c++ a ensamblador
Programación C/C++
kur79 6 9,952 Último mensaje 1 Enero 2015, 17:13 pm
por kur79
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines