美文网首页
Lua指令编码与解码

Lua指令编码与解码

作者: APP4x | 来源:发表于2020-09-24 14:09 被阅读0次

编码模式:

Lua虚拟机指令可以分为四类
分别对应四种编码模式(Mode):
1.iABC(39个)
携带A B C三个操作数,分别占用8 9 9个比特
2.iABx(3个)
携带A Bx两个操作数,分别占用8 18个比特
3.iAsBx(4个)
携带A sBx两个操作书,分别占用8 18个比特
4.iAx(1个)
携带Ax一个操作数,占用全部26个比特

大部分都是iABC的

eg:
OP_MOVE、OP_LOADK、OPLOADKX、OP_LOADBOOL...


操作数:
是指令的参数,每条指令可以携带1到3个操作数
A主要用来表示目标寄存器索引
其他的按照其表示的信息,分为四种类型:
a.OpArgN
不表示任何信息,表示不会被使用
(Move操作符只需要AB操作数,C不用,就是这个类型)

b.OpArgU
表示布尔值、整数值、upvalue索引、子函数索引等等

c.OpArgR
在iABC模式下表示寄存器的索引,在iAsBx模式下表示跳转偏移

d.OpArgK
表示常量表索引或者寄存器的索引


指令表:
为了便于代码中使用,Lua官方实现把每一条指令的基本信息(包括编码模式、是否设置寄存器A、操作数B和C的使用类型等)都编成了一个子节


指令解码

提取操作码:
int(self & 0x3F)

提取iABC参数:
a=int(self >> 6 & 0xFF)
c=int(self >>14 & 0x1FF)
b=int(self >> 23 & 0x1FF)

提取iABx参数
a = int(self >> 6 & 0xFF)
bx = int(self >> 14)

提取iAx参数
a = int(self >> 6)

相关文章

  • Lua指令编码与解码

    编码模式: Lua虚拟机指令可以分为四类分别对应四种编码模式(Mode):1.iABC(39个)携带A B C三个...

  • iOS开发之Base64编码与解码

    原理: 调用Base64编码与解码 //64编码 //64解码

  • Fresco源码分析-图片解码

    图片编解码 在看Fresco对图片解码处理之前,先大致了解一下什么是图片与图片编解码。 图片编码与压缩 图像编码与...

  • [114]序列化探讨

    关于编码和解码 在谈写序列化与反序列之前,我们先谈谈编码和解码。从wikipidea上查看编码解码的定义如下:[编...

  • node.js进阶【19】:base64 编码解码

    base64 编码解码 一、普通字符串 编码解码: 二、编码解码并转成hex 三、编码解码图片

  • 关于python中编码与解码的问题

    部分来源于网络整理 一、计算机的编码与解码 探讨编码与解码问题前,首先要知道什么是编码?什么是解码?计算机最终存储...

  • transformer再记(解码器)

    上一篇:transformer再记(编码器)解码器与编码器在细节上有差异。 编码器与解码器的连接:编码器通过处理输...

  • iOS UTF-8编码/解码 UrlEncode编码/解码

    UTF-8编码/解码 UrlEncode编码/解码 ///> 区别

  • css

    1.js编码和解码 encodeURIComponent() 编码 decodeURIComponent() 解码...

  • 常用网站

    UrlEncode编码/UrlDecode解码 - 站长工具 Base64编码/解码器 在线解码

网友评论

      本文标题:Lua指令编码与解码

      本文链接:https://www.haomeiwen.com/subject/gmyzyktx.html