Commit Graph
84 Commits
Author SHA1 Message Date
Admin 6e8b9896f2 指令集优化:V2 核心决策全部定案(type:5/格式合并/19 类型/禁隐式转换/进制前缀)
- §2.1 字节布局 [len:2|op:6]+[type:5|fmt:3];格式 9→7 形态(CALL→IMM、CAL→SLOT)
- §2.4 19 IEC 基础类型(+DATE/TOD/DT)+13 预留;浮点/进制前缀/禁隐式转换+字面量适配
- §2.6 LOADF 取消、FB 共享体定案(16B 变体=基址寻址)
- §4 改为 A1..A10 尚未确定细节(元数据段/常量内嵌/FB 字段类型化/日期字面量/
  算术语义/sidecar/disasm/machine.toml schema/字面量推断/CALL 确认)
- 编译器优化.md 同步定案状态
2026-08-24 11:19:40 +08:00
Admin 109f9a7619 文档:编译器优化 V2 草案(编译策略层,与指令集优化.md 分层)
- §2 V1 现状:FB 内联/FC CALL/CAL_* 三种调用、短路跳转、固定寄存器分配、
  调用约定、跳转回填、常量表去重
- §3 V2 变更:FB 基址寻址消除内联、type 位段驱动语义、槽表/值区布局职责、
  变长发射字节化回填、类型扩展与升宽规则
- §4 待确认(引用指令集优化 §4 编译器相关项);§5 编译器侧影响面;§6 阶段;§7 决策历史
2026-08-24 10:53:47 +08:00
Admin 3ec803c5a8 文档:指令集优化——补 REAL/LREAL(float/double)、FB/FC 内联现状与 V2 基址寻址方向
- §2.4 类型表 16 种满编(type:4),含 C 对应列;浮点表示/常量 tag/字面量
- §2.7 新增:V1 三种调用处理(FB 内联/FC CALL/CAL_*)+ V2 基址寻址消除内联膨胀
- §3 差异表加 FB 行;§4 待确认加 FB 共享体与浮点字面量;§7 决策历史补记
2026-08-24 10:52:46 +08:00
Admin b70bea6b54 文档:指令集优化 V2 草案(变长指令/槽表值区/IEC 类型扩展/待确认问题)
- 动机:opcode 位域化、8B 定宽槽浪费、类型扩展、结构体预留、变长指令
- 已定案:变长指令(长度组在 opcode)、寄存器 8 位编号维持、槽表→值区
  两级模型、宽度编码进 opcode、初值同文件分段、全 32 位寻址、STATOR2
- 待确认:跳转字节化 / type:4 vs 5 / 长度组映射 / I/Q/M 合并 / 结构体范围
  / ST 层类型支持 / 转换规则 / 字面量
- 影响面清单 + 6 阶段实施计划 + 决策历史
2026-08-24 10:46:25 +08:00
Admin 06a497636e 文档:executor 计划项——可选 --sidecar 参数(显式指定 I/O 绑定文件,缺省回退同名推导) 2026-08-24 09:31:51 +08:00
Admin d109a3ca77 executor: 移除冗余 Image::from 前置校验,信任链统一由 Machine::create 报告 2026-08-24 09:04:46 +08:00
Admin 7aa2bbefcf stb 头字段偏移常量表:消除 vm/compiler 两侧裸魔法数
- vm/Image.cpp:匿名空间 constexpr 偏移常量(kOffMagic..kOffModelId + 段内行偏移),
  from/model_id/model_matches/func_row/const_entry 全部替换
- compiler/Stb.h:同值 inline constexpr 表(Codegen 写侧 + Stb 读侧共用)
- compiler/Codegen.cpp assemble_image:put_* 头字段/行内偏移替换
- compiler/Stb.cpp StbView:读侧偏移替换
- 两侧 static_assert:头大小 = 72 + 型号标识、字段偏移单调、行内布局自洽
2026-08-24 08:55:57 +08:00
Admin d51dce4ae3 CMakePresets: 启用 compile_commands.json 导出(IDE/静态分析用) 2026-08-22 13:13:12 +08:00
Admin 351d6ef40c executor: main 内部步骤块注释补充(参数解析/读映像/信任链/sidecar 路径/回放打开) 2026-08-22 10:45:26 +08:00
Admin afb5d5b94a executor 模块注释完善:Doxygen 风格(main.cpp 入口/usage/Binding/sidecar 解析/采样/单步) 2026-08-21 23:34:07 +08:00
Admin b0aebe264e compiler 模块注释完善:Doxygen 风格(Lexer/Parser/Linker/Typecheck/Project/MachineConfig/TypeInfo/Codec/Codegen/Stb/main 共 21 个文件) 2026-08-21 23:29:15 +08:00
Admin fff7aef968 vm 模块注释完善:Doxygen 风格。
- Image.h/.cpp:头 104 布局逐字段、SHA-256 增量状态机(update/process/final)、
  校验项清单(from)、型号标识契约、func_row/const_entry/data_len 等访问器语义
