19. 栈操作:后进先出
将数值保存到数据栈,再倒序取回。
1. 预测与跟踪
运行试做程序前,预测输出,并跟踪最先执行的三条指令。按需要记录相关寄存器、标志或内存,再逐步执行进行比较。
LOAD 11 PUSH LOAD 22 PUSH POP PRINT POP PRINT HALT
加入输入队列: 无
初始化内存: 所有字节初始为零
试做预测答案
输出: 22, 11
| 指令 | 执行前 PC | 执行后 PC | 执行前 R0 | 执行后 R0 | 相关状态 | 输出 |
|---|---|---|---|---|---|---|
| LOAD | 0 | 1 | 0 | 11 | {"registers":[11,0,0,0,0,0,0,0],"flags":{"zero":false,"negative":false,"overflow":false},"sp":255,"stack":[],"callStack":[],"loopStack":[],"memoryReads":[],"memoryWrites":[]} | 无 |
| PUSH | 1 | 2 | 11 | 11 | {"registers":[11,0,0,0,0,0,0,0],"flags":{"zero":false,"negative":false,"overflow":false},"sp":254,"stack":[11],"callStack":[],"loopStack":[],"memoryReads":[],"memoryWrites":[]} | 无 |
| LOAD | 2 | 3 | 11 | 22 | {"registers":[22,0,0,0,0,0,0,0],"flags":{"zero":false,"negative":false,"overflow":false},"sp":254,"stack":[11],"callStack":[],"loopStack":[],"memoryReads":[],"memoryWrites":[]} | 无 |
2. 构建与检查
读取两个整数,将它们都压入数据栈,再倒序输出。使用 PUSH 和 POP,不要写死数值。
必需的指令类型: INPUT, PUSH, POP
挑战示例答案
INPUT PUSH INPUT PUSH POP PRINT POP PRINT HALT
实际检查器测试数据
案例 1
- 输入
3, 8- 初始内存
所有字节初始为零- 预期输出
8, 3
案例 2
- 输入
-4, 0- 初始内存
所有字节初始为零- 预期输出
0, -4
案例 3
- 输入
9, 9- 初始内存
所有字节初始为零- 预期输出
9, 9
3. 解释机器
为什么第二个输入先输出?
推理与教学说明
PUSH/POP 后进先出;输入 3、8,输出 8、3;调用帧不是数据值。