C 说明';s在虚拟机中的表示
我正在用C实现一个VM(这是我的第一个),为了独立于平台,我设置每个指令在二进制输入(即字节码文件)中占用4个字节 我的问题是:目前关于教学表现的做法是什么 您只是将无符号字符[4]设置为表示每条指令吗?或者,使用您喜欢的任何表示形式,前提是您可以将这些4字节指令转换为它 提前感谢。我主要使用简单且“经典”的基于堆栈的虚拟机,其中字节码就是字节。所有内容都存储为一个大型的C 说明';s在虚拟机中的表示,c,interpreter,file-format,vm-implementation,C,Interpreter,File Format,Vm Implementation,我正在用C实现一个VM(这是我的第一个),为了独立于平台,我设置每个指令在二进制输入(即字节码文件)中占用4个字节 我的问题是:目前关于教学表现的做法是什么 您只是将无符号字符[4]设置为表示每条指令吗?或者,使用您喜欢的任何表示形式,前提是您可以将这些4字节指令转换为它 提前感谢。我主要使用简单且“经典”的基于堆栈的虚拟机,其中字节码就是字节。所有内容都存储为一个大型的无符号字符数组,这也是我对文件进行写入/读取的内容 我总是以特定的顺序写入和读取操作数,从而克服了字节顺序之类的问题。读取4字
无符号字符数组
,这也是我对文件进行写入/读取的内容
我总是以特定的顺序写入和读取操作数,从而克服了字节顺序之类的问题。读取4字节大小的数据以获得32位整数要慢一些,但我不必像使用casting读取单个int
那样担心endianess
另一种不用担心字节顺序的方法是,在手册中简单明了地说明字节顺序是什么,试图在另一个字节顺序的系统上运行二进制文件会导致奇怪的错误。然后您可以使用一个数组,例如int32\t
来存储指令和操作数。如果这是字节码中最小的单位,它可能会大大简化您的编码。我主要使用简单且“经典”的基于堆栈的虚拟机,其中字节码就是字节。所有内容都存储为一个大型的无符号字符数组
,这也是我对文件进行写入/读取的内容
我总是以特定的顺序写入和读取操作数,从而克服了字节顺序之类的问题。读取4字节大小的数据以获得32位整数要慢一些,但我不必像使用casting读取单个int
那样担心endianess
另一种不用担心字节顺序的方法是,在手册中简单明了地说明字节顺序是什么,试图在另一个字节顺序的系统上运行二进制文件会导致奇怪的错误。然后您可以使用一个数组,例如
int32\t
来存储指令和操作数。如果这是字节码中最小的单位,可能会大大简化编码。指令长度是否固定在32位?或者它们可以有额外的操作数来扩展长度?@JoachimPileborg:它们确实可以有额外的操作数。指令的长度固定在32位吗?或者它们可以有额外的操作数来扩展长度?@JoachimPileborg:它们确实可以有额外的操作数。