Files
Interpreter/Doc/isa/指令集清单.md
T

7.0 KiB
Raw Blame History

指令集清单(V2 草案)

状态:草案。全功能目标下的完整指令清单,与 指令集优化.md 配套—— 该文定义指令格式(变长/位段/长度组),本文列出指令清单(名称/组/格式/操作数/状态)。 组 = 长度组(前缀编码:1=4B、01=8B、001=16B、0001=32B);fmt = 操作数形态。 type 列: = 用 type 位段(宽度/符号/浮点语义)、 = type=NONE、dst = type 位段为转换目标类型。 操作数记法:rd=目标寄存器、rs/ra/rb=源寄存器、slot=槽号、off=字段偏移、const_id=常量表下标、fn_id=函数下标、fb_id=内建 FB id。

全功能目标下的完整指令清单。状态列核心 = v1 实现;扩展 = v1 后实现;预留 = 仅留编码/未来。 组 = 长度组(前缀编码:1=4B、01=8B、001=16B、0001=32B);fmt = 操作数形态。 type 列: = 用 type 位段(宽度/符号/浮点语义)、 = type=NONE、dst = type 位段为转换目标类型。 操作数记法:rd=目标寄存器、rs/ra/rb=源寄存器、slot=槽号、off=字段偏移、const_id=常量表下标、fn_id=函数下标、fb_id=内建 FB id。

10.1 数据搬运

指令 fmt type 操作数 语义 状态
MOVE 4B RR rd, rs 寄存器间搬运(int64 全宽) 核心
NOP 4B NONE 空操作 核心
LOAD 8B SLOT rd, slot 槽→寄存器(按 type 读宽+扩展) 核心
STORE 8B SLOT slot, rs 寄存器→槽(按 type 写宽) 核心
LOADK 8B IMM rd, const_id 常量表→寄存器(按 type 解释) 核心
LOAD_OFF 16B SLOT+off rd, slot, off 字段读(结构体/FB 共享体) 核心
STORE_OFF 16B SLOT+off slot, off, rs 字段写 核心
LOADK64 16B IMM64 rd, imm64 64 位立即数内嵌(免查表) 预留

10.2 逻辑与位运算

指令 fmt type 操作数 语义 状态
NOT 4B RR rd, rs 按 type:BOOL 逻辑非 / 位串取反 核心
AND / OR / XOR 8B RRR rd, ra, rb 按 type 位宽 核心
NAND / NOR / XNOR 8B RRR rd, ra, rb 扩展三态 扩展
SHL / SHR 8B RRR rd, rs, n 左移/右移(SHR 按 type 符号:算术/逻辑) 扩展
ROL / ROR 8B RRR rd, rs, n 循环移位(位串) 扩展
GETBIT 8B RRR rd, rs, bit 取位(位号在 rb 扩展
SETBIT / CLRBIT / TOGBIT 8B RRR slot/rd, rs, bit 置位/清位/翻转(目标可槽) 扩展

10.3 算术

指令 fmt type 操作数 语义 状态
ADD / SUB / MUL / DIV 8B RRR rd, ra, rb 整数饱和 / 浮点 IEEE / 无符号按 type 核心
MOD 8B RRR rd, ra, rb 取模 扩展
NEG 4B RR rd, rs 取负 扩展
ABS 4B RR rd, rs 绝对值 扩展
INC / DEC 4B RR rd, rs 自增/自减 扩展
EXPT 8B RRR rd, ra, rb 幂(整数/浮点) 扩展
SQRT 4B RR rd, rs 平方根 扩展
SIN / COS / TAN / ASIN / ACOS / ATAN 4B RR rd, rs 三角函数(浮点) 扩展
LN / LOG / EXP 4B RR rd, rs 对数/指数(浮点) 扩展
ROUND / TRUNC / FLOOR / CEIL 4B RR rd, rs 舍入(浮点→整数) 扩展

10.4 比较

指令 fmt type 操作数 语义 状态
CMP_EQ / NE / LT / LE / GT / GE 8B RRR rd, ra, rb 按 type:有/无符号/浮点/IEEENaN 传播) 核心

10.5 转换

指令 fmt type 操作数 语义 状态
CONV 4B RR dst rd, rs 类型转换(dst 在 type 位段;src 值已在寄存器,按 dst 宽度截断/扩展/舍入) 扩展
TRUNC(并入 CONV 舍入模式) 舍入模式由 CONV 的 op 变体或独立指令(见上) 扩展

10.6 控制流

指令 fmt type 操作数 语义 状态
JMP 8B JMP off32 无条件跳转(相对下一条,字节) 核心
JT / JF 8B JC rd, off rd≠0/==0 跳转 核心
CALL 8B IMM fn_id 压帧调用(r0..r7 复制) 核心
RET 4B NONE 弹帧 / MAIN 周期结束 核心
CAL 8B SLOT fb_id, slot 内建 FB 调用(fb_id 查 fb 表) 核心
JTBL 32B 预留 rd, slot, n CASE 跳转表 预留

10.7 内建 FBCAL + fb_idfb 表)

fb_id FB 字段(类型化) 状态
0 TON in/pt/q/et = BOOL/TIME/BOOL/TIME 核心
1 TOF 同上 核心
2 TP 同上 核心
3 CTU cu/r/pv(INT)/q/cv(INT) 单字 核心
4 DCTU cu/r/pv(DINT)/q/cv(DINT) 双字 核心
5 CTD cd/ld/pv(INT)/q/cv(INT) 核心
6 DCTD cd/ld/pv(DINT)/q/cv(DINT) 核心
7 CTUD cu/cd/r/lu/pv(INT)/qu/qd/cv(INT) 核心
8 DCTUD cu/cd/r/lu/pv(DINT)/qu/qd/cv(DINT) 核心
9 R_TRIG clk/q = BOOL/BOOL 核心
10 F_TRIG clk/q = BOOL/BOOL 核心
11 SR / RS(锁存) s1/r/s/q… 扩展
12 PWM in/pt/q… 扩展
13 RTC 日期时钟字段 扩展

10.8 字符串(未来,元数据段 + 16/32B)

指令 fmt 语义 状态
STR_LEN 16B SLOT+off 字符串长度 预留
STR_CMP / STR_EQ 16B SLOT+off 比较(按元数据段定长/变长) 预留
STR_CONCAT 32B 预留 拼接 预留
STR_MID / STR_LEFT / STR_RIGHT 16B/32B 预留 取子串 预留
STR_FIND / STR_REPLACE 32B 预留 查找/替换 预留

10.9 数组(未来)

指令 fmt 语义 状态
ARR_LEN 16B SLOT+off 数组长度 预留
ARR_LOAD / ARR_STORE 32B 预留 索引访问(基槽+index 预留

10.10 系统

指令 fmt 语义 状态
NOP 4B NONE 空操作(占位/对齐) 核心

10.11 op 预算核对(前缀编码按组分治)

op 空间 v1 核心用量 扩展/预留量
4Bop:7 128 MOVE/NOP/NOT/RET ≈ 4 124(浮点单目/舍入/CONV 等)
8Bop:6 64 ADD..CMP/LOAD/STORE/LOADK/CALL/CAL/JMP/JT/JF ≈ 19 45(位运算/移位/GETBIT 等)
16Bop:5 32 LOAD_OFF/STORE_OFF ≈ 2 30LOADK64/字符串/数组)
32Bop:4 16 0 16JTBL/复杂字符串)

注:以上为全功能目标清单,v1 只实现「核心」列;「扩展/预留」列给出指令格式占位, 具体操作数形态(如 GETBIT 的槽/寄存器目标、CONV 舍入模式)在实现时定稿。