虚拟机中的流量控制指令

时间:2013-01-13 20:27:56

标签: vm-implementation flow-control

我从头开始实施自己的脚本语言+虚拟机进行小型实验。脚本读取器解析脚本并将其转换为运行时引擎将执行的指令流。

一开始我没有想到它,但现在我想要包括流量控制(循环,分支等)。我不熟悉语言理论,只是看了一些例子来寻找灵感。

但x86和java虚拟机都有大量用于流控制的指令。在x86中,有大量的指令根据标志的状态和以某种方式操纵相关标志的其他指令进行跳转。在Java中,似乎有16条指令可以进行某种比较和条件跳转。

这可能是出于硬件特定原因的效率或动机,但这不是我想要的。

我寻求一种精简,优雅的流量控制解决方案,只需要一些专用指令,并且实现和维护不会太复杂。

我非常有信心我能想出一些有用的东西,但我宁愿提高自己的知识,而不是重新发明轮子。我们非常欢迎任何有关材料的解释或链接!

1 个答案:

答案 0 :(得分:1)

通常,流控制所需的最小基元是

  • 无条件跳转

  • 条件跳转

其中,条件跳转是复杂的,至少需要原子支持以下内容:

  • 测试二进制变量/标志

  • 如果设置了标志,则导致指令执行跳转到某个指定位置

  • 如果未设置该标志,则允许指令执行继续不间断

但是,如果使用这种原始条件跳转,您需要将二进制变量/标志设置为适用于您的语言的流控制结构中使用的每种布尔表达式的适当值。

因此,这将导致需要各种复杂的原语来设置二进制变量/标志,或者需要发出复杂的指令序列以获得所需的效果。

另一种选择是引入更复杂的条件跳转原语。

通常在每个的数量和复杂性之间需要权衡:条件跳转原语;条件(变量/标志)设置原语;发出指示。