1 个不稳定版本
0.2.1 | 2018年11月3日 |
---|
#118 在 #模拟器
22KB
597 行
RGM
一个简单的寄存器机器模拟器
安装
cargo +beta install rgm
用法
rgm 0.2.0
XBagon <[email protected]>
A Register Machine Simulator
USAGE:
rgm.exe [FLAGS] [OPTIONS] <input>
FLAGS:
-d, --debug Prints debug information for each step
-h, --help Prints help information
-V, --version Prints version information
OPTIONS:
-c, --config <config>... Allows to set initial configuration of registers
USAGE: index:value index:value index:value ...
ARGS:
<input> Input rgm file
rgm 文件由指令组成,指令之间由换行符分隔。
指令
名称 | 参数 | 操作 | PC |
---|---|---|---|
LOAD | i | r(0)=r(i) | +=1 |
STORE | i | r(i)=r(0) | +=1 |
ADD | i | r(0)=r(0)+r(i) | +=1 |
SUB | i | r(0)=r(0)-r(i) | +=1 |
MULT | i | r(0)=r(0)*r(i) | +=1 |
DIV | i | r(0)=r(0)/r(i) | +=1 |
GOTO | j | = j |
名称 | 参数 | 用法 |
---|---|---|
CONDGOTO | t[=,≤,≥,<,>], l, j | IF r(0) t l GOTO j |
名称 | 参数 | 操作 | PC |
---|---|---|---|
CLOAD | l | r(0)=l | +=1 |
CADD | l | r(0)=r(0)+l | +=1 |
CSUB | l | r(0)=r(0)-l | +=1 |
CMULT | l | r(0)=r(0)*l | +=1 |
CDIV | l | r(0)=r(0)/l | +=1 |
INDLOAD | i | r(0)=r(r(i)) | +=1 |
INDSTORE | i | r(r(i))=r(0) | +=1 |
INDADD | i | r(0)=r(0)+r(r(i)) | +=1 |
INDSUB | i | r(0)=r(0)-r(r(i)) | +=1 |
INDMULT | i | r(0)=r(0)*r(r(i)) | +=1 |
INDDIV | i | r(0)=r(0)/r(r(i)) | +=1 |
依赖
~6MB
~113K SLoC