Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 说明';s在虚拟机中的表示_C_Interpreter_File Format_Vm Implementation - Fatal编程技术网

C 说明';s在虚拟机中的表示

C 说明';s在虚拟机中的表示,c,interpreter,file-format,vm-implementation,C,Interpreter,File Format,Vm Implementation,我正在用C实现一个VM(这是我的第一个),为了独立于平台,我设置每个指令在二进制输入(即字节码文件)中占用4个字节 我的问题是:目前关于教学表现的做法是什么 您只是将无符号字符[4]设置为表示每条指令吗?或者,使用您喜欢的任何表示形式,前提是您可以将这些4字节指令转换为它 提前感谢。我主要使用简单且“经典”的基于堆栈的虚拟机,其中字节码就是字节。所有内容都存储为一个大型的无符号字符数组,这也是我对文件进行写入/读取的内容 我总是以特定的顺序写入和读取操作数,从而克服了字节顺序之类的问题。读取4字

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

我的问题是:目前关于教学表现的做法是什么

您只是将无符号字符[4]设置为表示每条指令吗?或者,使用您喜欢的任何表示形式,前提是您可以将这些4字节指令转换为它

提前感谢。

我主要使用简单且“经典”的基于堆栈的虚拟机,其中字节码就是字节。所有内容都存储为一个大型的
无符号字符数组
,这也是我对文件进行写入/读取的内容

我总是以特定的顺序写入和读取操作数,从而克服了字节顺序之类的问题。读取4字节大小的数据以获得32位整数要慢一些,但我不必像使用casting读取单个
int
那样担心endianess

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

我主要使用简单且“经典”的基于堆栈的虚拟机,其中字节码就是字节。所有内容都存储为一个大型的
无符号字符数组
,这也是我对文件进行写入/读取的内容

我总是以特定的顺序写入和读取操作数,从而克服了字节顺序之类的问题。读取4字节大小的数据以获得32位整数要慢一些,但我不必像使用casting读取单个
int
那样担心endianess


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

指令长度是否固定在32位?或者它们可以有额外的操作数来扩展长度?@JoachimPileborg:它们确实可以有额外的操作数。指令的长度固定在32位吗?或者它们可以有额外的操作数来扩展长度?@JoachimPileborg:它们确实可以有额外的操作数。