- Machine.h/.cpp:Fault 枚举逐项、create 校验顺序(解析→SHA→型号)、
  调用约定(r0 结果/r1..r7 实参)、exec_one 取指/计数/分发流程、
  do_call/do_ret 帧语义、do_cal 八 FB 字段布局、slot_get/set 边界契约
2026-08-21 23:21:51 +08:00
Admin 96607cfe75 isa 模块注释完善:Doxygen 风格。
- Types.h:定宽类型、TypeTag、饱和四则的 @brief/@param/@return
- Op.h:Op 枚举冻结约束、OpFormat/OpClass、OpDef/kOpDefs 表、三个查询函数
- Instr.h:指令字布局、pack/拆字段、按形态 enc_* 系列
- Encode.h/.cpp:Decoded 字段语义、encode/decode/disasm 契约
2026-08-21 23:19:08 +08:00
Admin 6873b5ee0b 文档同步:machine.toml 配置驱动架构收尾。
- README.md:依赖方向(STCompiler→compiler 不链 isa)、模块表、isa 归执行器侧、
  数据流图(machine.toml + 型号/SHA)
- isa/README.md:重写——只管指令定义(Types/Op/Instr/Encode),删 Image 部分
- 指令与映像.md:依赖图与 CMake(compiler 不链 isa)
- 编译管线.md:管线首步加载 machine.toml、产物含型号/SHA
- 初步计划.md:12.10/12.13 修订(--machine、依赖方向)
- 扫描周期.md / 指令执行.md:12.9 步骤标注已落地、vm 读校验说明
- compiler/vm/executor README:依赖与边界同步
2026-08-21 22:39:27 +08:00
Admin 1168f5ae30 Merge branch 'dev_ops_config':指令配置(machine.toml)全流程。
- A:OpFormat/OpClass 显式化、machine.toml 落地、MachineConfig 强校验
- B:compiler 配置驱动化去 isa、类型元数据配置化、.stb 写侧(型号标识+SHA-256)
- C:isa 拆出 Image、vm 自读 + 型号/SHA 校验
- D:CLI --machine 接线、测试固化(14/14)、文档同步
2026-08-21 22:36:24 +08:00
Admin 0ebf193ff9 阶段 D 步骤 11:文档同步 + 提交(指令配置全流程收尾)。
- stb文件格式.md:288 字节真实拆解(头 104 含型号标识 STATOR1@0x48、函数表 0x68、
  代码 0x80 fn0 RET=0x21、数据段 0xC8 7 槽、SHA-256 尾 0x100);工具验证与执行器关系更新
- STCompiler使用说明.md:--machine 参数(编译/disasm 必填、打印模式不需要)、
  .stb 加固说明、288 字节示例、当前状态(可编译+可执行+配置驱动)
- 执行器入口.md:读取时型号/SHA 校验拒绝
- ctest 14/14 全绿
2026-08-21 22:35:20 +08:00
Admin 40bfd175c4 阶段 D 步骤 10:测试固化(CLI 级 + 写侧自检)。
- codegen_test line1:compiler::StbView 自检(model_matches STATOR1 + sha_ok),
  篡改一字节 → sha 校验失败
