虚拟机实现-流量控制指令在一个虚拟机



我一直在从头开始实现我自己的脚本语言+虚拟机,作为一个小实验。脚本阅读器解析脚本并将其转换为运行时引擎将执行的指令流。

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

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

这可能是有效的或由硬件特定原因驱动的,但这不是我想要的。

我寻找一个精简,优雅的解决方案,以流量控制,只需要一些专门的指令,并不是太复杂的实现和维护。

我很有信心我能想出一些有用的方法,但我宁愿提高我的知识,而不是重新发明轮子。任何相关资料的解释或链接都是非常欢迎的!

一般来说,流量控制所需的最小原语是

  • 无条件跳转

  • 条件跳

条件跳转是其中比较复杂的一个,它至少需要在原子上支持以下内容:

  • 测试二进制变量/标志

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

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

然而,对于这样一个基本的条件跳转,您需要将二进制变量/标志设置为每种类型的布尔表达式的适当值,这些布尔表达式可以在您的语言的流控制结构中使用。

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

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

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

相关内容

最新更新