Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.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
Algorithm 一种高效的操作码解析算法_Algorithm_Parsing_Vm Implementation - Fatal编程技术网

Algorithm 一种高效的操作码解析算法

Algorithm 一种高效的操作码解析算法,algorithm,parsing,vm-implementation,Algorithm,Parsing,Vm Implementation,假设我正在写一个虚拟机。我将程序数据读入字节数组。现在我需要遍历这些字节(指令是两个字节),并实例化一个表示每个指令及其参数的小类 什么是快速解析方法?以下是我想到的两种方法: 通过从左到右检查每个位,直到我将其缩小到一个特定的操作码为止,逻辑上进行分支。这就像是一个二进制搜索 检查一些程序,列出按使用频率排序的操作码列表,然后按该顺序检查完整的操作码 注意:我将使用C中的位移位和掩蔽来检查,而不是正则表达式或字符串comp或任何类似的高级内容。您不需要解析任何内容。如果是C语言,则创建一个函数

假设我正在写一个虚拟机。我将程序数据读入字节数组。现在我需要遍历这些字节(指令是两个字节),并实例化一个表示每个指令及其参数的小类

什么是快速解析方法?以下是我想到的两种方法:

  • 通过从左到右检查每个位,直到我将其缩小到一个特定的操作码为止,逻辑上进行分支。这就像是一个二进制搜索
  • 检查一些程序,列出按使用频率排序的操作码列表,然后按该顺序检查完整的操作码

  • 注意:我将使用C中的位移位和掩蔽来检查,而不是正则表达式或字符串comp或任何类似的高级内容。

    您不需要解析任何内容。如果是C语言,则创建一个函数指针表,其中包含256个条目,每个可能的字节值对应一个条目,然后根据第一个字节值跳转到相应的函数。如果第二个字节有效,则可以在函数中使用switch语句来处理第二个字节。这就是最初的Visual Basic解释器(版本1-6)的工作方式。

    操作码通常有几个小“字段”的良好模式。例如,标识具有相同字段结构的特定操作码“组”的字段,后跟该组特定结构的字段(指示特定操作和操作数等)。也可能有分组。通常,您可以使用它来创建一些嵌套的
    开关
    es,而不会导致大量案例。您是否有指向此VM描述的链接?AVR。在页面的一半,Izotech将它们很好地布局。好吧,这还不错,“按字段解码”应该可以很好地解决这个问题