28. 迷你目标游戏
用保存的状态与计分规则制作三轮游戏。
1. 预测与跟踪
运行试做程序前,预测输出,并跟踪最先执行的三条指令。按需要记录相关寄存器、标志或内存,再逐步执行进行比较。
STORE 5 200 LOAD [200] R1 LOAD 0 R2 LOOP 3 INPUT CMP R1 JUMP_IF_ZERO hit JUMP next hit: LOAD R2 ADD 1 COPY R0 R2 next: NOP RETURN LOAD R2 STORE 201 PRINT HALT
加入输入队列: 5, 2, 5
初始化内存: 200: 5
试做预测答案
输出: 2
| 指令 | 执行前 PC | 执行后 PC | 执行前 R0 | 执行后 R0 | 相关状态 | 输出 |
|---|---|---|---|---|---|---|
| STORE | 0 | 1 | 0 | 0 | {"registers":[0,0,0,0,0,0,0,0],"flags":{"zero":false,"negative":false,"overflow":false},"sp":255,"stack":[],"callStack":[],"loopStack":[],"memoryReads":[],"memoryWrites":[200]} | 无 |
| LOAD | 1 | 2 | 0 | 0 | {"registers":[0,5,0,0,0,0,0,0],"flags":{"zero":false,"negative":false,"overflow":false},"sp":255,"stack":[],"callStack":[],"loopStack":[],"memoryReads":[200],"memoryWrites":[]} | 无 |
| LOAD | 2 | 3 | 0 | 0 | {"registers":[0,5,0,0,0,0,0,0],"flags":{"zero":true,"negative":false,"overflow":false},"sp":255,"stack":[],"callStack":[],"loopStack":[],"memoryReads":[],"memoryWrites":[]} | 无 |
2. 构建与检查
内存 200 包含目标字节。恰好读取三次猜测,计算匹配次数,保存到内存 201,并输出该分数一次。
必需的指令类型: INPUT, CMP, LOOP, STORE, JUMP_IF_ZERO
挑战示例答案
LOAD [200] R1 LOAD 0 R2 LOOP 3 INPUT CMP R1 JUMP_IF_ZERO hit JUMP next hit: LOAD R2 ADD 1 COPY R0 R2 next: NOP RETURN LOAD R2 STORE 201 PRINT HALT
实际检查器测试数据
案例 1
- 输入
5, 2, 5- 初始内存
200: 5- 预期输出
2- 预期最终内存
200: 5, 201: 2- 必需的内存读取
200
案例 2
- 输入
1, 2, 3- 初始内存
200: 9- 预期输出
0- 预期最终内存
200: 9, 201: 0- 必需的内存读取
200
案例 3
- 输入
0, 0, 0- 初始内存
200: 0- 预期输出
3- 预期最终内存
200: 0, 201: 3- 必需的内存读取
200
案例 4
- 输入
17, 1, 2- 初始内存
200: 17- 预期输出
1- 预期最终内存
200: 17, 201: 1- 必需的内存读取
200
3. 解释机器
猜对和猜错时,哪些状态改变?
推理与教学说明
仅相等时分数递增;目标仍为保存的输入或规则数据。三次猜测产生数字分数。