Files
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

65 lines
2.7 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# isa
**归执行器侧**,只管指令定义。CMake 目标:`isa``STATIC`),无依赖;被 `vm` 依赖。
`compiler` **不依赖 isa**——指令 opcode / 类型元数据 / FB 布局全部来自 `compiler/machine.toml`(见 [`指令配置.md`](../doc/isa/指令配置.md))。`.stb` 映像读写由 `compiler`(写侧)与 `vm`(读侧)**各自实现**。
```text
STCompiler → compiler (编码查 machine.toml,自带 .stb 写)
BytecodeExecutor → vm → isa isa 只管指令;vm 自带 .stb 读)
```
**操作码、指令字以** [`doc/isa/指令与映像.md`](../doc/isa/指令与映像.md) **为准。** 头文件实现该文,本 README 不另当规范。`.stb` 结构拆解见 [`doc/isa/stb文件格式.md`](../doc/isa/stb文件格式.md)。指令/类型/FB 登记见 [`doc/isa/指令配置.md`](../doc/isa/指令配置.md)。
公开头:`isa/include/isa/`
---
## 做 / 不做
**做:** 操作码与 32-bit 指令字、`BOOL`/`INT`/`TIME` 定宽与饱和、编解码、一条指令的文本转储。
**不做:** 映像读写(compiler/vm 各自实现)、toml/关键字/符号表/AST、VM 执行 switch(在 `vm`)、扫描周期、I/O 采样。
---
## 目录与 CMake
```text
isa/
CMakeLists.txt
README.md
include/isa/
Types.h # 宽度、饱和
Op.h # 操作码枚举 + OpFormat/OpClass + kOpDefs 表 + 助记符
Instr.h # 32-bit 打包/拆字段(inline
Encode.h # encode / decode / disasm
src/
Encode.cpp
```
```cmake
add_library(isa STATIC src/Encode.cpp)
target_include_directories(isa PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/include)
```
`vm``target_link_libraries(vm PUBLIC isa)``compiler` 不链 `isa`
---
## 实现说明
- **`Types.h`**`Bool` = `uint8_t``Int` = `int16_t``Time` = `int64_t`(毫秒,理由见规范文);`sat_add/sub/mul/div`(饱和规则见规范文);`TypeTag`0/1/2`.stb` 常量表契约)
- **`Op.h`**`enum Op : uint8_t`(数值即编码,与 `machine.toml` 强校验一致);`OpFormat`RR/RRR/IMM/SLOT/JMP/JC/CALL/CAL/NONE)与 `OpClass`Plain/Instance);34 条 `kOpDefs{ name, format, cls }``mnemonic/format/op_class` 查表
- **`Encode.cpp`**`encode/decode` 往返 + `disasm`(按 format 表驱动,文本与规范文一致)
## 测试
`tests/isa_test`(链 `isa`):饱和、操作码冻结值、指令打包、encode/decode 往返、disasm 文本、OpClass 分类。
## 验收
- `cmake --build` 过;`ctest` 过(`isa_roundtrip` 等 14 个用例全绿)
- `vm``#include <isa/...>``compiler` 不引用 `isa`
- 操作码有变:先改 `compiler/machine.toml` + 本目录 + 测试,再改两端