13个不稳定版本 (3个破坏性更新)
0.4.0 | 2021年1月1日 |
---|---|
0.3.10 | 2020年12月10日 |
0.2.0 | 2020年12月7日 |
0.1.0 | 2020年12月7日 |
#283 in 模拟器
每月30次下载
52KB
2K SLoC
wlvm
用Rust编写的虚拟机及其相关语言
安装
cargo install wlvm
(https://crates.io/crates/wlvm)
构建
git clone https://github.com/wafelack/wlvm
cd wlvm/
cargo build
cargo test
使用
运行repl
wlvm
运行程序
wlvm run$程序
转储程序内存和寄存器
wlvm dump$程序
详细信息
虚拟机数据表
寄存器
有6个多功能寄存器,标记为a到f。
有4个特殊寄存器
- sp : 栈指针
- ip : 指令指针
- st : 栈顶值
- eq : 最后执行的测试结果
指令集
堆栈指令
- psh <整数> : 将整数推入堆栈
- pop : 弹出堆栈
算术运算
- add <寄存器_a> <寄存器_b> : 将寄存器_b的内容加到寄存器_a
- sub <寄存器_a> <寄存器_b> : 从寄存器_a减去寄存器_b的内容
- mul <寄存器_a> <寄存器_b> : 将寄存器_b的内容乘以寄存器_a
- div <寄存器_a> <寄存器_b> : 将寄存器_a除以寄存器_b
内存操作
- mov <寄存器_a> <寄存器_b> : 将寄存器_b的内容复制到寄存器_a
- jmp <指令> : 如果Eq寄存器为真,则跳转到<指令>
布尔代数运算
- tee <寄存器_a> <寄存器_b> : 测试寄存器_a是否等于寄存器_b
- tne <寄存器_a> <寄存器_b> : 测试寄存器_a是否不等于寄存器_b
- tll <寄存器_a> <寄存器_b> : 测试寄存器_a是否小于寄存器_b
- tmm <寄存器_a> <寄存器_b> : 测试寄存器_a是否大于寄存器_b
- tel <寄存器_a> <寄存器_b> : 测试寄存器_a是否小于等于寄存器_b
- tem <寄存器_a> <寄存器_b> : 测试寄存器_a是否大于等于寄存器_b
其他
-
dmp : 转储堆栈和寄存器
-
drg <寄存器> : 打印指定寄存器的内容
-
prt <寄存器> : 打印与寄存器值对应的字符
-
hlt : 停止程序