机器手册

表情符号指令参考

输入表情符号或对应关键字。寄存器 R0–R7 保存安全整数;R0 是累加器。内存有 256 个字节地址(0–255)。算术保留完整整数;按位操作使用有符号 32 位值。

标签以冒号结尾。跳转目标为标签或从零开始的指令索引,忽略空行和注释。# 开始注释。LOAD [10] 读取内存;LOAD 10 载入字面数字 10。

全部 25 条指令
表情符号关键字与操作数行为实验室
📥LOAD 数值 [寄存器]载入数值、寄存器或内存字节。
LOAD · 在实验室中试用指令 →
LOAD 42
PRINT
HALT

预期输出: 42

打开实验室 →
💾STORE [数值] 地址将数值的低字节写入内存。
STORE · 在实验室中试用指令 →
LOAD 42
STORE 10
STORE 511 11
LOAD [10]
PRINT
LOAD [11]
PRINT
HALT

预期输出: 42, 255

打开实验室 →
📋COPY 来源寄存器 目标寄存器将一个寄存器复制到另一个。
COPY · 在实验室中试用指令 →
LOAD 7 R1
COPY R1 R2
LOAD R2
PRINT
HALT

预期输出: 7

打开实验室 →
➕ADD 数值向 R0 加上一个数值。
ADD · 在实验室中试用指令 →
LOAD 10
ADD 5
PRINT
HALT

预期输出: 15

打开实验室 →
➖SUB 数值从 R0 减去一个数值。
SUB · 在实验室中试用指令 →
LOAD 10
SUB 3
PRINT
HALT

预期输出: 7

打开实验室 →
✖️MUL 数值将 R0 乘以一个数值。
MUL · 在实验室中试用指令 →
LOAD 6
MUL 7
PRINT
HALT

预期输出: 42

打开实验室 →
➗DIV 非零数值对 R0 除法,向负无穷取整。
DIV · 在实验室中试用指令 →
LOAD -9
DIV 4
PRINT
HALT

预期输出: -3

打开实验室 →
📊MOD 非零数值计算 R0 的带符号余数。
MOD · 在实验室中试用指令 →
LOAD -9
MOD 4
PRINT
HALT

预期输出: -1

打开实验室 →
🔀AND 数值对 R0 与数值执行按位与。
AND · 在实验室中试用指令 →
LOAD 13
AND 5
PRINT
HALT

预期输出: 5

打开实验室 →
🔃OR 数值对 R0 与数值执行按位或。
OR · 在实验室中试用指令 →
LOAD 5
OR 2
PRINT
HALT

预期输出: 7

打开实验室 →
❌NOT翻转 R0 的有符号 32 位。
NOT · 在实验室中试用指令 →
LOAD 255
NOT
PRINT
HALT

预期输出: -256

打开实验室 →
🔄XOR 数值对 R0 与数值执行按位异或。
XOR · 在实验室中试用指令 →
LOAD 42
XOR 6
PRINT
HALT

预期输出: 44

打开实验室 →
⚖️CMP 数值根据 R0 减去数值设置标志,保留 R0。
CMP · 在实验室中试用指令 →
LOAD 7
CMP 7
JUMP_IF_ZERO same
LOAD 0
JUMP show
same: LOAD 1
show: PRINT
HALT

预期输出: 1

打开实验室 →
⏭️JUMP 目标跳到标签或从零开始的指令索引。
JUMP · 在实验室中试用指令 →
LOAD 1
JUMP show
LOAD 99
show: PRINT
HALT

预期输出: 1

打开实验室 →
❓JUMP_IF_ZERO 目标保存的零标志为真时跳转。
JUMP_IF_ZERO · 在实验室中试用指令 →
LOAD 0
JUMP_IF_ZERO show
LOAD 99
show: PRINT
HALT

预期输出: 0

打开实验室 →
🔁LOOP 次数重复至匹配 RETURN 结束的代码块。
LOOP · 在实验室中试用指令 →
LOOP 0
LOAD 99
PRINT
RETURN
LOAD 1
LOOP 3
PRINT
ADD 1
RETURN
HALT

预期输出: 1, 2, 3

打开实验室 →
🛑RETURN结束一次循环,或从子程序返回。
RETURN · 在实验室中试用指令 →
LOAD 7
CALL increment
PRINT
HALT
increment: ADD 1
RETURN

预期输出: 8

打开实验室 →
📞CALL 目标调用子程序,并保存下一条指令地址。
CALL · 在实验室中试用指令 →
LOAD 3
CALL square
PRINT
LOAD 4
CALL square
PRINT
HALT
square: MUL R0
RETURN

预期输出: 9, 16

打开实验室 →
🖨️PRINT将当前 R0 值追加到输出。
PRINT · 在实验室中试用指令 →
LOAD 3
PRINT
PRINT
HALT

预期输出: 3, 3

打开实验室 →
📲INPUT读取整数到 R0;输入为空时等待。
INPUT · 在实验室中试用指令 →
INPUT
PRINT
HALT

整数输入: -5

预期输出: -5

打开实验室 →
⬆️PUSH将 R0 压入数据栈。
PUSH · 在实验室中试用指令 →
LOAD 42
PUSH
LOAD 0
POP
PRINT
HALT

预期输出: 42

打开实验室 →
⬇️POP从数据栈弹出数值到 R0。
POP · 在实验室中试用指令 →
LOAD 11
PUSH
LOAD 22
PUSH
POP
PRINT
POP
PRINT
HALT

预期输出: 22, 11

打开实验室 →
⏹️HALT(或 STOP)停在当前指令。
HALT · 在实验室中试用指令 →
LOAD 7
PRINT
HALT
LOAD 99
PRINT

预期输出: 7

打开实验室 →
💤SLEEP 毫秒向调用方请求毫秒延迟。
SLEEP · 在实验室中试用指令 →
LOAD 1
PRINT
SLEEP 100
LOAD 2
PRINT
HALT

预期输出: 1, 2

打开实验室 →
⏸️NOP推进执行,不改变数值或标志。
NOP · 在实验室中试用指令 →
LOAD 7
CMP 7
NOP
JUMP_IF_ZERO show
LOAD 0
show: PRINT
HALT

预期输出: 7

打开实验室 →

标志、循环与调用

Z 表示最近结果为零,N 表示负数,O 表示超出有符号 32 位范围。向任意寄存器 LOAD、COPY、算术、按位指令、POP 和 INPUT 都更新标志。CMP 根据 R0 减去操作数设置标志,不改变 R0。JUMP_IF_ZERO 检查 Z,包括比较结果。

LOOP 进入时捕获次数,通过匹配 RETURN 重复代码块;零会跳过代码块。CALL 使用独立返回地址栈。被调用函数中的 RETURN 先返回调用者,再继续外层循环。PUSH 和 POP 使用独立数据栈。SP 从 255 开始,随数据与调用合计深度下降,最多 256 项。

DIV 向负无穷取整;MOD 为带符号余数。STORE 写入低字节(−1 变为 255)。INPUT 等待提供安全整数。SLEEP 在实验室中请求定时延迟;确定性 VM 本身不等待。程序可以通过 HALT 或到达末尾结束;无效跳转目标会报错。

在实验室中试用指令 →