机器手册
表情符号指令参考
输入表情符号或对应关键字。寄存器 R0–R7 保存安全整数;R0 是累加器。内存有 256 个字节地址(0–255)。算术保留完整整数;按位操作使用有符号 32 位值。
标签以冒号结尾。跳转目标为标签或从零开始的指令索引,忽略空行和注释。# 开始注释。LOAD [10] 读取内存;LOAD 10 载入字面数字 10。
| 表情符号 | 关键字与操作数 | 行为 | 实验室 |
|---|---|---|---|
| 📥 | LOAD 数值 [寄存器] | 载入数值、寄存器或内存字节。 | |
| 💾 | STORE [数值] 地址 | 将数值的低字节写入内存。 | STORE · 在实验室中试用指令 →LOAD 42 STORE 10 STORE 511 11 LOAD [10] PRINT LOAD [11] PRINT HALT 预期输出: |
| 📋 | COPY 来源寄存器 目标寄存器 | 将一个寄存器复制到另一个。 | |
| ➕ | ADD 数值 | 向 R0 加上一个数值。 | |
| ➖ | SUB 数值 | 从 R0 减去一个数值。 | |
| ✖️ | MUL 数值 | 将 R0 乘以一个数值。 | |
| ➗ | DIV 非零数值 | 对 R0 除法,向负无穷取整。 | |
| 📊 | MOD 非零数值 | 计算 R0 的带符号余数。 | |
| 🔀 | AND 数值 | 对 R0 与数值执行按位与。 | |
| 🔃 | OR 数值 | 对 R0 与数值执行按位或。 | |
| ❌ | NOT | 翻转 R0 的有符号 32 位。 | |
| 🔄 | XOR 数值 | 对 R0 与数值执行按位异或。 | |
| ⚖️ | CMP 数值 | 根据 R0 减去数值设置标志,保留 R0。 | CMP · 在实验室中试用指令 →LOAD 7 CMP 7 JUMP_IF_ZERO same LOAD 0 JUMP show same: LOAD 1 show: PRINT HALT 预期输出: |
| ⏭️ | JUMP 目标 | 跳到标签或从零开始的指令索引。 | |
| ❓ | JUMP_IF_ZERO 目标 | 保存的零标志为真时跳转。 | |
| 🔁 | LOOP 次数 | 重复至匹配 RETURN 结束的代码块。 | LOOP · 在实验室中试用指令 →LOOP 0 LOAD 99 PRINT RETURN LOAD 1 LOOP 3 PRINT ADD 1 RETURN HALT 预期输出: |
| 🛑 | RETURN | 结束一次循环,或从子程序返回。 | |
| 📞 | CALL 目标 | 调用子程序,并保存下一条指令地址。 | CALL · 在实验室中试用指令 →LOAD 3 CALL square PRINT LOAD 4 CALL square PRINT HALT square: MUL R0 RETURN 预期输出: |
| 🖨️ | PRINT | 将当前 R0 值追加到输出。 | |
| 📲 | INPUT | 读取整数到 R0;输入为空时等待。 | |
| ⬆️ | PUSH | 将 R0 压入数据栈。 | |
| ⬇️ | POP | 从数据栈弹出数值到 R0。 | |
| ⏹️ | HALT(或 STOP) | 停在当前指令。 | |
| 💤 | SLEEP 毫秒 | 向调用方请求毫秒延迟。 | |
| ⏸️ | NOP | 推进执行,不改变数值或标志。 |
标志、循环与调用
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 或到达末尾结束;无效跳转目标会报错。
在实验室中试用指令 →