lua指令集与虚拟机

lua_int32 Instruction 指令结构介绍与解析方法

----------------------目录-----------------------

(a)lu_int32 指令类型
(b)Instruction 指令结构
(c)OpMode 操作码类型
(d)MAXARGlimit限制
(e)GET_/SET_OPCODE 操作
(f)操作码分类校验
(j)OpCode 指令枚举
(h)OpArgMask
(i)Opmode 指令解析方法

(j)OP顺序调整加密

---------------------------------------------------

(a)lu_int32 指令类型

关于它的定义:typedef unsigned LUA_INT32 lu_int32;

LUA_INT32 可以通过设置 LUAI_BITSINT 的值来控制值 int类型还是long类型


(b)Instruction 指令结构

在lopcodes.h中有相关于指令的介绍

前6bits(低位):所有指令的opcode

之后会存在

A:8 bits

B:9 bits

C:9 bits

或者

Ax:26 bits(A、B、C组合在一起)

Bx:18 bits(A和B组合在一起)

sBx:18 bits(有符号的Bx)


(c)OpMode 操作码类型

{iABC,iABx,iAsBx,iAx}这个是代表组合的类型

#define SIZE_C 9
#define SIZE_B 9
#define SIZE_Bx (SIZE_C + SIZE_B)
#define SIZE_A 8
#define SIZE_Ax (SIZE_C + SIZE_B + SIZE_A)


#define SIZE_OP 6


#define POS_OP 0
#define POS_A (POS_OP + SIZE_OP)
#define POS_C (POS_A + SIZE_A)
#define POS_B (POS_C + SIZE_C)

#define POS_BxPOS_C

#define POS_AxPOS_A

上述定义说你名了关于Instruction的相关结构介绍


(d)MAXARG limit限制

系列参数定义,定义所有指令参数的限制条件,这里不做详细的介绍了,可以参考lopcodes.h中相关定义学习

(e)GET_/SET_OPCODE 操作

这一部分是为了获取、设置OPCode和相对应的参数,也就是指令集解析操作,在lopcodes.h GET_OPCODE之后是相应的指令定义
MASK1 制作1的掩码,协助下方操作获取相应的数值
MASK0 制作0的掩码,协助下方操作设置相应的数值
GET_OPCODE 获取opcode
SET_OPCODE 设置opcode
getarg 获取参数方法,协助下方获取参数操作
setarg 设置参数方法,协助下方设置参数操作

GETARG_A
SETARG_A
……
这一部分就是相关的参数操作定义了

CREATE_ABC
这一部分是用来创建各个mode组合的指令,创建好之后就可以设置参数了!

(f)操作码分类校验

* opmode校验
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值