步骤E:文档收尾——基址寻址落地同步(编译器优化/寄存器码/用例对照/指令与映像/指令集清单/指令执行)

This commit is contained in:
2026-08-27 09:23:12 +08:00
parent 766e3a39b2
commit c53e84f180
6 changed files with 40 additions and 28 deletions
+6 -4
View File
@@ -43,7 +43,7 @@ CMake 目标:`isa``STATIC`),无依赖;`vm` PUBLIC 链 `isa`。公开
| 项 | V2 定案 |
|---|---|
| 指令宽度 | **变长 4/8/16/32B**,长度与形态由**前缀分区**表达 |
| 前缀 | `11`=RR、`10`=NONE、`011`=RRR、`010 000..101`=IMM/SLOT/JMP/JC/CALL/CAL、`0010`=SLOT+off、`0011`=IMM64、`0001`=预留(32B) |
| 前缀 | `11`=RR、`10`=NONE、`011`=RRR、`010 000..101`=IMM/SLOT/JMP/JC/CALL/CAL、`0010`=SLOT+off / RS+off`0011`=IMM64、`0001`=预留(32B) |
| 头部 | 字节 0 = `[前缀+分区\|op]`;字节 1 = `[func:4\|空:4]`(空位延后定) |
| func | 4 位:0..7 = 宽度×符号(1/2/4/8B×有/无)、8=F32、9=F64;无类型指令 = 0 |
| 寄存器 | 编号 8 位(**256 = 寻址上限**),值 int64;**每帧按函数头 nregs 动态分配** |
@@ -86,12 +86,12 @@ CMake 目标:`isa``STATIC`),无依赖;`vm` PUBLIC 链 `isa`。公开
| `010 100` | 8B | CALL | 2 位 | 4 | 前缀直推 |
| `010 101` | 8B | CAL | 2 位 | 4 | 前缀直推 |
| `010 110/111` | 8B | 预留 | 2 位 | 8 | — |
| `0010` | 16B | SLOT+off | 4 位 | 16 | 前缀直推 |
| `0010` | 16B | SLOT+off / RS+off | 4 位 | 16 | 前缀直推 |
| `0011` | 16B | IMM64 | 4 位 | 16 | 前缀直推 |
| `0001` | 32B | 预留(N2 | 4 位 | 16 | — |
- op 按分区独立编号(0 起);取指:读字节 0 → 前缀定长 → 搬整条
- **uses_rd/uses_ra/uses_rb 全部前缀直推**(零查表):RRR 三寄存器全真;RR 的 rd/rsIMM/SLOT/JC/SLOT+off/IMM64 rdJMP/CALL/CAL/NONE 无
- **uses_rd/uses_ra/uses_rb 全部前缀直推**(零查表):RRR 三寄存器全真;RR 的 rd/rsIMM/SLOT/JC/SLOT+off/RS+off/IMM64 rdRS+off 另含 rs(基址寄存器);JMP/CALL/CAL/NONE 无
### 3.2 func 位段(字节 1 高 4 位)
@@ -126,6 +126,7 @@ CMake 目标:`isa``STATIC`),无依赖;`vm` PUBLIC 链 `isa`。公开
| CALL | fn_id32=47..16、pad=63..48**rd 恒 0** |
| CAL | fb_id16=31..16、slot32=63..32**rd 恒 0** |
| SLOT+off | rd=23..16、slot32=55..24、off32=87..56、pad=127..88 |
| RS+off | rd=23..16、rs=31..24(基址寄存器)、off32=87..56、pad=127..88 |
| IMM64 | rd=23..16、imm64=87..24、pad=127..88 |
---
@@ -192,7 +193,8 @@ CMake 目标:`isa``STATIC`),无依赖;`vm` PUBLIC 链 `isa`。公开
- `MOVE rd, rs`RR,func=宽度 0..3):寄存器间按宽度搬运(高位清 0),不管符号/浮点
- `LOAD rd, slot` / `STORE slot, rs`SLOTfunc 全矩阵):槽表[slot].addr → 值区按 func 读/写宽度
- `LOADK rd, const_id`(IMM,func 全矩阵):常量表条目 8B 原始值,按 func 解释
- `LOAD_OFF rd, slot, off` / `STORE_OFF slot, off, rs`SLOT+off):字段访问(结构体/FB 共享体统一
- `LOAD_OFF rd, slot, off` / `STORE_OFF slot, off, rs`SLOT+off):字段访问(绝对实例槽,调用点/输出读用
- `LOAD_PTR rd, rs, off` / `STORE_PTR rd, rs, off`RS+off):**基址寻址**——rs 寄存器 = 值区地址(实例指针),addr+off 直读值区(FB 共享体函数体内字段访问)
### 6.2 逻辑与位运算
+4 -2
View File
@@ -41,7 +41,7 @@
| `010 011` | JC | 8B | rd=23..16、off32=55..24、pad=63..56 | 前缀直推 |
| `010 100` | CALL | 8B | fn_id32=47..16、pad=63..48 | 前缀直推 |
| `010 101` | CAL | 8B | fb_id16=31..16、slot32=63..32 | 前缀直推 |
| `0010` | SLOT+off | 16B | rd=23..16、slot32=55..24、off32=87..56、pad=127..88 | 前缀直推 |
| `0010` | SLOT+off / RS+off | 16B | SLOT+off: rd=23..16、slot32=55..24、off32=87..56RS+off: rd=23..16、rs=31..24、off32=87..56、pad=127..88 | 前缀直推 |
| `0011` | IMM64 | 16B | rd=23..16、imm64=87..24、pad=127..88 | 前缀直推 |
| `0001` | 预留 | 32B | 操作数区 30Bbit 240..16),格式待定 | — |
@@ -112,6 +112,8 @@ bit127 88 bit87 24 bit23 16 bit15 12 bit11 8 bit7 0
| LOADK | 8B | `01000000` | IMM | 全矩阵 0..9 | rd, const_id | 常量表→寄存器(按 func 解释) | 核心 |
| LOAD_OFF | 16B | `00100000` | SLOT+off | 全矩阵 0..9 | rd, slot, off | 字段读(结构体/FB 共享体) | 核心 |
| STORE_OFF | 16B | `00100001` | SLOT+off | 全矩阵 0..9 | slot, off, rs | 字段写 | 核心 |
| LOAD_PTR | 16B | `00101000` | RS+off | 全矩阵 0..9 | rd, rs, off | 基址读(rs 寄存器 = 值区地址 + 偏移;FB 共享体) | 核心 |
| STORE_PTR | 16B | `00101001` | RS+off | 全矩阵 0..9 | rd, rs, off | 基址写 | 核心 |
| LOADK64 | 16B | `00110000` | IMM64 | 全矩阵 0..9 | rd, imm64 | 64 位立即数内嵌(免查表) | 预留 |
## 3. 逻辑与位运算
@@ -270,7 +272,7 @@ bit127 88 bit87 24 bit23 16 bit15 12 bit11 8 bit7 0
| `10` | NONE | 64 | 2 | NOP/RET | 62 |
| `011` | RRR | 32 | 26 | 算术 6 + 逻辑 6 + 移位 4 + 位操作 4 + CMP 6 | 6 |
| `010 000`..`010 101` | IMM/SLOT/JMP/JC/CALL/CAL | 6×4 | 8 | LOADK(1)/LOAD·STORE(2)/JMP(1)/JT·JF(2)/CALL(1)/CAL(1) | 16(含 2 个预留形态区) |
| `0010` | SLOT+off | 16 | 8 | LOAD_OFF/STORE_OFF + 字符串 6 | 8 |
| `0010` | SLOT+off / RS+off | 16 | 10 | LOAD_OFF/STORE_OFF + LOAD_PTR/STORE_PTR + 字符串 6 | 6 |
| `0011` | IMM64 | 16 | 1 | LOADK64 | 15 |
| `0001` | 预留 | 16 | 6 | JTBL + STR_CONCAT/FIND/REPLACE + ARR_LOAD/STORE | 10 |