Escribir funcion equivalente en C

Iniciado por Kougami, 23 Mayo 2017, 17:17 PM

0 Miembros y 1 Visitante están viendo este tema.

Kougami

Buenas, escribia porque no se como sacar una funcion equivalente en C del siguiente codigo escrito en asm:
Código (asm) [Seleccionar]

.global rgb2gray

.equ COEF1, 3483
.equ COEF2, 11718
.equ COEF3, 1183

.text

rgb2gray:
  ldr r3, =COEF1
  mul r0, r3, r0
  ldr r3, =COEF2
  mla r0, r3, r1, r0
  ldr r3, =COEF3
  mla r0, r3, r2, r0
  mov r0, r0, lsr #14

  mov pc, lr


Si me pudieseis ayudar estaria genial.
Muchas gracias de antemano

MAFUS

¿Sabes que hace cada instrucción?

Kougami

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

MAFUS

¿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.

Kougami

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?

MAFUS

Es lineal.

¿Cuál es la asignatura?

Kougami

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?

MAFUS

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.

Serapis

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