#虚拟机 #相关 #语言 #寄存器 #堆栈 #指令 #转储

app wlvm

用Rust编写的简单虚拟机及其相关语言

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次下载

MPL-2.0 许可证

52KB
2K SLoC

wlvm

用Rust编写的虚拟机及其相关语言

Build & Test

安装

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 : 停止程序

无运行时依赖