- CTest 新增:cli_compile(--machine 编译退出 0)、cli_missing_machine(缺参 WILL_FAIL)
- 冻结哈希确认:工程哈希只依赖源文件内容(0xc3fe4ae74ad45900 不变,compiler_test 通过)
- 全量 ctest 14/14 全绿(新增 2 个 CLI 用例)
2026-08-21 22:33:14 +08:00
Admin a5f49caa94 阶段 D 步骤 9:CLI 接线收尾(--machine 仅编译/反汇编必填)。
- 打印模式(无 -o)不再要求 --machine(恢复 12.3 行为)
- 编译路径与 --disasm 必填 --machine,加载/校验失败报错退出
- 验证:打印/编译/disasm/缺参四种模式行为正确;ctest 12/12
2026-08-21 22:30:44 +08:00
Admin b13585711a 阶段 C 步骤 8:vm 读侧型号匹配 + SHA-256 校验。
- vm/Image.cpp:执行器侧 SHA-256 实现(与 compiler 各一份)、fill_model_id、
  model_id()/model_matches()/sha_ok();data_len 不含 SHA 尾
- Machine::create:sha256 不匹配 → 'image sha256 mismatch';型号不匹配 →
  'image model mismatch'(内建 kModelName=STATOR/kModelVersion=1),均拒绝
- vm_test:手拼映像填型号(修越界读 bug)+ compiler::sha256 填尾(95 断言);
  新增篡改拒绝(sha256 mismatch)与型号不匹配(重算 SHA 后 model mismatch)用例
- 验证:line1 正常执行 Q=1;篡改一字节 → 执行器 'image sha256 mismatch' 拒绝;ctest 12/12
2026-08-21 22:29:33 +08:00
Admin 5fccbadaa8 阶段 C 步骤 7:isa 拆出 Image,vm 依赖收窄。
- 删 isa/Image.h + Image.cpp(ImageView/FNV/写文件/sidecar 不再属于 isa)
- vm 自实现只读视图 vm/Image.h/cpp:头 104(12.13)/段校验/缺 SHA 尾报错
  (型号匹配与 SHA 校验留步骤 8);Machine 改用 vm::Image + vm::ImageHeader
- executor:本地读文件(替换 isa::read_stb_file)
- 测试:isa_test 删映像/FNV 部分;codegen_test/vm_test 改用 compiler::StbView /
  vm::ConstEntry;vm_test 手拼映像适配新格式(头 104 + 尾 32 占位)
- 验证:line1 编译 288 字节 → BytecodeExecutor 回放 Q 正确;ctest 12/12
2026-08-21 22:24:57 +08:00
Admin a308ae713d 阶段 B 步骤 6:.stb 写侧新格式(头 104 + 型号标识 + SHA-256 文件尾)。
- Stb:kHeaderSize 104、kSha256Size 32;SHA-256 实现(FIPS 180-4,含标准测试向量验证);
  fill_model_id(name+version 拼 32 字节补 '\0');StbView 解析新格式 +
  model_id()/model_matches()/sha_ok()(数据段不含尾、缺尾报错)
- Codegen:assemble_image 写型号标识(偏移 72)+ 文件尾 SHA-256
- main.cpp:--disasm 显示 model/sha;写后自检(ok+sha+型号匹配,失败报错)
- 测试:machine_test +SHA-256 已知向量(空串/abc)与型号标识断言(53 断言);
  codegen_test data_len 断言 +32(SHA 尾);ctest 12/12
- 验证:line1 288 字节 model=STATOR1 sha=ok;篡改一字节 sha=BAD
2026-08-21 22:20:35 +08:00
Admin e187ed7b03 阶段 B 步骤 5:类型元数据配置化(TypeInfo)。
- TypeInfo.h/cpp:TypeMeta(配置别名 + 内建基元解析),查询大小写不敏感;
  提供 width/is_signed/is_float/tag/has_range/value_in_range
- Codegen:layout_data 初值按 type_meta 的基元宽度/浮点写(删除手写宽度分支);
  const_id 的 tag 改查 type_meta
- machine_test:+10 断言(BOOL 1B/range[0,1]/tag0、INT 2B 有符号、TIME 8B、大小写不敏感、未定义空)
- 验收:line1 224 字节 hash 0xc3fe4ae74ad45900 不变、ctest 12/12
2026-08-21 22:16:48 +08:00
Admin 447a8d0119 阶段 B 步骤 4:compiler 配置驱动化,去除 isa 依赖。
- Project.h 自带 IoBinding;Stb.h/cpp:compiler 侧 .stb 规范(常量/ConstEntry/FNV/StbView/读写/sidecar)
- Codec.h/cpp:指令字 pack/字段/配置驱动 disasm(format 表驱动)
- Codegen:opcode 全查 MachineConfig(E_* 发射器)、常量 tag 查配置类型、初值按基元宽度写、
  映像拼装用 Stb 常量;codegen_project 增加 cfg 参数
