Files
Interpreter/Doc/isa/阶段1规格总览.md
T

5.6 KiB
Raw Blame History

V2 规格总览(阶段 1 主参考)

状态:规格冻结,阶段 1 开工前的主参考文档。 本文汇总 V2 全部已定案设计,作为重写三份规范文档(指令与映像.md / 指令配置.md / stb文件格式.md)的依据。细节见各参考文档,本文只给"下一阶段要看什么、写什么"。

1. 阶段 1 任务

产出物 内容 依据
Doc/isa/指令与映像.md(重写为 V2 指令编码、数据模型、类型/func、调用栈、映像格式 本文 + 指令编码.md + 指令集清单.md
Doc/isa/指令配置.md(重写为 V2 machine.toml V2 schema(本文唯一开放项 N5 本文 §6
Doc/isa/stb文件格式.md(重写为 V2 新 .stb 结构拆解(头 128B/段序/line1 字节) 本文 §5 + 阶段 5 再补 line1 推演

阶段 1 完成后:V2 规格文档与代码蓝图自洽,进入阶段 2(isa 重构)。

2. 指令编码(定案,详见指令编码.md)

字节 0 = [前缀+形态分区 | op]      字节 1 = [func:4 | 空:4](空位 = N1,延后)
前缀 长度 形态 op 空间
11 4B RR 6 位(用 21
10 4B NONE 6 位(用 2
011 8B RRR 5 位(用 26
010 000..101 8B IMM/SLOT/JMP/JC/CALL/CAL 2 位(用 8,全直推零查表)
0010 16B SLOT+off 4 位(用 8
0011 16B IMM64 4 位(用 1
0001 32B 预留(N2 4 位(用 6
  • func 位段:0..7 = 宽度×符号、8=F32、9=F64、无类型指令 = 0
  • 位掩码推导:uses_rd/uses_ra/uses_rb 全部前缀直推
  • 跳转/PC 字节单位(off32 相对下一条);code 段 16 对齐

3. 数据模型与类型(定案)

  • 槽表(8B/条 {addr:u32, 预留:u32})→ 值区:两级间接;全 32 位寻址(槽 2^32、值区 4GB)
  • 值区变宽紧凑:1/2/4/8B 对齐编译器保证(值段起点 16 对齐)
  • 类型19 IEC 类型 → 10 种 func 编译期映射;BOOL 编译器强制 0/1;字面量按上下文适配、默认 DINT 兜底;进制前缀 2#/8#/16#禁隐式变量转换(编译期报错)
  • DATE/TOD/DTDATE=u32(天)、TOD=u32(当日 ms)、DT=u64 {date:32|tod:32} 拼接;v1 不运算(仅存取/比较);字面量 V2 支持D#/TOD#/DT#,纪元 1970
  • 常量表:条目 8B 原始值(无 tag),LOADK 按 func 解释,同值多类型复用

4. 执行语义(定案)

  • 寄存器:编号 8 位(256 = 寻址上限)、值 int64;帧按函数头 nregs 动态分配;调用约定 r0 结果 / r1..r7 参数 / r8+ 变量临时;CALL/RET 复制 r0..r7 全宽
  • 调用栈(方案 C:递归 = 链接层环检测编译期报错;max_stack = MAIN + DAG 最坏路径 Σ(帧头 12B + nregs×8) 写入映像头 @116;预分配栈区、运行期零分配;溢出双检查(字节 + 深度 64);MAIN 帧常驻
  • 整数除法(A 定案):除零 → 返回被除数;MIN/-1 → 饱和夹界(各宽度模板);截断除法(向零);MOD 符号随被除数
  • 浮点IEEE 754(溢出/零除 → ±inf、NaN 传播)
  • TIME+ - 比较;DATE/TOD/DT 不运算(仅存取/比较)
  • 字段访问LOAD/STORE 16B 变体(基槽 + 偏移)= 结构体 + FB 共享体统一(LOADF 取消)
  • I/Q/M 合并LOAD/STORE 两条;语义标签交 sidecar(绑定粒度 slot=槽号不变)
  • 内建 FB15 条(CAL + fb_id16);字段布局终稿见指令集清单 §8.1(含 SR/RS、PWM、RTC);RTC 用虚拟时钟(周期×dt_ms,确定性)

5. 映像格式(定案,详见指令集优化.md §2.5)

头 128B16 对齐):
  0    magic "STSC"(不变)
  4    version = 2V1=1
  8..71   cycle_limit/dt_ms/project_hash/entry_fn_id/n_globals/n_i/n_q/n_m/
          n_consts/n_funcs + offset_const/funcs/code/fb/datan_i/n_q/n_m 保留恒 0
  64   offset_slots     68  offset_values16 对齐)
  72..103  型号标识 STATOR2
  104  n_slots= n_globals + 实例/字段槽数)   108  values_size
  112  offset_metav1=0 空段)   116  max_stack   120..127 预留 8B
段序:头 → 常量表 → 函数表 → 字节码 → 槽表段 → 值段 → 元数据段(v1 空)→ SHA-256[32]

6. machine.toml V2 schemaN5,阶段 1 内定)

阶段 1 重写指令配置.md 时定稿,方向已定:

[meta]              # name="STATOR"、version=2
[[type]]            # 19 条:name/width/signed/tag(func 值 0..18)/kind(int|uint|bit|float|time|date)
[[op]]              # 按前缀分区:prefix/op/func/fmt 互锁校验
[[fb]]              # 15 条:fb_id/name/字段列表(字段名+类型,布局规则 1/2/4/8 对齐)

7. 延后项(阶段 1 不处理)

内容
N1 字节 1 空 4 位用途(待全部编码完后定)
N2 32B 组(0001)操作数形态(JTBL/STR_/ARR_
N3 010 区子 op 2 位扩展策略
N4 字符串/数组操作数区语义
C5 line1 推演重算(阶段 5

8. 参考文档索引

文档 角色
指令编码.md 编码定案(前缀分区/func/fmt 位号/uses_*)——阶段 1 指令部分主依据
指令集清单.md 全指令编码表 + FB 字段布局终稿(§8.1)
指令集优化.md 全部设计定案 + 决策历史(K/U/A/B/C 全闭合)
编译器优化.md 编译侧策略(FB 共享体/max_stack 职责/类型→func 映射)