2012-05-18 13 views
6

¿Es posible convertir programas de Python a un lenguaje de ensamblaje estándar de microprocesador como IEEE-694? La sintaxis de montaje está cerca de this one o esta otra: http://www.ethicalhacker.net/content/view/152/2/Python programa en un conjunto estándar?

+0

He intentado mucho. Encontré softwares como LLVM pero el resultado no fue el esperado. – Academia

+0

Eche un vistazo al proyecto [Python on a chip] (http://code.google.com/p/python-on-a-chip/). –

+2

¿cuál es el problema que en realidad estás tratando de resolver? – SingleNegationElimination

Respuesta

8

Compile python to C, a continuación, utilizar un compilador de C de su elección para bajarlo hasta el montaje.

Como alternativa, utilice PyPy, especificando LLVM como destino, y use LLVM Static Compiler para obtener el lenguaje de ensamblaje para su arquitectura de destino.

+0

No sé cómo usar LLVM para obtener un ensamblaje básico y estándar como IEEE-694. – Academia

+0

Entiendo la idea del "ensamblaje estándar", pero ¿no es eso esencialmente lo que es el bytecode LLVM? –

2

Dado que Python es un lenguaje de tipado dinámico, esto solo sería posible si el programa ensamblador utilizara el entorno/biblioteca de tiempo de ejecución de Python para obtener objetos dinámicamente.

Por lo tanto, solo sería posible con algunos gastos generales.

Pero hay RPython del proyecto PyPy. Es un subconjunto restringido del lenguaje Python (ya no se tipea de forma dinámica y carece de la mayoría de los módulos de la biblioteca estándar de Python). Los programas RPython se pueden traducir a código máquina (AFAIK genera código C como código intermedio).

Python en sí mismo genera un código intermedio para su máquina virtual. Si desea ver este código, use el módulo dis de la biblioteca estándar de Python. Esto genera una representación similar a un ensamblaje de su función de Python. Tenga en cuenta que un microprocesador "real" no podría usar esto y que el resultado podría cambiar con la versión de Python que está utilizando.

+0

Quiero obtener un ensamblaje muy básico y de bajo nivel (sin macros). No lo ejecutaré en un microprocesador real. – Academia

1

No de la misma manera que C, FORTRAN, COBOL, etc. Los lenguajes que admiten el cálculo lambda o la administración automática de la memoria no se pueden compilar directamente al ensamblaje. Sin embargo, se puede proporcionar un intérprete en microcódigo o en un programa de arranque para cerrar la brecha y permitir Python "compilado", LISP, etc. (Algunas operaciones, como la recolección de basura, todavía se llevan a cabo dentro del intérprete integrado empaquetado en el compilado binario.)

+0

Gracias por inf. En realidad, estoy pensando en compilar python a C, luego desmontar con GDB. Pero aún estoy tratando de encontrar algo mejor. – Academia

Cuestiones relacionadas