- main.cpp:--machine <path>(编译/反汇编必填),--disasm 用 StbView+Codec
- CMake:compiler 不再链接 isa(仅 toml++ 私有);测试补链 isa(自身断言用)
- 验证:20 用例字节不变(hash 0xc3fe4ae74ad45900 相同)、ctest 12/12、缺 --machine 报错退出
2026-08-21 22:14:29 +08:00
Admin 44b5ecd46d 阶段 A 步骤 3:MachineConfig 加载层(toml++ + 强校验 5 项)。
- MachineConfig.h/cpp:解析 machine.toml → meta/types/ops/fbs 表
- 强校验:全属性必填、base 命中内建基元、range min≤max、tag 契约(BOOL=0/INT=1/TIME=2 唯一)、
  opcode 唯一 0..255、类别-格式互锁(instance↔CAL)、params 数量与 format 一致、
  fb.opcode 匹配 instance op、fb 字段类型命中 type 表
- 基元内置表(bit/int8..uint64/float32/64,宽度/符号/浮点)
- machine_test:38 断言(正例仓库表 + 9 类负例 + 最小配置),ctest 12/12
2026-08-21 22:09:39 +08:00
Admin 4dab914e7c 阶段 A 步骤 2:machine.toml 落地(meta/type/op/fb)。
- meta:STATOR v1(参与 .stb 型号标识)
- type 3 条:BOOL(uint8, range=[0,1], tag=0) / INT(int16, tag=1) / TIME(int64, tag=2)
- op 34 条:全属性必填,与 kOpDefs 逐条一致(26 PLAIN + 8 INSTANCE=CAL)
- fb 8 条:opcode 与 op 行一致,字段类型命中 type 表
- 核对程序通过:types=3 ops=34 fbs=8 ALL CONSISTENT
2026-08-21 22:07:04 +08:00
Admin 728ed9e71f 指令配置定案更新:最终架构 + .stb 格式冻结修订。
- 指令配置.md 重写:架构图(machine.toml 只给编译器、vm 不读配置、isa 归执行器只管指令)、
  决策清单 9 项、TOML 草案(meta/type 别名+range+tag/op/fb)、类型系统(基元内置+值域+tag)、
  .stb 加固(型号标识[32]+SHA-256 文件尾各实现一份)、强校验清单、加东西流程、8 步执行计划、
  4 项实现前确认
- 指令与映像.md:头 72→104 字节(型号标识[32] 偏移 72)、文件尾 SHA-256[32],12.13 修订注记
- stb文件格式.md:12.13 修订注记(落地后字节数字重新生成)
2026-08-21 22:00:44 +08:00
Admin 35dabf4c3b 步骤 1:OpFormat/OpClass 显式化 + disasm 表驱动。
- Op.h:新增 OpFormat(RR/RRR/IMM/SLOT/JMP/JC/CALL/CAL/NONE)与
  OpClass(Plain/Instance)枚举;34 条编译期表 kOpDefs(name/format/class,
  与 ops.txt 强校验的基准);mnemonic/format/op_class 查表
- Encode.cpp:disasm 按 format 表驱动输出(文本与之前逐条一致)
- 验证:11 个 ctest 全绿;表查询断言(8 个 INSTANCE=CAL、越界哨兵)
2026-08-21 21:13:36 +08:00
Admin 5bcab6791f 指令配置定案:两大分类(PLAIN/INSTANCE)+ FB 注册并入 ops.txt。
- 三层分类:class(操作对象)→ format(操作数形态)→ 参数名(语义)
- op 行加 class 字段(PLAIN 26 条 / INSTANCE 8 条 CAL_*),类别-格式互锁校验
- fb 行登记内建 FB 布局(8 个),cal_opcode 与 op 行强校验一致
- 加 FB = 配置文件一行 + VM 语义 case,编译器免重建;执行计划更新为 7 步
2026-08-21 21:09:23 +08:00
Admin b86a9eaf07 规划指令配置文件(ops.txt):登记唯一事实来源 + 强校验 + 屏蔽机制。
- Doc/isa/指令配置.md:格式(全属性必填)、OpTable(解析+与枚举强校验)、
  各端接线(STCompiler --ops 编译路径必填/屏蔽传导;BytecodeExecutor 可选加载/Disabled 故障)、
  加指令/屏蔽流程、7 步执行计划
