snow/docs/SnowVM-OpCode/SnowVM-OpCode.md
Luke a86fb4826d docs: 更新操作码文档结构和内容
- 添加新的 Reference Control 分类
- 更新各分类的名称和描述,使其更加清晰
2025-07-24 13:31:34 +08:00

8.6 KiB
Raw Blame History

SnowVM-OpCode

Type Control (0x0000-0x00BF)

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 小于等于条件判断

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 小于等于条件判断

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 小于等于条件判断

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 小于等于条件判断

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 小于等于条件判断

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 小于等于条件判断

Type Conversion (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

Reference Control (0x00E0-0x00EF)

指令名 十六进制 说明
R_PUSH 0x00E0 将对象引用压入操作数栈
R_LOAD 0x00E1 从本地变量表加载对象引用并压入操作数栈
R_STORE 0x00E2 将操作数栈顶的对象引用弹出并存入本地变量表指定槽位

Stack Control (0x0100-0x01FF)

指令名 十六进制 说明
POP 0x0100 弹出栈顶元素
DUP 0x0101 复制栈顶元素
SWAP 0x0102 交换栈顶前两元素

Flow Control (0x0200-0x02FF)

指令名 十六进制/十进制 说明
JUMP 0x0200 无条件跳转
CALL 0x0201 子程序调用
RET 0x0202 子程序返回

Register Control (0x0300-0x03FF)

指令名 十六进制 说明
MOV 0x0300 局部变量间赋值

System Control (0x0400-0x04FF)

指令名 十六进制 说明
HALT 0x0400 程序终止
SYSCALL 0x0401 系统调用
DEBUG_TRAP 0x0402 调试断点