1 个不稳定版本

0.1.0 2024年3月3日

#50 in #asm

MIT 许可证

1MB
447 代码行

包含 (ELF 可执行文件/库, 4MB) stack_machine

概念

纯栈机。指令数量少。目前有20条指令。

用法

cargo build --release
cp target/release/stack_machine stack_machine
./stack_machine <path>

指令

代码 指令 Pop Top Push 描述
0 load - - value 加载文字值 value
1 add a, b - 结果 result = a + b
2 sub b, a - 结果 result = a - b
3 mul a, b - 结果 result = a * b
4 div b, a - 结果 result = a / b
5 read mode - input 从 stdin 读取字符 (mode = 0) 或字符串 (mode = 1)
6 put format value - value 打印到 stdout 作为数字 (format = 0)、字符 (format = 1) 或位 (format = 2)
7 and a, b - 结果 result = a & b
8 or a, b - 结果 result = a | b
9 xor a, b - 结果 result = a ^ b
10 not value - 结果 result = !value
11 cmp b a 结果 如果 a > bresult = 1 否则如果 a < bresult = 2 否则 result = 0
12 jmp - - - jumps to #label
13 jeq value - - jumps to #label if value = 0
14 jne value - - jumps to #label if value != 0
15 jgr value - - jumps to #label if value = 1
16 jle value - - jumps to #label if value = 2
17 copy - value value 创建 value 的副本
18 丢弃 value - - 仅丢弃 value
19 停止 - - - 停止执行

示例

2 + 2

#start  ; '#start' label is required
load 2  ; stack = [2]
load 2  ; stack = [2, 2]
add     ; stack = [4]

2 + 2 + 2

#start
load 2  ; stack = [2]
load 2  ; stack = [2, 2]
add     ; stack = [4]
load 2  ; stack = [4, 2]
add     ; stack = [6]

无限循环

#start
jmp #start

条件

#equal
load "e"
load 1
put
halt

#notequal
load "n"
load 1
put
halt

#start  ; program starts here!
load 2
load 1
cmp 
jeq #equal
jmp #notequal  ; jumps to '#notequal' because 2 != 1

待办事项

添加更多指令。

无运行时依赖