2012-07-23 52 views
2

我在C中實現了一個虛擬機(這是我的第一個虛擬機),爲了與平臺無關,我設置每個指令在二進制輸入中佔用4個字節(即字節碼文件) 。指令在虛擬機中的表示

我的問題是目前有關教學表示的做法是什麼?

您是否簡單地設置了unsigned char [4]來表示每條指令?或者,使用你喜歡的任何表示形式,只要你可以將這4個字節的指令轉換到它上面?

在此先感謝。

+0

指令的長度是否固定爲32位?或者他們可以有額外的操作數來延長長度嗎? – 2012-07-23 10:11:29

+0

@JoachimPileborg:它們確實可以有額外的操作數。 – Carsos 2012-07-23 10:14:19

回答

0

我主要使用簡單的「經典」基於堆棧的虛擬機,其中的字節碼就是字節。所有內容都被存儲爲大量的unsigned char,這也是我寫入/從文件讀取的內容。

我總是以特定的順序寫入和讀取操作數,從而克服了字節順序等問題。做四個字節大小的讀取要獲得一個32位的整數要慢一些,但我不必擔心,如果我使用cast來讀取一個單獨的int,那麼我就不用擔心這種情況了。

另一種方式不用擔心字節順序,是簡單地和明確狀態手動什麼字節順序,並在試圖運行另一個字節順序將導致怪異的系統上的二進制文件錯誤。然後你可以使用一個例如int32_t改爲存儲指令和操作數。如果這是字節碼中最小的單位,它可能會大大簡化您的編碼。