diff --git a/README.md b/README.md index aa2aab9..6a2dbe8 100644 --- a/README.md +++ b/README.md @@ -72,6 +72,8 @@ Snow 语言受到 LLM 驱动代码生成趋势的启发,强调简单而清晰的 [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) ## 开发计划 diff --git a/docs/SnowVM-OpCode/SnowVM-OpCode.md b/docs/SnowVM-OpCode/SnowVM-OpCode.md new file mode 100644 index 0000000..4bd5d46 --- /dev/null +++ b/docs/SnowVM-OpCode/SnowVM-OpCode.md @@ -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 | 调试断点 | \ No newline at end of file