【问题标题】:Does a Virtual Machine have to interpret Bytecode or can it interpret the VM's assembly directly?虚拟机必须解释字节码还是可以直接解释虚拟机的程序集?
【发布时间】:2014-02-17 11:07:46
【问题描述】:

我计划在 Go 中实现一个 VM。我看到教程中人们为他们的 VM 设计了自己的程序集类型,但虚拟机并没有直接执行程序集代码。他们为他们的虚拟机编码了每条指令,为每条指令分配一个数字,并为他们的机器形成一个特殊的字节码。 是解释字节码更好还是解释汇编代码并获得相同的结果?

【问题讨论】:

  • 如果您计划只支持一个平台,例如x86,没有立即需要抽象指令。所以这取决于你想要实现什么。
  • 我希望我的虚拟机能够独立运行平台。
  • 它不是操作系统的虚拟机。它是用于编程语言解释器的 VM。不过感谢您的回答!
  • 它应该执行指令。这就是虚拟机所做的,模拟一个人工环境。
  • 当你说“或者你能解释汇编代码”时,你指的是字节码汇编中程序的文字描述吗?还是机器级汇编代码?

标签: assembly go bytecode vm-implementation


【解决方案1】:

如果你想在不同的访客平台上使用你的虚拟机,那么是的

字节码给你的优势是可移植性(因此可以使用替代命名“p-code”,它是“portable code”的缩写)。

如果您打算在不同的平台上使用您的虚拟机,您应该选择字节码。然后,您必须负责将程序编译为字节码指令,而 VM 会负责其余的工作。

【讨论】:

    【解决方案2】:

    语言运行时执行编译后的字节码而不是文本汇编指令,因为解析文本很慢。编写良好的运行时可以在几个处理器周期内解析和执行字节码指令——但解析文本语句需要更多的工作。最明智的方法是解析整个程序集文件并将其以中间表示形式存储在内存中——这正是字节码的含义。此外,诸如跳转和寻址之类的某些事情只有在字节码中才真正有意义。

    不要将字节码视为程序集的二进制表示,而应将程序集视为字节码的文本表示。

    【讨论】:

      猜你喜欢
      • 2011-05-08
      • 1970-01-01
      • 2010-11-21
      • 2021-10-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多