指令编码:010 区也改前缀分区(形态位3+子op2),全部形态前缀直推、零查表
- 010 000/001/010/011/100/101 = IMM/SLOT/JMP/JC/CALL/CAL - 8 条指令编码更新:LOADK=01000000、LOAD=01000100、STORE=01000101、 JMP=01001000、JT=01001100、JF=01001101、CALL=01010000、CAL=01010100 - uses_* 全部前缀直推(无查表);三份文档同步 - 010 区预算:6 形态区 × 4 + 2 预留形态区
This commit is contained in:
+26
-19
@@ -6,13 +6,13 @@
|
||||
|
||||
## 编码规则摘要(详见指令编码.md)
|
||||
|
||||
- **字节 0** = 长度前缀 + 形态分区 + 主操作码:`11`/`10`+op:6(4B)、`011`/`010`+op:5(8B)、`0010`/`0011`+op:4(16B)、`0001`+op:4(32B)
|
||||
- **字节 0** = 长度前缀 + 形态分区 + 主操作码:`11`/`10`+op:6(4B)、`011`/`010 xxx`+op:2(8B)、`0010`/`0011`+op:4(16B)、`0001`+op:4(32B)
|
||||
- **字节 1** = `[func:4 | 空:4]`(空位待全部编码后定)
|
||||
- **形态由前缀分区表达**(fmt 位段已取消):`11`=RR、`10`=NONE、`011`=RRR、`010`=其他 8 条(查表)、`0010`=SLOT+off、`0011`=IMM64
|
||||
- **形态由前缀分区表达**(fmt 位段已取消,零查表):`11`=RR、`10`=NONE、`011`=RRR、`010 000/001/010/011/100/101`=IMM/SLOT/JMP/JC/CALL/CAL、`0010`=SLOT+off、`0011`=IMM64
|
||||
- **func**(语义随 op):0..7 = 宽度×符号(1B无/1B有/2B无/2B有/4B无/4B有/8B无/8B有)、8=F32、9=F64、`—`=无类型(编码 0 保留)
|
||||
- disasm 按 func 显示类型后缀(A7 定案):func=3 → `LOAD.I16 r5, s3`
|
||||
- 无类型指令(跳转/调用/RET/NOP/CAL)func 编码为 0(不使用)
|
||||
- 010 区 8 条(LOADK/LOAD/STORE/JMP/JT/JF/CALL/CAL)形态查表:见指令编码.md §5
|
||||
- 010 区 8 条(LOADK/LOAD/STORE/JMP/JT/JF/CALL/CAL)形态由前缀分区直推:见指令编码.md §5
|
||||
|
||||
|
||||
|
||||
@@ -23,7 +23,7 @@
|
||||
|
||||
| 字段 | 位号 | 说明 |
|
||||
|---|---|---|
|
||||
| 长度前缀+形态分区 | 4B: bit7..6(`11`=RR / `10`=NONE);8B: bit7..5(`011`=RRR / `010`=其他);16B: bit7..4(`0010`=SLOT+off / `0011`=IMM64);32B: bit7..4(`0001`=预留) | 长度与形态分区一体 |
|
||||
| 长度前缀+形态分区 | 4B: bit7..6(`11`=RR / `10`=NONE);8B: bit7..5(`011`=RRR / `010`=其他 6 形态分区:bit4..2 形态位 + bit1..0 子 op);16B: bit7..4(`0010`=SLOT+off / `0011`=IMM64);32B: bit7..4(`0001`=预留) | 长度与形态分区一体 |
|
||||
| opcode | 4B: bit5..0 / 8B: bit4..0 / 16B: bit3..0 / 32B: bit3..0 | 分区内独立编号(0 起) |
|
||||
| func | bit15..12 | 功能细节(宽度×符号/浮点),语义随 op |
|
||||
| (空) | bit11..8 | 待全部指令编码完后决定用途 |
|
||||
@@ -35,7 +35,12 @@
|
||||
| `11` | RR | 4B | rd=23..16、rs=31..24 | 前缀直推 |
|
||||
| `10` | NONE | 4B | pad=31..16 | 前缀直推 |
|
||||
| `011` | RRR | 8B | rd=23..16、rs1=31..24、rs2=39..32、pad=63..40 | 前缀直推 |
|
||||
| `010` | IMM/SLOT/JMP/JC/CALL/CAL | 8B | 8 条查表(指令编码.md §5) | **op 查表** |
|
||||
| `010 000` | IMM | 8B | rd=23..16、imm32=55..24、pad=63..56 | 前缀直推 |
|
||||
| `010 001` | SLOT | 8B | rd=23..16、slot32=55..24、pad=63..56 | 前缀直推 |
|
||||
| `010 010` | JMP | 8B | off32=47..16、pad=63..48 | 前缀直推 |
|
||||
| `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 | 前缀直推 |
|
||||
| `0011` | IMM64 | 16B | rd=23..16、imm64=87..24、pad=127..88 | 前缀直推 |
|
||||
| `0001` | 预留 | 32B | 操作数区 30B(bit 240..16),格式待定 | — |
|
||||
@@ -67,12 +72,14 @@ bit63 40 bit39 32 bit31 24 bit23 16 bit15 12 bit11 8 bit7
|
||||
└─────────────────┴──────────┴──────────┴──────────┴─────────┴───────┴───────────┘
|
||||
```
|
||||
|
||||
**010 区(8B = bit63..0)**:形态查表(指令编码.md §5)——IMM/SLOT/JMP/JC/CALL/CAL 六种操作数布局:
|
||||
**010 区(8B = bit63..0)**:前缀 `010` + 3 位形态位(bit4..2)+ 2 位子 op(bit1..0)——形态全部直推:
|
||||
```text
|
||||
IMM/SLOT: rd=23..16、imm32|slot32=55..24、pad=63..56
|
||||
JMP/CALL: off32|fn_id32=47..16、pad=63..48
|
||||
JC: rd=23..16、off32=55..24、pad=63..56
|
||||
CAL: fb_id16=31..16、slot32=63..32
|
||||
IMM(010000): rd=23..16、imm32=55..24、pad=63..56
|
||||
SLOT(010001): rd=23..16、slot32=55..24、pad=63..56
|
||||
JMP(010010): off32=47..16、pad=63..48
|
||||
JC(010011): rd=23..16、off32=55..24、pad=63..56
|
||||
CALL(010100): fn_id32=47..16、pad=63..48
|
||||
CAL(010101): fb_id16=31..16、slot32=63..32
|
||||
```
|
||||
|
||||
**SLOT+off(前缀 `0010`,16B = bit127..0)**
|
||||
@@ -100,8 +107,8 @@ bit127 88 bit87 24 bit23 16 bit15 12 bit11 8 bit7 0
|
||||
| 指令 | 组 | 字节0 编码 | fmt | func | 操作数 | 语义 | 状态 |
|
||||
|---|---|---|---|---|---|---|---|
|
||||
| MOVE | 4B | `11000000` | RR | 宽度:0=1B/1=2B/2=4B/3=8B | rd, rs | 寄存器搬运(只搬宽度,不管符号/浮点) | 核心 |
|
||||
| LOAD | 8B | `01000001` | SLOT | 全矩阵 0..9 | rd, slot | 槽→寄存器(按 func 读宽+扩展) | 核心 |
|
||||
| STORE | 8B | `01000010` | SLOT | 全矩阵 0..9 | slot, rs | 寄存器→槽(按 func 写宽) | 核心 |
|
||||
| LOAD | 8B | `01000100` | SLOT | 全矩阵 0..9 | rd, slot | 槽→寄存器(按 func 读宽+扩展) | 核心 |
|
||||
| STORE | 8B | `01000101` | SLOT | 全矩阵 0..9 | slot, rs | 寄存器→槽(按 func 写宽) | 核心 |
|
||||
| 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 | 字段写 | 核心 |
|
||||
@@ -179,12 +186,12 @@ bit127 88 bit87 24 bit23 16 bit15 12 bit11 8 bit7 0
|
||||
|
||||
| 指令 | 组 | 字节0 编码 | fmt | func | 操作数 | 语义 | 状态 |
|
||||
|---|---|---|---|---|---|---|---|
|
||||
| JMP | 8B | `01000011` | JMP | — | off32 | 无条件跳转(相对下一条,字节) | 核心 |
|
||||
| JT | 8B | `01000100` | JC | — | rd, off | rd≠0 跳转 | 核心 |
|
||||
| JF | 8B | `01000101` | JC | — | rd, off | rd==0 跳转 | 核心 |
|
||||
| CALL | 8B | `01000110` | CALL | — | fn_id | 压帧调用(r0..r7 复制) | 核心 |
|
||||
| JMP | 8B | `01001000` | JMP | — | off32 | 无条件跳转(相对下一条,字节) | 核心 |
|
||||
| JT | 8B | `01001100` | JC | — | rd, off | rd≠0 跳转 | 核心 |
|
||||
| JF | 8B | `01001101` | JC | — | rd, off | rd==0 跳转 | 核心 |
|
||||
| CALL | 8B | `01010000` | CALL | — | fn_id | 压帧调用(r0..r7 复制) | 核心 |
|
||||
| RET | 4B | `10000001` | NONE | — | — | 弹帧 / MAIN 周期结束 | 核心 |
|
||||
| CAL | 8B | `01000111` | CAL | — | fb_id, slot | 内建 FB 调用(fb_id 查 [[fb]] 表) | 核心 |
|
||||
| CAL | 8B | `01010100` | CAL | — | fb_id, slot | 内建 FB 调用(fb_id 查 [[fb]] 表) | 核心 |
|
||||
| JTBL | 32B | `00010000` | 预留 | — | rd, slot, n | CASE 跳转表 | 预留 |
|
||||
|
||||
## 8. 内建 FB(CAL + fb_id,[[fb]] 表)
|
||||
@@ -241,10 +248,10 @@ bit127 88 bit87 24 bit23 16 bit15 12 bit11 8 bit7 0
|
||||
| `11` | RR | 64 | 21 | MOVE/NOT/NEG/ABS/INC/DEC/浮点单目 10/舍入 4/CONV | 43 |
|
||||
| `10` | NONE | 64 | 2 | NOP/RET | 62 |
|
||||
| `011` | RRR | 32 | 26 | 算术 6 + 逻辑 6 + 移位 4 + 位操作 4 + CMP 6 | 6 |
|
||||
| `010` | 其他(查表) | 32 | 8 | LOADK/LOAD/STORE/JMP/JT/JF/CALL/CAL | 24 |
|
||||
| `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 |
|
||||
| `0011` | IMM64 | 16 | 1 | LOADK64 | 15 |
|
||||
| `0001` | 预留 | 16 | 6 | JTBL + STR_CONCAT/FIND/REPLACE + ARR_LOAD/STORE | 10 |
|
||||
|
||||
> 编码约定:op 按分区独立编号;无类型指令 func=0;010 区形态查表(指令编码.md §5);
|
||||
> 编码约定:op 按分区独立编号;无类型指令 func=0;010 区形态由前缀分区直推(指令编码.md §5);
|
||||
> 字符串/数组的具体操作数形态在实现时定稿(`0001` 区)。
|
||||
|
||||
Reference in New Issue
Block a user