- FB 注册并入 ops.txt 列为待讨论(未定案)
- 索引登记
2026-08-21 20:58:17 +08:00
Admin 26256a36b9 扩充内置功能块为 8 个:TON/TOF/TP/CTU/CTD/CTUD/R_TRIG/F_TRIG。
- isa:CAL_* 操作码连续占 24..31(CALL/RET 后移为 32/33,kOpCount=34);disasm 支持 5 个新操作码
- 词法/语法/链接:新 8 个关键字与冻结布局(TP=in/pt/q/et、CTD=cd/ld/pv/q/cv、
  CTUD=cu/cd/r/lu/pv/qu/qd/cv、R_TRIG/F_TRIG=clk/q)
- VM:do_cal 全 8 个语义(TP 脉冲、CTD 递减、CTUD 双向+装载、R_TRIG 上升沿、F_TRIG 下降沿);
  edge_prev_ 每槽 2 字节存边沿上次输入;exec_one 分发补 5 个新操作码
- 验证:TP 30ms 脉冲 2 周期、CTD 装载+递减到 q=1、CTUD cu/cd 双向、R/F_TRIG 交替;
  ctest 11/11 全绿
- 文档:指令与映像/词法/初步计划/符号表与链接/指令执行/扫描周期/使用说明 同步
2026-08-21 20:38:27 +08:00
Admin 66d9c6c548 12.11 闭环:二十用例点亮 + 单步观察。
- cases_test:tests/cases/01..20 逐一跑完整管线(解析→链接→类型→码→VM 周期),
  按 EXPECTED.md 期望断言:13 正例运行通过(含双周期可重复)、06 CycleLimit、6 负例报错类别
- BytecodeExecutor --step:采样 I → 逐指令打印 pc/fn/反汇编 + 执行后非零寄存器 → I/Q
- Machine 补 header()/ended()/nregs()/cur_instr() 观察接口
- ctest 11/11(cases_all 20 用例点亮);line1 回放 0/1 组合 Q 正确、单步 I=[0 1]→Q=[1]
2026-08-21 20:31:14 +08:00
Admin 00565f035d 12.10 双可执行接线:编译产出 sidecar,BytecodeExecutor 跑周期。
- STCompiler -o:另写 <name>.runtime.toml(io 绑定 var→槽号→channel/bit,槽号来自链接结果)
- BytecodeExecutor <name>.stb [--cycles N] [--replay <file>]:加载 .stb + sidecar,
  逐周期采样 I(回放行按 io.input 顺序)→ 跑周期 → 打印 I/Q;故障打印 FAULT 退出码 1
