16. 阶乘与循环不变量
使用乘法累加器,并解释为什么 0! 等于 1。
打开本课 →
1. 预测与跟踪
运行试做程序前,预测输出,并跟踪最先执行的三条指令。按需要记录相关寄存器、标志或内存,再逐步执行进行比较。
LOAD 4 R1
LOAD 1 R2
LOOP 4
LOAD R2
MUL R1
COPY R0 R2
LOAD R1
SUB 1
COPY R0 R1
RETURN
LOAD R2
PRINT
HALT
加入输入队列: 无
初始化内存: 所有字节初始为零
2. 构建与检查
读取 0 到 6 的 N,输出 N!。使用循环和乘法累加器。
必需的指令类型: INPUT, LOOP, MUL
起始程序
INPUT
COPY R0 R1
COPY R0 R3
LOAD 1 R2
LOOP R3
#
RETURN
LOAD R2
PRINT
HALT
你的程序与笔记
3. 解释机器
乘积累加器为什么从 1 开始?
17. 斐波那契数列
保留前两个值,以安全的顺序更新。
打开本课 →
1. 预测与跟踪
运行试做程序前,预测输出,并跟踪最先执行的三条指令。按需要记录相关寄存器、标志或内存,再逐步执行进行比较。
LOAD 1 R1
LOAD 1 R2
LOOP 8
LOAD R1
PRINT
ADD R2
COPY R2 R1
COPY R0 R2
RETURN
HALT
加入输入队列: 无
初始化内存: 所有字节初始为零
2. 构建与检查
读取 0 到 8 的 N。从 1、1 开始输出前 N 个斐波那契数。N = 0 时不输出。
必需的指令类型: INPUT, LOOP, ADD, COPY
起始程序
INPUT
COPY R0 R4
LOAD 1 R1
LOAD 1 R2
LOOP R4
#
RETURN
HALT
你的程序与笔记
3. 解释机器
为什么过早替换前一项会破坏斐波那契计算?
18. 反向复制内存缓冲区
使用来源和目标指针,倒序复制缓冲区。
打开本课 →
1. 预测与跟踪
运行试做程序前,预测输出,并跟踪最先执行的三条指令。按需要记录相关寄存器、标志或内存,再逐步执行进行比较。
STORE 1 0
STORE 2 1
STORE 3 2
STORE 4 3
LOAD 3 R1
LOAD 16 R2
LOOP 4
LOAD [R1]
STORE R2
LOAD R1
SUB 1
COPY R0 R1
LOAD R2
ADD 1
COPY R0 R2
RETURN
HALT
加入输入队列: 无
初始化内存: 0: 1, 1: 2, 2: 3, 3: 4
2. 构建与检查
地址 0–3 已预设四个字节。用循环和寄存器地址,将它们倒序复制到 16–19,保持原数据不变。不要求输出。
必需的指令类型: LOOP, LOAD, STORE
起始程序
LOAD 3 R1
LOAD 16 R2
LOOP 4
#
RETURN
HALT
你的程序与笔记
3. 解释机器
这是原地反转吗?什么必须不变?