2012-05-18 75 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,然後使用您所選擇的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等不同,支持lambda微積分或自動內存管理的語言不能直接編譯爲程序集。然而,解釋器可以用微代碼或引導程序提供,以彌合差距並允許「編譯」Python,LISP等(某些操作,如垃圾收集,仍然在嵌入式解釋器中執行編譯的二進制文件)。

+0

感謝inf。其實,我正在考慮將python編譯爲C,然後使用GDB進行分解。但仍試圖找到更好的東西。 – Academia