- 手写 sidecar 解析(冻结 TOML 子集);Machine 暴露 header()(dt_ms/cycle_limit)
- 验证:line1 回放 0/1 组合 Q 正确(急停/start 语义)、用例 06 CycleLimit FAULT;ctest 10/10
2026-08-21 20:26:28 +08:00
Admin 8c0fc4fe98 12.9 步骤 6:vm_test 固化(手工映像 + 编译器产物 + 确定性)。
- 手工映像:标量/跳转/数据区、CALL/RET 帧复制(r1/r2 实参 → r0 结果)、自调用 StackOverflow、越界槽 BadSlot、坏常量 BadConst
- 编译器产物:用例 01~09/13/15/17/18/20 跑周期断言(TON 第 3 周期 q=1、line1 真值表 4 组)
- 用例 06 CycleLimit;确定性:同一 I 序列两遍数据区逐字节一致
- step 单步:停在指令边界、cycle_count/regs 逐步核对
- ctest 10/10(vm_cycles 84 断言)
2026-08-21 20:22:36 +08:00
Admin ada9e5f99e 12.9 步骤 4:定时器 CAL_TON/CAL_TOF/CAL_CTU。
- do_cal:内建布局冻结(TON/TOF: in/pt/q/et、CTU: cu/r/pv/q/cv,字段=槽序号×8)
- TON:in 真 → et+=dt(到 pt 停)、q=et≥pt;假 → 清零
- TOF:in 真 → q=1/et=0;掉电 → et+=dt、et≥pt → q=0
- CTU:cu 上升沿(ctu_prev_ 跨周期)→ cv+1;r 复位;q=cv≥pv
- 抽 slot_get/slot_set 复用(exec_one 的 LOAD/STORE 同步重构)
- 验证:TON 3 周期到 q=1、TOF 掉电延时 2 周期、CTU 交替上升沿到 cv=3、复位;line1 三组 I 组合 Q 正确 + 确定性两遍一致
2026-08-21 20:20:26 +08:00
Admin a84a1a62ce 12.9 步骤 3:CALL/RET 帧栈与故障。
- do_call:压新帧(nregs 分配、复制 r0..r7、记 ret_pc/ret_fn_id)→ pc=0;fn_id 越界 BadOp、深度≥64 StackOverflow
- do_ret:复制 r0..r7 回调用方(r0=结果)→ 弹栈 → pc=ret_pc;MAIN 的 RET = 周期结束
- 验证:用例 13 x=Add(3,4)=7、双周期帧保留;手拼自调用映像触发 StackOverflow(深度 64 后清栈)
2026-08-21 20:17:55 +08:00
Admin efe4dd1a2c 12.9 步骤 2:VM 译码 switch(标量/跳转/LOAD-STORE)。
- Machine.cpp:create(拷贝数据段+建 MAIN 帧)、run_cycle、step、exec_one
- 标量:MOVE/LOADK(常量表 tag 定值表示)/NOT/AND/OR/四则饱和/CMP 全宽比较
- 跳转:JMP/JT/JF(相对下一条);LOAD/STORE:slot×8 定宽槽,BadSlot 校验
- 寄存器越界检查按指令形态(a|b 作偏移/槽号/常量 id 时不查)
- 修:ImageView 默认构造公开(无效态)、Codegen 两个编译警告
- 冒烟:用例 02/04/07/05 跑通、06 触发 CycleLimit、step 单步
2026-08-21 20:16:28 +08:00
Admin 815eb87a46 12.9 步骤 1:VM 头文件(API、Fault 枚举、帧结构)。
- Machine.h:create/run_cycle + 可观察性(step/pc/fn_id/cycle_count/call_depth/data/reg)
- Fault:None/CycleLimit/StackOverflow/BadOp/BadSlot/BadConst
- 帧 { fn_id, regs[nregs], ret_pc, ret_fn_id },调用栈深度 64,MAIN 帧跨周期保留
- ctu_prev_ 预留(步骤 4);exec_one/do_call/do_ret/do_cal 桩
2026-08-21 20:12:43 +08:00
Admin ce948451e0 12.9 步骤 0:数据段改 8 字节定宽槽(方案 a)。
- 指令与映像.md / 寄存器码.md:slot 语义 = 槽号(数据偏移 = 槽号 × 8),取消变宽对齐与 global_offset 映射
- Codegen.cpp:删除 width_of/align_up/global_offsets_;layout_data/layout_fb_instances 按槽号布局(字段 = 槽序号)
- stb文件格式.md:line1 真实字节更新(224B、56B 数据段、starter 槽 4/5/6)
- codegen_test:断言更新(槽号化 + 数据区字节数),189 断言 9/9 全绿
2026-08-21 20:01:21 +08:00
Admin cd417cd27b 12.9 执行计划写进扫描周期.md。
- 步骤 0:数据段 8 字节定宽槽(方案 a)——文档/codegen/测试三处落地
- 步骤 1~7:Machine.h API、译码 switch、CALL/RET 帧栈与故障、
  定时器 Δt 推进、可观察性基础、vm_test(用例 06/17/18/20 + 确定性)、验证提交
- 指令执行语义指向指令执行.md
2026-08-21 19:58:03 +08:00
Admin 3c42a72e86 新增指令执行流程文档(12.9 前置)。
- Doc/vm/指令执行.md:执行模型、帧/调用栈(CALL/RET 复制 r0..r7)、值表示约定、
  8 字节定宽槽访问、29 条指令执行表、跳转语义、cycle_limit 计数、
  CAL_TON/TOF/CTU Δt 推进、五类故障
