Lua5.3 虚拟机指令分析(十)表相关指令
来源:互联网 发布:剑网三捏脸数据免费 编辑:程序博客网 时间:2024/06/06 03:51
Lua5.3 虚拟机指令分析(十)表相关指令
OP_NEWTABLE
OP_NEWTABLE,/* A B C R(A) := {} (size = B,C) */
创建一个新表,结果存放在A所在的栈位置,表的数组大小为B,表的Hash大小为C.
TTcs-Mac-mini:OpCode ttc$ cat tOP_NEWTABLE.lua local a = {}a[1]= 100a[2]="TTc"TTcs-Mac-mini:OpCode ttc$ ./luac -l -l tOP_NEWTABLE.lua main <tOP_NEWTABLE.lua:0,0> (4 instructions at 0x7f883b5001c0)0+ params, 2 slots, 1 upvalue, 1 local, 4 constants, 0 functions 1 [1] NEWTABLE (iABC) [A]0 [ISK]0[B]0[ISK]0[C]0 2 [2] SETTABLE (iABC) [A]0 [ISK]256[B]-1[ISK]256[C]-2 ; 1 100 3 [3] SETTABLE (iABC) [A]0 [ISK]256[B]-3[ISK]256[C]-4 ; 2 "TTc" 4 [3] RETURN (iABC) [A]0 [ISK]0[B]1[ISK]0constants (4) for 0x7f883b5001c0: 1(idx) 1 2(idx) 100 3(idx) 2 4(idx) "TTc"locals (1) for 0x7f883b5001c0: 0 a(name) 2(startpc) 5(endpc)upvalues (1) for 0x7f883b5001c0: 0 _ENV(name) 1(instack) 0(idx)TTcs-Mac-mini:OpCode ttc$
OP_SETLIST
OP_SETLIST,/* A B C R(A)[(C-1)*FPF+i] := R(A+i), 1 <= i <= B */
A所在的栈位置是一个表,该指令将初始化该表的数组元素,元素数量由B指定,而C指定是初始化时的块索引,在Lua中每块的元素数量由LFIELDS_PER_FLUSH指定,该值为50.换言之,R(A)[1] = R(A+1), R(A)[2] = R(A + 2) … 以此类推。
但是也有特殊的情况需要考虑。
1. 当B为0时,表示这个赋值操作中右边的表达式是可变长度的表达式,比如一个函数的返回值或者可变操作,此时上面的循环赋值过程将持续到栈顶位置.
2. 当C为0的时候,表示下一个指令将为一个整数存储真正的C数值.这种情况很少,只会出现指令符C的范围不足以表示块大小的情况下:
TTcs-Mac-mini:OpCode ttc$ cat tOP\_SETLIST.lua local a = {1,1,1} TTcs-Mac-mini:OpCode ttc$ ./luac -l -l tOP\_SETLIST.lua main <tOP\_SETLIST.lua:0,0> (6 instructions at 0x7fe19c4039d0) 0+ params, 4 slots, 1 upvalue, 1 local, 1 constant, 0 functions1 [1] NEWTABLE (iABC) [A]0 [ISK]0[B]3[ISK]0[C]02 [1] LOADK (iABx) [A]1 [K]-1 ; 13 [1] LOADK (iABx) [A]2 [K]-1 ; 14 [1] LOADK (iABx) [A]3 [K]-1 ; 15 [1] SETLIST (iABC) [A]0 [ISK]0[B]3[ISK]0[C]1 ; 16 [1] RETURN (iABC) [A]0 [ISK]0[B]1[ISK]0constants (1) for 0x7fe19c4039d0:1(idx) 1locals (1) for 0x7fe19c4039d0:0 a(name) 6(startpc) 7(endpc)upvalues (1) for 0x7fe19c4039d0:0 _ENV(name) 1(instack) 0(idx)TTcs-Mac-mini:OpCode ttc$
阅读全文
0 0
- Lua5.3 虚拟机指令分析(十)表相关指令
- Lua5.3 虚拟机指令分析(二)赋值指令
- Lua5.3 虚拟机指令分析(一)概述
- Lua5.3 虚拟机指令分析(三)表达式运算
- Lua5.3 虚拟机指令分析(四)分支与跳转
- Lua5.3 虚拟机指令分析(五)函数调用
- Lua5.3 虚拟机指令分析(六)不定参数
- Lua5.3 虚拟机指令分析(八)循环
- 探索Lua5.2内部实现:虚拟机指令(3) Upvalues & Globals
- 探索Lua5.2内部实现:虚拟机指令(5)Arithmetic
- 探索Lua5.2内部实现:虚拟机指令(6)FUNCTION
- 探索Lua5.2内部实现:虚拟机指令(1) 概述
- 探索Lua5.2内部实现:虚拟机指令(2) MOVE & LOAD
- 探索Lua5.2内部实现:虚拟机指令(4) Table
- 探索Lua5.2内部实现:虚拟机指令(8) LOOP
- 探索Lua5.2内部实现:虚拟机指令(7) 关系和逻辑指令
- MATLAB 主要函数指令表(十)
- Lua源码分析 -- 虚拟机以及指令解释
- Django中models文件中的字段
- Lua5.3 虚拟机指令分析(五)函数调用
- 搭建javaweb服务器
- Lua5.3 虚拟机指令分析(六)不定参数
- Lua5.3 虚拟机指令分析(八)循环
- Lua5.3 虚拟机指令分析(十)表相关指令
- Linux后台开发具备能力集锦
- Lua 5.3 源文件加载
- cocos studio 3.10
- 怎样理解阻塞非阻塞与同步异步的区别?(个人理解)
- java学习——java基础(五)之集合类
- 正则表达式学习笔记
- DecimalFormat用法
- Android的消息机制