2014-02-17 77 views
2

我正計劃在Go中實現VM。我在教程中看到人們爲他們的虛擬機設計了自己的程序集類型,但虛擬機沒有直接執行彙編代碼。他們爲VM分配了每個指令的每個指令,併爲它們的機器分配一個特殊的字節碼。 解釋字節碼更好還是解釋彙編代碼並獲得相同結果?虛擬機是否必須解釋字節碼,還是可以直接解釋虛擬機的程序集?

+0

如果您打算只支持一個平臺,例如x86,沒有立即需要抽象說明。所以這取決於你想達到什麼。 – nemo

+0

我希望我的虛擬機能夠獨立運行平臺。 – user3318845

+0

對不起,我的意思是客人的平臺。你想支持不同的平臺作爲客人嗎? – nemo

回答

3

如果您想在不同的客戶平臺中使用您的VM,那麼

字節碼給你的優點是可移植性(因此備用命名「p代碼」,這是短期的「便攜式代碼」)。

如果你打算在不同的平臺上使用你的虛擬機,你應該選擇字節碼。然後,你必須注意將程序編譯成字節碼指令,虛擬機將負責其餘的部分。

1

語言運行時執行編譯的字節碼而不是文本彙編指令,因爲解析文本很慢。編寫良好的運行時可以在幾個處理器週期內解析和執行字節碼指令 - 但解析文本語句需要更多的工作。最簡單的方法是解析整個程序集文件,並以中間表示形式將其存儲在內存中 - 這正是字節碼。此外,諸如跳轉和尋址等一些事情在字節碼中才有意義。

不要將字節碼看作程序集的二進制表示,而應將程序集視爲字節碼的文本表示形式。