runningwater 5bd195ef2f 指令集 преди 1 година
..
instruction.go 5bd195ef2f 指令集 преди 1 година
opcodes.go 5bd195ef2f 指令集 преди 1 година
readme.md 5bd195ef2f 指令集 преди 1 година

readme.md

  • Lua 虚拟机基于寄存器实现
  • Lua 虚拟机采用定长指令集, 每条指令占4 个字节(32 比特),其中 6 比特用于操作码(Opcode),26 比特用于操作数(Operand)
  • Lua 5.3 共定义了 47 条指令,按照作用,可大致分为 常量加载指令、运算符相关指令、循环和跳转指令、函数调用相关指令、表操作指令以及 Upvalue 操作指令
  • 每条 Lua 虚拟机指令占 4 个字节,其中低 6 比特用于操作码,高 26 比特用于操作数
  • 按照高 26 个比特的分配方式, Lua 虚拟机可以分为四类,分别对应四种编码模式(Mode): iABC、iABx、iAsBx、iAx
  • iABC 模式指令可以携带 A、B、C 三个操作数,分别占用 8、9、9 个比特
  • iABx 模式指令可以携带 A 和 Bx 两个操作数,分别占用 8 和 18 个比特
  • iAsBx 模式的指令可以携带 A 和 sBx 两个操作数,分别占用 8 和 18 个比特
  • iAx 模式的指令中携带一个操作数,占用全部 26 比特
  • 在 四种模式中,只用 iAsBx 模式下的 sBx 操作数会被解释成有符号整数,其他情况下操作数均被解释成无符号整数