2

我正在用 C 语言实现一个 VM(这是我的第一个),为了独立于平台,我设置每条指令在二进制输入(即字节码文件)中占用 4 个字节。

我的问题是目前关于指令表示的做法是什么?

您是否简单地设置 unsigned char [4] 来表示每条指令?或者,使用您喜欢的任何表示,只要您可以将那些 4 字节指令转换为它?

提前致谢。

4

1 回答 1

0

我主要使用简单且“经典”的基于堆栈的 VM,其中字节码就是字节。一切都存储为一个大数组unsigned char,这也是我写入/读取文件的内容。

我通过始终以特定顺序写入和读取操作数来克服字节顺序之类的问题。执行四个字节大小的读取以获取 32 位整数要慢一些,但我不必担心字节顺序,就像我使用强制转换读取单个int.

不担心字节顺序的另一种方法是在手册中简单而清楚地说明字节顺序是什么,并且尝试在具有另一个字节顺序的系统上运行二进制文件会导致奇怪的错误。然后,您可以使用 eg 的数组int32_t来存储指令和操作数。如果这是字节码中的最小单位,它可能会大大简化您的编码。

于 2012-07-23T12:56:33.300 回答