docs: 增加 SnowVM-OpCode.md

This commit is contained in:
Luke 2025-06-28 16:49:12 +08:00
parent b2d7d493d5
commit 4f98e4d6a3
2 changed files with 228 additions and 0 deletions

View File

@ -72,6 +72,8 @@ Snow 语言受到 LLM 驱动代码生成趋势的启发,强调简单而清晰的
[Git 管理规范](docs/Snow-Lang-Git-Management/Snow-Lang-Git-Management.md) [Git 管理规范](docs/Snow-Lang-Git-Management/Snow-Lang-Git-Management.md)
[]
[Snow-Lang GraalVM AOT 打包指南](docs/Snow-Lang-GraalVM-AOT-Native-Image-Package/Snow-Lang-GraalVM-AOT-Native-Image-Package.md) [Snow-Lang GraalVM AOT 打包指南](docs/Snow-Lang-GraalVM-AOT-Native-Image-Package/Snow-Lang-GraalVM-AOT-Native-Image-Package.md)
## 开发计划 ## 开发计划

View File

@ -0,0 +1,226 @@
# SnowVM-OpCode
## 1. Byte8 区域0x0000-0x001F
| 指令名 | 十六进制 | 说明 |
|----------|--------|----------------|
| B\_ADD | 0x0000 | byte8 加法 |
| B\_SUB | 0x0001 | byte8 减法 |
| B\_MUL | 0x0002 | byte8 乘法 |
| B\_DIV | 0x0003 | byte8 除法 |
| B\_MOD | 0x0004 | byte8 取余 |
| B\_NEG | 0x0005 | byte8 取负 |
| B\_INC | 0x0006 | byte8 自增 |
| B\_AND | 0x0007 | byte8 按位与 |
| B\_OR | 0x0008 | byte8 按位或 |
| B\_XOR | 0x0009 | byte8 按位异或 |
| B\_PUSH | 0x000A | byte8 入栈 |
| B\_LOAD | 0x000B | byte8 本地变量加载 |
| B\_STORE | 0x000C | byte8 本地变量存储 |
| B\_CE | 0x000D | byte8 等于条件判断 |
| B\_CNE | 0x000E | byte8 不等于条件判断 |
| B\_CG | 0x000F | byte8 大于条件判断 |
| B\_CGE | 0x0010 | byte8 大于等于条件判断 |
| B\_CL | 0x0011 | byte8 小于条件判断 |
| B\_CLE | 0x0012 | byte8 小于等于条件判断 |
---
## 2. Short16 区域0x0020-0x003F
| 指令名 | 十六进制 | 说明 |
|----------|--------|------------------|
| S\_ADD | 0x0020 | short16 加法 |
| S\_SUB | 0x0021 | short16 减法 |
| S\_MUL | 0x0022 | short16 乘法 |
| S\_DIV | 0x0023 | short16 除法 |
| S\_MOD | 0x0024 | short16 取余 |
| S\_NEG | 0x0025 | short16 取负 |
| S\_INC | 0x0026 | short16 自增 |
| S\_AND | 0x0027 | short16 按位与 |
| S\_OR | 0x0028 | short16 按位或 |
| S\_XOR | 0x0029 | short16 按位异或 |
| S\_PUSH | 0x002A | short16 入栈 |
| S\_LOAD | 0x002B | short16 本地变量加载 |
| S\_STORE | 0x002C | short16 本地变量存储 |
| S\_CE | 0x002D | short16 等于条件判断 |
| S\_CNE | 0x002E | short16 不等于条件判断 |
| S\_CG | 0x002F | short16 大于条件判断 |
| S\_CGE | 0x0030 | short16 大于等于条件判断 |
| S\_CL | 0x0031 | short16 小于条件判断 |
| S\_CLE | 0x0032 | short16 小于等于条件判断 |
---
## 3. Int32 区域0x0040-0x005F
| 指令名 | 十六进制 | 说明 |
|----------|--------|----------------|
| I\_ADD | 0x0040 | int32 加法 |
| I\_SUB | 0x0041 | int32 减法 |
| I\_MUL | 0x0042 | int32 乘法 |
| I\_DIV | 0x0043 | int32 除法 |
| I\_MOD | 0x0044 | int32 取余 |
| I\_NEG | 0x0045 | int32 取负 |
| I\_INC | 0x0046 | int32 自增 |
| I\_AND | 0x0047 | int32 按位与 |
| I\_OR | 0x0048 | int32 按位或 |
| I\_XOR | 0x0049 | int32 按位异或 |
| I\_PUSH | 0x004A | int32 入栈 |
| I\_LOAD | 0x004B | int32 本地变量加载 |
| I\_STORE | 0x004C | int32 本地变量存储 |
| I\_CE | 0x004D | int32 等于条件判断 |
| I\_CNE | 0x004E | int32 不等于条件判断 |
| I\_CG | 0x004F | int32 大于条件判断 |
| I\_CGE | 0x0050 | int32 大于等于条件判断 |
| I\_CL | 0x0051 | int32 小于条件判断 |
| I\_CLE | 0x0052 | int32 小于等于条件判断 |
---
## 4. Long64 区域0x0060-0x007F
| 指令名 | 十六进制 | 说明 |
|----------|--------|-----------------|
| L\_ADD | 0x0060 | long64 加法 |
| L\_SUB | 0x0061 | long64 减法 |
| L\_MUL | 0x0062 | long64 乘法 |
| L\_DIV | 0x0063 | long64 除法 |
| L\_MOD | 0x0064 | long64 取余 |
| L\_NEG | 0x0065 | long64 取负 |
| L\_INC | 0x0066 | long64 自增 |
| L\_AND | 0x0067 | long64 按位与 |
| L\_OR | 0x0068 | long64 按位或 |
| L\_XOR | 0x0069 | long64 按位异或 |
| L\_PUSH | 0x006A | long64 入栈 |
| L\_LOAD | 0x006B | long64 本地变量加载 |
| L\_STORE | 0x006C | long64 本地变量存储 |
| L\_CE | 0x006D | long64 等于条件判断 |
| L\_CNE | 0x006E | long64 不等于条件判断 |
| L\_CG | 0x006F | long64 大于条件判断 |
| L\_CGE | 0x0070 | long64 大于等于条件判断 |
| L\_CL | 0x0071 | long64 小于条件判断 |
| L\_CLE | 0x0072 | long64 小于等于条件判断 |
---
## 5. Float32 区域0x0080-0x009F
| 指令名 | 十六进制 | 说明 |
|----------|--------|------------------|
| F\_ADD | 0x0080 | float32 加法 |
| F\_SUB | 0x0081 | float32 减法 |
| F\_MUL | 0x0082 | float32 乘法 |
| F\_DIV | 0x0083 | float32 除法 |
| F\_MOD | 0x0084 | float32 取余 |
| F\_NEG | 0x0085 | float32 取负 |
| F\_INC | 0x0086 | float32 自增 |
| F\_PUSH | 0x0087 | float32 入栈 |
| F\_LOAD | 0x0088 | float32 本地变量加载 |
| F\_STORE | 0x0089 | float32 本地变量存储 |
| F\_CE | 0x008A | float32 等于条件判断 |
| F\_CNE | 0x008B | float32 不等于条件判断 |
| F\_CG | 0x008C | float32 大于条件判断 |
| F\_CGE | 0x008D | float32 大于等于条件判断 |
| F\_CL | 0x008E | float32 小于条件判断 |
| F\_CLE | 0x008F | float32 小于等于条件判断 |
---
## 6. Double64 区域0x00A0-0x00BF
| 指令名 | 十六进制 | 说明 |
|----------|--------|-------------------|
| D\_ADD | 0x00A0 | double64 加法 |
| D\_SUB | 0x00A1 | double64 减法 |
| D\_MUL | 0x00A2 | double64 乘法 |
| D\_DIV | 0x00A3 | double64 除法 |
| D\_MOD | 0x00A4 | double64 取余 |
| D\_NEG | 0x00A5 | double64 取负 |
| D\_INC | 0x00A6 | double64 自增 |
| D\_PUSH | 0x00A7 | double64 入栈 |
| D\_LOAD | 0x00A8 | double64 本地变量加载 |
| D\_STORE | 0x00A9 | double64 本地变量存储 |
| D\_CE | 0x00AA | double64 等于条件判断 |
| D\_CNE | 0x00AB | double64 不等于条件判断 |
| D\_CG | 0x00AC | double64 大于条件判断 |
| D\_CGE | 0x00AD | double64 大于等于条件判断 |
| D\_CL | 0x00AE | double64 小于条件判断 |
| D\_CLE | 0x00AF | double64 小于等于条件判断 |
---
## 7. 类型转换0x00C0-0x00DF
| 指令名 | 十六进制 | 说明 |
|-----|--------|--------------------|
| B2S | 0x00C0 | byte8 转 short16 |
| B2I | 0x00C1 | byte8 转 int32 |
| B2L | 0x00C2 | byte8 转 long64 |
| B2F | 0x00C3 | byte8 转 float32 |
| B2D | 0x00C4 | byte8 转 double64 |
| S2B | 0x00C5 | short16 转 byte8 |
| S2I | 0x00C6 | short16 转 int32 |
| S2L | 0x00C7 | short16 转 long64 |
| S2F | 0x00C8 | short16 转 float32 |
| S2D | 0x00C9 | short16 转 double64 |
| I2B | 0x00CA | int32 转 byte8 |
| I2S | 0x00CB | int32 转 short16 |
| I2L | 0x00CC | int32 转 long64 |
| I2F | 0x00CD | int32 转 float32 |
| I2D | 0x00CE | int32 转 double64 |
| L2B | 0x00CF | long64 转 byte8 |
| L2S | 0x00D0 | long64 转 short16 |
| L2I | 0x00D1 | long64 转 int32 |
| L2F | 0x00D2 | long64 转 float32 |
| L2D | 0x00D3 | long64 转 double64 |
| F2B | 0x00D4 | float32 转 byte8 |
| F2S | 0x00D5 | float32 转 short16 |
| F2I | 0x00D6 | float32 转 int32 |
| F2L | 0x00D7 | float32 转 long64 |
| F2D | 0x00D8 | float32 转 double64 |
| D2B | 0x00D9 | double64 转 byte8 |
| D2S | 0x00DA | double64 转 short16 |
| D2I | 0x00DB | double64 转 int32 |
| D2L | 0x00DC | double64 转 long64 |
| D2F | 0x00DD | double64 转 float32 |
---
## 8. 栈控制0x0100-0x01FF
| 指令名 | 十六进制 | 说明 |
|------|--------|----------|
| POP | 0x0100 | 弹出栈顶元素 |
| DUP | 0x0101 | 复制栈顶元素 |
| SWAP | 0x0102 | 交换栈顶前两元素 |
---
## 9. 流程控制0x0200-0x02FF
| 指令名 | 十六进制/十进制 | 说明 |
|------|----------|-------|
| JUMP | 0x0200 | 无条件跳转 |
| CALL | 0x0201 | 子程序调用 |
| RET | 0x0202 | 子程序返回 |
---
## 10. 寄存器控制0x0300-0x03FF
| 指令名 | 十六进制 | 说明 |
|-----|--------|---------|
| MOV | 0x0300 | 局部变量间赋值 |
---
## 11. 系统控制0x0400-0x04FF
| 指令名 | 十六进制 | 说明 |
|-------------|--------|------|
| HALT | 0x0400 | 程序终止 |
| SYSCALL | 0x0401 | 系统调用 |
| DEBUG\_TRAP | 0x0402 | 调试断点 |