PDA

Ver la versión completa : Pasar de ".asm" x86 a ".c"



anibarro
11/03/2008, 15:58
Hola buenas, tengo unas funciones en asm x86 escritas a mano. No tengo ni idea de asm del x86, y necesitaria transformarlo en otro lenguaje tipo C. He buscado programas que lo hagan, aunque generen un codigo C ilegible y lleno de saltos que al menos pueda pasar a un C mas legible, pero no he encontrado ninguno.
La pregunta es, ¿existen estos programas? ¿se puede pasar mas o menos directamente a otro lenguaje de alto nivel o a otro ensamblador (ARM)?
Gracias ;)

neglox
11/03/2008, 17:33
he buscado asm2c en google y me han salido un par de enlaces a programas que parecen interesantes, puedes echarle un ojo.

anibarro
11/03/2008, 19:49
Gracias neglox, no habia actualizado pero los habia visto...el tema es q son de pago y MUY de pago xD Y no estan por ahi para descargar :roll:

< - >
Al final he encontrado un que parece funcionar...aunque aun no se como ^^:
http://boomerang.sourceforge.net/download.php

lemon
11/03/2008, 22:22
son muchas y muy largas las funciones? porque lo mejor seria que encontraras a alguien que si sepa ensamblador del x86 para que te ayude a descifrarlas. Si es poquito yo me ofrezco (si es mucho no podr&#225; ser ;-)

anibarro
12/03/2008, 00:24
He intentando usar algun programa pero no me ha servido ninguno, y eso que he encontrado unos cuantos...
Muchas gracias por el ofrecimiento Lemon, la verdad es que puede que sea un poco largo, pero la unica funcion que realmente me haria falta saber es "drawland", ya que hay muchas de inicializaciones graficas y paletas que no voy a usar. Adjunto el codigo por si te animas, pero sin compromiso que es muy chunga :P
El codigo ASM viene comentado con lineas en C, pero al no tener ni idea no se si lo que viene comentado es todo, parte, o solo indicaciones :S

Okiwan
12/03/2008, 01:43
Uuufff, qu&#233; recuerdos... Sobre alg&#250;n programa que traduzca a C lo veo realmente complicado...no por la transformaci&#243;n en s&#237; ya que todos los programas te podr&#225;n hacer una traducci&#243;n directa, sino m&#225;s bien por encontrar un traductor que "interprete" lo que quieres hacer y lo haga de la forma m&#225;s &#243;ptima/entendible posible.

En cualquier caso, &#191; no existir&#237;a la posibilidad de introducir el c&#243;digo ensamblador en l&#237;nea ? (en el mismo fichero .C)

anibarro
12/03/2008, 02:01
Si, el problema es que lo intento compilar para un ARM, y si no se pasarlo a C, menos a ASM de ARM XD

Aiken
12/03/2008, 02:15
Si, el problema es que lo intento compilar para un ARM, y si no se pasarlo a C, menos a ASM de ARM XD

lo primero que hay que mirar cuando vas a portar algo es que no tenga asm :D

Es mas facil creo yo un programa que traducza de ASM-x86 -> ASM-ARM directamente que uno que traduzca a un lenguage de mas alto nivel.

Aiken

anibarro
12/03/2008, 02:22
lo primero que hay que mirar cuando vas a portar algo es que no tenga asm :D

Es mas facil creo yo un programa que traducza de ASM-x86 -> ASM-ARM directamente que uno que traduzca a un lenguage de mas alto nivel.

Aiken

Muy ciertas las dos cosas xD El problema es que tengo 6 "landscapes engines" compilados y todos tienen algun problema ("jitter", fallos gordos de perspectiva, etc) y yo soy incapaz de corregirlos sin perder una burrada de velocidad.
Entonces encontre una demo que no tenia a penas jitter, pero tampoco sources. Le escribi al autor y se ha portado de cine enviandomelos, pero como me imaginaba, lleva sorpresa (ASM) :confused:
A ver si hay suerte y alguien se anima a echarme un cable :brindis:

lemon
12/03/2008, 10:41
Bueno, ya me lo he mirado (asi un poco por encima solo). Uff, hace muchos años que no hago nada en ensamblador, que recuerdos me ha traido ver una cosa asi ;-).

No tengo mucho tiempo libre asi que no te puedo asegurar nada, pero si encuentro algun ratillo en el fin de semana me lo miraré un poco mejor a ver si puedo traducirlo. La verdad es que los comentarios ayudaran bastante.
Podrias enviarme (o decir de donde puedo bajar) la demo compilada para poder ver exactamente lo que hace?

anibarro
12/03/2008, 11:13
Claro, aqui lo subo ;)

hardyx
12/03/2008, 14:05
Si fuera poquito te lo pasaba yo en un pis-pas, pero es mucho c&#243;digo y bastante complejo. El problema que tiene es que es un c&#243;digo que accede a puertos del pc (VGA, teclado) y a la memoria de v&#237;deo. Con lo cual una traducci&#243;n "tal cual" no es v&#225;lida.

Los comentarios tipo C son comunes en un programa asm, ayudan cuando se hace una f&#243;rmula compleja. Nota: En ASM s&#243;lo se pueden hacer una operaci&#243;n cada vez.

Te pongo una traducci&#243;n "cutre" de las instrucciones m&#225;s usadas, pero al final tendr&#225;s que aprender asm para darle sentido.



mov a, b ==> a = b
mov a, [b] ==> a = *b
add a, b ==> a = a + b
sub a, b ==> a = a - b
push a ==> pila.push(a)
pop a ==> a = pila.top()
jmp label ==> goto label
cmp a, b ==> zf = (a==b)
jz label ==> if (zf) goto label

Hay una recopilaci&#243;n de art&#237;culos que se llama PCGPE (pc game programmer's encyclopedia), y es la referencia para programar videojuegos en pc a bajo nivel. Aqu&#237; podr&#225;s encontrar tanto ASM, como el manejo de v&#237;deo, algoritmos, etc.

http://www.qzx.com/pc-gpe/

anibarro
12/03/2008, 14:49
Gracias hardyx, al final tendre que ponerme a traducir y me hara mucha falta lo que pone en esa web...
Ya dije que la unica funcion que me hace falta es "drawland", porque el resto lo modificare para usar 16bits de color. Sabiendo que la resolucion para la que esta escrito es 320x200 y teniendo otros motores parecidos en C, espero poder sacar algo si lemon no se anima.
Yo estudie el ensamblador del MIPS, que me sirvio para comprender mas o menos el ensamblador del ARM, pero el del x86 es un poco diferente. Intentare pasar la funcion e ire preguntando si me quedo atascado ;)

anibarro
16/03/2008, 02:18
Lemon, espero que no te pusieras a pasar el codigo a C :S Con los comentarios y sabiendo lo que hacian un par de cosas, he visto que es exactamente el mismo algoritmo que otro que tenia en C, solo que al tener la vista tan hacia abajo favorece mucho el no tener jitter...
Seguire con lo que tenia que no merecia la pena, gracias por el interes de todas formas ;)

lemon
17/03/2008, 10:21
Jaja, no he tenido mucho tiempo la verdad.
Me lo he mirado un poquillo, y viendo los comentarios se entiende bastante bien lo que hace, te lo podria pasar a C algun dia que tuviera algo de tiempo libre, pero si dices que no hace falta, pues nada. Igual algun dia lo uso para algun proyecto mio ;-)