我计划在Go中实现VM。我看到人们为他们的VM设计了他们自己的程序集类型的教程,但是虚拟机没有直接执行汇编代码。他们为每个VM指令编码,每个指令为它们分配一个数字,并为它们的机器形成一个特殊的字节码。 解释字节码是更好还是解释汇编代码并获得相同的结果?
答案 0 :(得分:3)
如果您想在不同的来宾平台中使用您的VM,那么是。
字节码为您提供的优势是可移植性(因此备用命名“p-code”,这是“可移植代码”的简称)。
如果您计划在不同平台上使用VM,则应该使用字节码。然后你必须负责将程序编译成字节码指令,VM将负责其余部分。
答案 1 :(得分:1)
语言运行时执行编译的字节码而不是文本汇编指令,因为解析文本很慢。编写良好的运行时可以在几个处理器周期内解析并执行字节码指令 - 但解析文本语句需要更多的工作。执行此操作的最佳方法是解析整个程序集文件并将其以中间表示形式存储在内存中 - 这正是字节码所在。此外,跳转和寻址等一些事情在字节码中才有意义。
不要将字节码视为汇编的二进制表示,而应将汇编视为字节码的文本表示。