探索Lua52内部实现-编译系统2-跳转的处理 时间: 2021-04-06 | 分类: lua | 阅读: 2319 字 ~5分钟 跳转用来控制程序的指令流程。Lua使用OP_JMP指令来执行一个跳转,有关OP_JMP的详细介绍,可以参见《虚拟机指令》。跳转可以分为条件 阅读全文 »
探索Lua52内部实现-编译系统1-概述 时间: 2021-04-06 | 分类: lua | 阅读: 3788 字 ~8分钟 原文链接 Lua是一个轻量级高效率的语言。这种轻量级和高效率不仅体现在它本身虚拟机的运行效率上,而且也体现在他整个的编译系统的实现上。因为绝大 阅读全文 »
探索Lua5.2内部实现:虚拟机指令(8) LOOP 时间: 2021-04-06 | 分类: lua | 阅读: 1571 字 ~4分钟 原文链接 Lua5.2种除了for循环之外,其他的各种循环都使用关系和逻辑指令,配合JMP指令来完成。 local a = 0; while(a < 10) do a = a + 1; end 1 [1] LOADK 0 -1 ; 阅读全文 »
探索Lua5.2内部实现:虚拟机指令(7) 关系和逻辑指令 时间: 2021-04-05 | 分类: lua | 阅读: 1392 字 ~3分钟 原文链接 name args desc OP_JMP A sBx pc+=sBx; if (A) close all upvalues >= R(A) + 1 JMP执行一个跳转,sBx表示跳转的偏移位置,被加到当前指向下一指令的指令指针上。如果sBx为0,表 阅读全文 »
探索Lua5.2内部实现:虚拟机指令(6)FUNCTION 时间: 2021-04-05 | 分类: lua | 阅读: 1716 字 ~4分钟 原文链接 name args desc OP_CALL A B C A B C R(A), … ,R(A+C-2) := R(A)(R(A+1), … ,R(A+B-1)) CALL执行一个函数调用。寄存器A中存放函数对象,所有参数按顺序放置在A后面的寄存器中。B-1表示 阅读全文 »
探索Lua5.2内部实现:虚拟机指令(5)Arithmetic 时间: 2021-04-05 | 分类: lua | 阅读: 770 字 ~2分钟 原文链接 name args desc OP_ADD A B C R(A) := RK(B) + RK(C) OP_SUB A B C R(A) := RK(B) - RK(C) OP_MUL A B C R(A) := RK(B) * RK(C) OP_DIV A B C R(A) := RK(B) / RK(C) OP_MOD A B C R(A) := RK(B) % RK(C) OP_POW A B C R(A) := RK(B) ^ RK(C) 上表中的指令都是与 阅读全文 »
探索Lua5.2内部实现:虚拟机指令(4) Table 时间: 2021-04-05 | 分类: lua | 阅读: 1392 字 ~3分钟 原文链接 name args desc OP_NEWTABLE A B C R(A) := {} (size = B,C) NEWTABLE在寄存器A处创建一个table对象。B和C分别用来存储这个table数组部分和hash部分 阅读全文 »
探索Lua5.2内部实现:虚拟机指令(3) Upvalues & Globals 时间: 2021-04-05 | 分类: lua | 阅读: 1247 字 ~3分钟 原文链接 在编译期,如果要访问变量a时,会依照以下的顺序决定变量a的类型: a是当前函数的local变量 a是外层函数的local变量,那么a是当 阅读全文 »