10. 条件逻辑:作出决定
比较数值,再根据保存的标志选择路径。
1. 预测与跟踪
运行试做程序前,预测输出,并跟踪最先执行的三条指令。按需要记录相关寄存器、标志或内存,再逐步执行进行比较。
LOAD 7 CMP 7 JUMP_IF_ZERO same LOAD 0 JUMP show same: LOAD 1 show: PRINT HALT
加入输入队列: 无
初始化内存: 所有字节初始为零
试做预测答案
输出: 1
| 指令 | 执行前 PC | 执行后 PC | 执行前 R0 | 执行后 R0 | 相关状态 | 输出 |
|---|---|---|---|---|---|---|
| LOAD | 0 | 1 | 0 | 7 | {"registers":[7,0,0,0,0,0,0,0],"flags":{"zero":false,"negative":false,"overflow":false},"sp":255,"stack":[],"callStack":[],"loopStack":[],"memoryReads":[],"memoryWrites":[]} | 无 |
| CMP | 1 | 2 | 7 | 7 | {"registers":[7,0,0,0,0,0,0,0],"flags":{"zero":true,"negative":false,"overflow":false},"sp":255,"stack":[],"callStack":[],"loopStack":[],"memoryReads":[],"memoryWrites":[]} | 无 |
| JUMP_IF_ZERO | 2 | 5 | 7 | 7 | {"registers":[7,0,0,0,0,0,0,0],"flags":{"zero":true,"negative":false,"overflow":false},"sp":255,"stack":[],"callStack":[],"loopStack":[],"memoryReads":[],"memoryWrites":[]} | 无 |
2. 构建与检查
读取两个整数。相等时输出 1,否则输出 0。处理相等和不相等的输入。
必需的指令类型: INPUT, CMP, JUMP_IF_ZERO
挑战示例答案
INPUT COPY R0 R1 INPUT CMP R1 JUMP_IF_ZERO same LOAD 0 JUMP show same: LOAD 1 show: PRINT HALT
实际检查器测试数据
案例 1
- 输入
5, 5- 初始内存
所有字节初始为零- 预期输出
1
案例 2
- 输入
2, 3- 初始内存
所有字节初始为零- 预期输出
0
案例 3
- 输入
-2, -2- 初始内存
所有字节初始为零- 预期输出
1
3. 解释机器
R0 非零时,Z 能为真吗?
推理与教学说明
可以:R0=7 时 CMP 7 根据差值设置零标志,而 R0 仍为 7。