私は C で VM を実装しています (これが私の最初のものです)。プラットフォームに依存しないようにするために、各命令がバイナリ入力 (バイトコード ファイル) で 4 バイトを占めるように設定します。
私の質問は次のとおりです。指示の表現に関する現在の慣行は何ですか?
各命令を表すために単に unsigned char [4] を設定しますか? または、それらの 4 バイト命令をそれに変換できるのであれば、好きな表現を使用しますか?
前もって感謝します。
私は C で VM を実装しています (これが私の最初のものです)。プラットフォームに依存しないようにするために、各命令がバイナリ入力 (バイトコード ファイル) で 4 バイトを占めるように設定します。
私の質問は次のとおりです。指示の表現に関する現在の慣行は何ですか?
各命令を表すために単に unsigned char [4] を設定しますか? または、それらの 4 バイト命令をそれに変換できるのであれば、好きな表現を使用しますか?
前もって感謝します。
私は主にシンプルで「クラシックな」スタックベースの VM を使用します。バイトコードはバイトです。すべてが の大きな配列として保存されunsigned char
ます。これは、ファイルへの書き込み/ファイルからの読み取りでもあります。
常に特定の順序でオペランドを読み書きすることで、バイト順などの問題を克服しています。32 ビット整数を取得するために 4 バイト サイズの読み取りを行うのは少し遅くなりますが、キャストを使用して 1 つのint
.
バイト順を気にしないもう 1 つの方法は、マニュアルにバイト順とは何かを簡単かつ明確に記載することです。別のバイト順のシステムでバイナリ ファイルを実行しようとすると、奇妙なエラーが発生します。次に、代わりに eg の配列を使用して、int32_t
命令とオペランドを格納できます。それがバイトコードの最小単位であれば、おそらくコーディングが大幅に簡素化されます。