7. 内存:计算机的笔记本
覆盖 R0 后,实际取回已经保存的字节。
1. 预测与跟踪
运行试做程序前,预测输出,并跟踪最先执行的三条指令。按需要记录相关寄存器、标志或内存,再逐步执行进行比较。
LOAD 42 STORE 0 LOAD 99 STORE 1 LOAD 0 LOAD [0] PRINT LOAD [1] PRINT HALT
加入输入队列: 无
初始化内存: 所有字节初始为零
试做预测答案
输出: 42, 99
| 指令 | 执行前 PC | 执行后 PC | 执行前 R0 | 执行后 R0 | 相关状态 | 输出 |
|---|---|---|---|---|---|---|
| LOAD | 0 | 1 | 0 | 42 | {"registers":[42,0,0,0,0,0,0,0],"flags":{"zero":false,"negative":false,"overflow":false},"sp":255,"stack":[],"callStack":[],"loopStack":[],"memoryReads":[],"memoryWrites":[]} | 无 |
| STORE | 1 | 2 | 42 | 42 | {"registers":[42,0,0,0,0,0,0,0],"flags":{"zero":false,"negative":false,"overflow":false},"sp":255,"stack":[],"callStack":[],"loopStack":[],"memoryReads":[],"memoryWrites":[0]} | 无 |
| LOAD | 2 | 3 | 42 | 99 | {"registers":[99,0,0,0,0,0,0,0],"flags":{"zero":false,"negative":false,"overflow":false},"sp":255,"stack":[],"callStack":[],"loopStack":[],"memoryReads":[],"memoryWrites":[]} | 无 |
2. 构建与检查
读取一个字节值(0–255),保存到内存地址 10,清零 R0,再从内存取回并输出它。
必需的指令类型: INPUT, STORE, LOAD
挑战示例答案
INPUT STORE 10 LOAD 0 LOAD [10] PRINT HALT
实际检查器测试数据
案例 1
- 输入
9- 初始内存
所有字节初始为零- 预期输出
9- 预期最终内存
10: 9- 必需的内存读取
10
案例 2
- 输入
42- 初始内存
所有字节初始为零- 预期输出
42- 预期最终内存
10: 42- 必需的内存读取
10
案例 3
- 输入
127- 初始内存
所有字节初始为零- 预期输出
127- 预期最终内存
10: 127- 必需的内存读取
10
3. 解释机器
哪段代码读取内存 10,哪段载入数字 10?
推理与教学说明
LOAD [10] 读取字节;LOAD 10 载入字面值。STORE 与随后取回可在 R0 被覆盖后保留字节。