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