2012-05-18 10 views
6

PythonプログラムをIEEE-694のようなマイクロプロセッサ標準アセンブリ言語に変換することはできますか?アセンブリの構文はthis one またはこの他の1に近い: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、その後、アセンブリにそれを得るためにあなたの好みのCコンパイラを使用しています。

また、PyPyを使用して、ターゲットとしてLLVMを指定し、LLVM Static Compilerを使用してターゲットアーキテクチャのアセンブリ言語を生成します。

+0

私はLLVMを使ってIEEE-694のような非常に標準的で基本的なアセンブリを得る方法を知らない。 – Academia

+0

私は「標準アセンブリ」の考え方を理解していますが、本質的にLLVMのバイトコードは何ですか? –

2

Pythonは動的に型指定された言語なので、アセンブリプログラムがPythonのランタイム環境/ライブラリを使用してオブジェクトを動的に取得する場合にのみ可能です。

したがって、オーバーヘッドがある場合にのみ可能です。

しかし、PyPyプロジェクトのRPythonがあります。これはPython言語の制限されたサブセットです(これはもはや動的に型指定されず、Pythonの標準ライブラリからほとんどのモジュールが欠けています)。 RPythonプログラムはマシンコードに変換できます(AFAIKはCコードを中間コードとして生成します)。

Python自体が仮想マシンの中間コードを生成します。このコードを見たい場合は、Python標準ライブラリのdisモジュールを使用してください。これにより、Python関数のアセンブリのような表現が生成されます。 「実際の」マイクロプロセッサーはこれを使用できず、使用しているPythonバージョンで結果が変わる可能性があることに注意してください。

+0

私は非常に基本的で低レベルのアセンブリ(マクロなし)を得たいです。私は実際のマイクロプロセッサー上で実行しません。 – Academia

1

C、FORTRAN、COBOLなどと同じ方法ではありません。ラムダ計算または自動メモリ管理をサポートする言語は、アセンブリに直接コンパイルすることはできません。しかし、コンパイルされたPython、LISPなどを許可するために、インタプリタをマイクロコードまたはブートストラッププログラムで提供することができます(ガベージコレクションなどのいくつかの操作は、まだ組み込まれているインタープリタ内で実行されます)。

+0

infありがとうございます。実際には、私はPythonをCにコンパイルし、GDBで逆アセンブルすることを考えています。しかし、まだ何かを見つけようとしています。 – Academia

関連する問題