指令集清单(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:有/无符号/浮点/IEEE(NaN 传播) |
核心 |
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 内建 FB(CAL + fb_id,fb 表)
| 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 核心用量 |
扩展/预留量 |
| 4B(op:7) |
128 |
MOVE/NOP/NOT/RET ≈ 4 |
124(浮点单目/舍入/CONV 等) |
| 8B(op:6) |
64 |
ADD..CMP/LOAD/STORE/LOADK/CALL/CAL/JMP/JT/JF ≈ 19 |
45(位运算/移位/GETBIT 等) |
| 16B(op:5) |
32 |
LOAD_OFF/STORE_OFF ≈ 2 |
30(LOADK64/字符串/数组) |
| 32B(op:4) |
16 |
0 |
16(JTBL/复杂字符串) |
注:以上为全功能目标清单,v1 只实现「核心」列;「扩展/预留」列给出指令格式占位,
具体操作数形态(如 GETBIT 的槽/寄存器目标、CONV 舍入模式)在实现时定稿。