Lua一直把虚拟机执行代码的效率作为一个非常重要的设计目标.而采用什么样的指令系统的对于虚拟机的执行效率来说至关重要. Stack based vs Register based VM 根据指令获取操作数方式的不同,我们可以把虚拟机的实现分为stack based和register based. Stack based vm 对于大多数的虚拟机,比如JVM,Python,都采用传统的stack based vm. Stack based vm的指令一般都是在当前stack中获取和保存操作数的.比…
name args desc OP_MOVE A B R(A) := R(B) OP_MOVE用来将寄存器B中的值拷贝到寄存器A中.由于Lua是register based vm,大部分的指令都是直接对寄存器进行操作,而不需要对数据进行压栈和弹栈,所以需要OP_MOVE指令的地方并不多.最直接的使用之处就是将一个local变量复制给另一个local变量时: local a; local b = a; 在编译过程中,Lua会将每个local变量都分配到一个指定的寄存器中.在运行期,lua使用loc…