- line1 MAIN 逐指令推演(I0_0=1、stop=0、急停=0 → Q0_0=1,对照真值表)
- 索引登记
2026-08-21 19:50:39 +08:00
Admin ffb64d2063 使用说明补充 --disasm 反汇编用法。 2026-08-21 13:55:47 +08:00
Admin b18fd6014c STCompiler 加 --disasm:反汇编已编译的 .stb。
- STCompiler <name>.stb --disasm:读映像 → 校验 → 打印段摘要 + 函数表逐条反汇编(文件绝对偏移)+ 常量表 + 数据段 hex
- 映像无符号表,按 fn_id/槽号显示;损坏/缺失文件报错退出码 1
- 验证:line1.stb 完整反汇编(17 条 MAIN 指令)与损坏文件拒绝
2026-08-21 13:49:06 +08:00
Admin 17c62f0a1f 新增 .stb 映像文件结构说明(line1 真实字节拆解)。
- Doc/isa/stb文件格式.md:段布局图、17 字段头表、常量/函数/字节码/FB/数据各段
- 用 line1.stb(184 字节)逐段核对实际值:函数表 2 行、MAIN 指令字节、数据段全局+实例块
- 标注与执行器的关系(sidecar 不含在映像);索引与 isa README 登记
2026-08-21 13:40:20 +08:00
Admin eb6829b9b9 新增 STCompiler 使用说明文档。
- 构建 / 用法(-o 产出 .stb)/ 退出码 / line1 示例
- project.toml 字段表、ST 子集支持范围与 v1 限制清单
- 编译管线五类错误前缀与示例;样例与测试索引;当前状态
- compiler/README 与 Doc/索引 登记
2026-08-21 11:55:36 +08:00
Admin 6f5e8ef755 Merge branch 'dev_RegisterEncoding' into dev 2026-08-21 11:54:19 +08:00
Admin 0a42d5876e STCompiler 接线完整编译管线:-o 产出 .stb。
- STCompiler <project.toml> -o <name>.stb:读 .st → 链接 → 类型检查 → 寄存器码 → 写映像
- 无 -o 保留 12.3 行为(打印文件集合与哈希)
- 验证:line1 编译出 184 字节 .stb(2 函数 4 全局);负例 10/14/19 按期望报错退出码 1
2026-08-21 11:54:02 +08:00
Admin 0263813a8f 12.8 切片 7:FB 实例块、用户 FB 内联、CAL_TON/TOF/CTU。
- FB 实例 → 数据区实例块(字段地址 = 基址+偏移,编译期算死;跨周期持久)
- 用户 FB 调用点内联展开(实参写字段 → FB 体以实例字段为变量编译)
- 内建 TON/TOF/CTU:实参写字段 → CAL_* <实例偏移>;FB 生成空函数占位保持 fn_id
- codegen_test:189 断言(用例 15 内联序列、17 CAL_TON 字段偏移、18 TOF/CTU、line1 全链路 LOAD_I/STORE_Q),ctest 9/9
- 20 用例扫描:14 正例全部出映像,6 负例按期望在前层拒绝
2026-08-21 11:52:25 +08:00
Admin 0a36e36b16 12.8 切片 6:FUNCTION 与 CALL,冻结调用约定。
- 调用约定(冻结进 isa 规格与 12.8 文档):结果 r0、参数 r1..r7(最多 7 输入、函数内只读)、
  变量与临时全部从 r8 起;CALL/RET 时 VM 复制 r0..r7(12.9 实现)
- 调用点:实参求值到 r8+ 临时 → MOVE r(1+i) → CALL fn_id → MOVE rd, r0
- 函数名赋值 = 写 r0(结果);写函数输入 → codegen error
- codegen_test:134 断言(用例 13 两函数 CALL 序列;既有用例帧基址迁移 r8 起),ctest 9/9
2026-08-21 11:48:33 +08:00
Admin 31ba557627 12.8 切片 5:WHILE 回环与四则运算。
- WHILE 编成 L_loop: <cond→t> JF t, L_end <body> JMP L_loop L_end:,JF/JMP 双回填
- 四则 ADD/SUB/MUL/DIV(用例 5 循环体自增需要,同模式实现,用例 7 顺带点亮)
- codegen_test:115 断言(用例 05 回环 JMP -8、07 四则+比较、08 TIME 常量表),ctest 9/9
2026-08-21 11:45:32 +08:00
Admin 6f1bf61c7f 12.8 切片 4:CMP_* 与 IF/ELSIF/ELSE 跳转。
- CMP_xx:两侧求值到临时后比较;IF 编成 <cond→t> JF t, L_next <body> JMP L_end 链
- 分支尾部 JMP 与条件 JF 双回填;无 else 时末分支 JF 直接落 L_end
- codegen_test:89 断言(用例 04 完整跳转序列),ctest 9/9
2026-08-21 11:43:23 +08:00