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 ;)
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
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á 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
Uuufff, qué recuerdos... Sobre algún programa que traduzca a C lo veo realmente complicado...no por la transformación en sí ya que todos los programas te podrán hacer una traducción directa, sino más bien por encontrar un traductor que "interprete" lo que quieres hacer y lo haga de la forma más óptima/entendible posible.
En cualquier caso, ¿ no existiría la posibilidad de introducir el código ensamblador en lí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
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:
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 ;)
Si fuera poquito te lo pasaba yo en un pis-pas, pero es mucho código y bastante complejo. El problema que tiene es que es un código que accede a puertos del pc (VGA, teclado) y a la memoria de vídeo. Con lo cual una traducción "tal cual" no es válida.
Los comentarios tipo C son comunes en un programa asm, ayudan cuando se hace una fórmula compleja. Nota: En ASM sólo se pueden hacer una operación cada vez.
Te pongo una traducción "cutre" de las instrucciones más usadas, pero al final tendrá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ón de artículos que se llama PCGPE (pc game programmer's encyclopedia), y es la referencia para programar videojuegos en pc a bajo nivel. Aquí podrás encontrar tanto ASM, como el manejo de ví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 ;)
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 ;-)
Powered by vBulletin® Version 4.2.5 Copyright © 2025 vBulletin Solutions Inc. All rights reserved.