2012-05-18 5 views
6

Можно ли преобразовать программы Python на язык ассемблера стандартного микропроцессора, например IEEE-694? Синтаксис сборки близко к this one или этого другого: http://www.ethicalhacker.net/content/view/152/2/Программа Python в стандартную сборку?

+0

Я пробовал много. Я нашел программное обеспечение, такое как LLVM, но результат не ожидался. – Academia

+0

Взгляните на проект [Python on a chip] (http://code.google.com/p/python-on-a-chip/). –

+2

В чем проблема, которую вы на самом деле пытаетесь решить? – SingleNegationElimination

ответ

8

Compile python to C, а затем использовать компилятор языка вашего выбора, чтобы получить его до сборки.

В качестве альтернативы используйте PyPy, указав LLVM в качестве цели, и используйте LLVM Static Compiler, чтобы получить язык ассемблера для вашей целевой архитектуры.

+0

Я не знаю, как использовать LLVM, чтобы получить стандартную и базовую сборку, такую ​​как IEEE-694. – Academia

+0

Я понимаю идею «стандартной сборки», но разве это не то, что такое байт-код LLVM? –

2

Поскольку язык Python является динамически типизированным, это было бы возможно только в том случае, если программа сборки использовала среду/библиотеку среды выполнения Python для динамического получения объектов.

Таким образом, это возможно только с некоторыми накладными расходами.

Но есть RPython от проекта PyPy. Это ограниченное подмножество языка Python (оно больше не динамически типизировано и не хватает большинства модулей из стандартной библиотеки Python). Программы RPython могут быть переведены на машинный код (AFAIK генерирует код C как промежуточный код).

Python сам создает промежуточный код для своей виртуальной машины. Если вы хотите взглянуть на этот код, используйте модуль dis из стандартной библиотеки Python. Это создает сборочное представление вашей функции Python. Имейте в виду, что «настоящий» микропроцессор не сможет использовать это и что результат может измениться с помощью используемой версии Python.

+0

Я хочу получить очень простой и низкоуровневый сбор (без макросов). Я не буду запускать его на реальном микропроцессоре. – Academia

1

Не так же, как C, FORTRAN, COBOL и т. Д. Языки, поддерживающие лямбда-исчисление или автоматическое управление памятью, не могут быть скомпилированы непосредственно на сборку. Однако интерпретатор может быть предоставлен в микрокоде или в программе начальной загрузки, чтобы устранить пробел и разрешить «скомпилированный» Python, LISP и т. Д. (Некоторые операции, такие как сбор мусора, все еще выполняются внутри встроенного интерпретатора, упакованного в скомпилированный двоичный файл.)

+0

Спасибо за инф. Собственно, я собираюсь скомпилировать python на C, а затем разобрать GDB. Но все еще пытаюсь найти что-то лучшее. – Academia

Смежные вопросы