Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: Kougami en 23 Mayo 2017, 17:17 pm



Título: Escribir funcion equivalente en C
Publicado por: Kougami en 23 Mayo 2017, 17:17 pm
Buenas, escribia porque no se como sacar una funcion equivalente en C del siguiente codigo escrito en asm:
Código
  1. .global rgb2gray
  2.  
  3. .equ COEF1, 3483
  4. .equ COEF2, 11718
  5. .equ COEF3, 1183
  6.  
  7. .text
  8.  
  9. rgb2gray:
  10.   ldr r3, =COEF1
  11.   mul r0, r3, r0
  12.   ldr r3, =COEF2
  13.   mla r0, r3, r1, r0
  14.   ldr r3, =COEF3
  15.   mla r0, r3, r2, r0
  16.   mov r0, r0, lsr #14
  17.  
  18.   mov pc, lr
  19.  

Si me pudieseis ayudar estaria genial.
Muchas gracias de antemano


Título: Re: Escribir funcion equivalente en C
Publicado por: MAFUS en 23 Mayo 2017, 18:15 pm
¿Sabes que hace cada instrucción?


Título: Re: Escribir funcion equivalente en C
Publicado por: Kougami en 23 Mayo 2017, 18:35 pm
Mas o menos,

Se que ldr guarda en R3 los distintos coeficicentes, y luego que mul hace una multiplicacion, mla no se lo que hace y luego mov r0, r0, lsr #14 no se lo que hace y finalmente el mov pc, lr es el epilogo de la subrutina


Título: Re: Escribir funcion equivalente en C
Publicado por: MAFUS en 23 Mayo 2017, 18:42 pm
¿Es para la universidad? Tenéis que aprender a documentaros, el mundo laboral es muy chungo.
Yo he encontrado este enlace. Rápidamente he podido reconstruir la rutina en C.
http://www.keil.com/support/man/docs/armasm/armasm_dom1361289878324.htm

A ver si lo consigues a partir de esto.


Título: Re: Escribir funcion equivalente en C
Publicado por: Kougami en 23 Mayo 2017, 18:49 pm
No, no es para la universidad, sino para el instituto.
Gracias por el enlace, creo que lo tengo traducido, no hay ningun tipo de bucle ni nada no?


Título: Re: Escribir funcion equivalente en C
Publicado por: MAFUS en 23 Mayo 2017, 18:53 pm
Es lineal.

¿Cuál es la asignatura?


Título: Re: Escribir funcion equivalente en C
Publicado por: Kougami en 23 Mayo 2017, 19:16 pm
TICO, Tecnologias de la informacion y la comunicacion

Dos cosas, la funcion en C es un void?? Y luego, los coeficientes, como son un .equ son constantes cuyo valor es el numero de al lado tal cual no?


Título: Re: Escribir funcion equivalente en C
Publicado por: MAFUS en 23 Mayo 2017, 19:32 pm
En el ensamblador el resultado se queda en r0 y cuando regresa el valor seguirá en ese registro. Por tanto en C deberás regresar ese resultado.

Por si no entiendes mucho inglés:
la instrucción mla
mla regreso, multiplicando 1, multiplicando 2, sumando

deja en regreso el resultado de multiplicar multiplicando1 y multiplicando2 y, posteriormente añadir sumando



lsr, en ese contexto, desplazará hacia la derecha el contenido del registro de la instrucción mov tantos bits como se indique.


Título: Re: Escribir funcion equivalente en C
Publicado por: Serapis en 24 Mayo 2017, 21:28 pm
Vaya, has duplicado tu mensaje, en vez de pedir que movieran tu hilo...

El caso es que ya te respondí ayer en aquel hilo:
https://foro.elhacker.net/asm/funcion_equivalente_en_c-t469877.0.html