snow/docs/SnowVM-OpCode/SnowVM-OpCode.md

226 lines
8.2 KiB
Markdown
Raw 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.

# 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 | 调试断点 |