我在C中实现了一个VM(这是我的第一个),为了与平台无关,我设置每个指令占用二进制输入中的4个字节(即字节码文件)。
我的问题是:关于教学代表的当前做法是什么?
您是否只是设置unsigned char [4]来表示每条指令?或者,使用您想要的任何表示,只要您可以将这些4字节指令转换为它?
提前致谢。
答案 0 :(得分:0)
我主要使用简单和“经典”基于堆栈的VM,其中字节码就是字节。一切都存储为unsigned char
的大数组,这也是我写入/读取文件的内容。
我总是通过按特定顺序编写和读取操作数来克服像字节顺序这样的事情。执行四个字节大小的读取以获得32位整数要慢一点,但我不必担心像我使用强制转换来读取单个int
那样的endianess。
另一种不用担心字节顺序的方法是简单地在手册中清楚地表示字节顺序是什么,并尝试在另一个字节顺序的系统上运行二进制文件会导致奇怪的错误。然后你可以使用例如int32_t
代替存储指令和操作数。如果这是字节码中的最小单位,它可能会大大简化您的编码。