Skip to content

HenryCROSS/tea_party_vm

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

48 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

TPV 虚拟机指令集说明

该文档描述了 TPV 虚拟机中定义的所有操作码(Opcode),包括其功能与使用方式。

基础指令

指令 参数 说明
SETI rd, 32bit imm 设置寄存器为整数常量
SETF rd, 32bit imm 设置寄存器为浮点常量
SETS rd, string 字符串入表(去重),返回指针至 rd
SETNIL rd 设置寄存器为 NIL
STORE rd, r1, 32bit imm r1 存入表(不去重),返回索引到 rd
LOAD rd, r1, 32bit imm 从表根据索引加载至 rd,imm=0:INT, 1:FLOAT, 2:STR

算术运算

指令 参数 说明
ADD rd, r1, r2 加法
SUB rd, r1, r2 减法
MUL rd, r1, r2 乘法
DIV rd, r1, r2 除法
NEGATE rd, r1 取负数

类型转换

指令 参数 说明
CVT_I_D frd, r1 整数转浮点
CVT_D_I rd, fr1 浮点转整数

跳转与判断

指令 参数 说明
HLT 停止程序执行
JMP 32bit imm / @label 无条件跳转
JMP_IF r1, 32bit imm / @label 条件跳转,若 r1 为真

比较运算

指令 参数 说明
EQ rd, r1, r2 等于
NEQ rd, r1, r2 不等于
GT rd, r1, r2 大于
GTE rd, r1, r2 大于等于
LT rd, r1, r2 小于
LTE rd, r1, r2 小于等于

位运算

指令 参数 说明
BITAND rd, r1, r2 位与
BITOR rd, r1, r2 位或
BITXOR rd, r1, r2 位异或
BITNOT rd, r1 位取反
BITSHL rd, r1, imm 左移
BITSHRL rd, r1, imm 无符号右移
BITSHRA rd, r1, imm 有符号右移

IO 与虚拟机调用

指令 参数 说明
VMCALL r1, r2, imm 虚拟机系统调用:
0: 打印 r1;若 r2==1 换行
1: 输入整数至 r1
2: 输入浮点至 r1
3: 输入字符串,返回指针至 r1

栈操作

指令 参数 说明
PUSH r1 入栈
POP rd 出栈

函数与参数

指令 参数 说明
SET_ARG r1, imm 设置函数参数
GET_ARG rd, imm 获取函数参数
CALL rd, imm1, imm2 / @label 函数调用,imm1=0 表示当前模块
RETURN rd 返回值

数组操作

指令 参数 说明
NEW_ARRAY rd 新建数组
SET_ARRAY rd, r1, r2 设置 rd[r1] = r2
GET_ARRAY rd, r1, r2 rd = r1[r2]
RM_ARRAY rd, r1, r2 删除 r1[r2]
GET_ARRAY_LEN rd, r1 获取数组长度

其他指令

指令 参数 说明
IGL 非法指令(保留)
NOP 空操作,占位

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published