文档:指令集清单拆分为独立文档(Doc/isa/指令集清单.md),优化文档保留引用
This commit is contained in:
+3
-123
@@ -311,127 +311,7 @@ V2 的 op 位段仅 6 位(64 个),FB 占 8 个不划算,且 machine.toml
|
||||
| U16 | **off32 相对下一条公式**(目标=当前+off,字节单位) | §2.1 已写 | 确认 / 改 |
|
||||
|
||||
|
||||
## 10. 全功能指令集清单(草案,参考)
|
||||
## 10. 全功能指令集清单
|
||||
|
||||
> 全功能目标下的完整指令清单。**状态列**:`核心` = 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 舍入模式)在实现时定稿。
|
||||
全功能目标下的完整指令清单(10 类 ~55 条,含 op 预算核对)已拆分为独立文档:
|
||||
[`指令集清单.md`](指令集清单.md)。状态列:`核心` = v1 实现;`扩展` = v1 后实现;`预留` = 仅留编码/未来。
|
||||
|
||||
@@ -0,0 +1,130 @@
|
||||
# 指令集清单(V2 草案)
|
||||
|
||||
> 状态:**草案**。全功能目标下的完整指令清单,与 [`指令集优化.md`](指令集优化.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 舍入模式)在实现时定稿。
|
||||
@@ -10,6 +10,7 @@ doc/
|
||||
isa/stb文件格式.md
|
||||
isa/指令配置.md
|
||||
isa/指令集优化.md
|
||||
isa/指令集清单.md
|
||||
compiler/编译管线.md
|
||||
compiler/STCompiler使用说明.md
|
||||
compiler/词法.md
|
||||
@@ -30,6 +31,7 @@ doc/
|
||||
| [`isa/stb文件格式.md`](isa/stb文件格式.md) | `.stb` 结构说明(用 line1 真实字节拆解) |
|
||||
| [`isa/指令配置.md`](isa/指令配置.md) | ops.txt:指令登记唯一事实来源、OpTable、屏蔽机制 |
|
||||
| [`isa/指令集优化.md`](isa/指令集优化.md) | **V2 草案**:变长指令、槽表/值区、IEC 类型扩展、待确认问题 |
|
||||
| [`isa/指令集清单.md`](isa/指令集清单.md) | **V2 草案**:全功能指令清单(10 类 ~55 条,核心/扩展/预留) |
|
||||
| [`compiler/编译管线.md`](compiler/编译管线.md) | 编译器边界与管线 |
|
||||
| [`compiler/STCompiler使用说明.md`](compiler/STCompiler使用说明.md) | 构建、用法、工程文件、ST 子集、错误类别 |
|
||||
| [`compiler/词法.md`](compiler/词法.md) | 12.4 词法:关键字表、token、大小写、TIME 字面量 |
|
||||
|
||||
Reference in New Issue
Block a user