ORG 400 / 从地址 400 开始
输入/从用户处获取号码 存储 X / 将输入存储在内存位置 X
LOAD ONE / 加载常数值1 存储计数器/将其存储在计数器存储位置
LOOP, LOAD X / 加载X的值 输出/显示X的当前值
加一/X 加 1 STORE X / 存储 X 的新值
LOAD Counter / 加载当前计数器值 加一/计数器加 1 STORE Counter / 存储更新的计数器值
LOAD X / 加载X的值 SKIPCOND 000 / 如果 X == 11 则跳过 JUMP LOOP / 跳回循环开头
加载计数器/加载最终计数器值 输出/显示计数器
HALT/终止程序
X, DEC 0 / X 的内存位置(初始化为 0) 计数器,DEC 0 / 计数器的内存位置(初始化为 0) 1、DEC 1 / 常数值 1
我预计循环会在数字为 10 时结束,并且应该打印迭代次数(循环),但它在 10 后继续运行(请查找附件)
我们的程序存在一些问题:
有一条注释说“如果 X == 11 则跳过”,但您的代码中没有任何内容与 11 进行比较。您只是检查累加器中的值(即 X 的值)是否为负数。您可以通过从 X 中减去 10 并检查它是否严格为正来解决此问题。
您让计数器从 1 开始,但这是不正确的。您还没有计算任何有效的 X,所以您应该从 0 开始。
如果用户输入一个大于10的数字,我认为你不应该输出任何数字,而输出一个计数为0。然而,你的程序总是打印X的初始值,无论它是否在范围与否。您可以通过first执行退出检查来解决此问题,并且只有在该检查之后才继续显示部分的循环。
不是一个大问题,但是:
仅仅说明代码字面意思的注释是没有用的。所以不要这样评论:
STORE X / Store the new value of X
这是没有帮助的信息,因为
STORE
指令的文档已经说了这么多。相反,尝试在更高层次上进行评论,解释一组指令的更高目标是什么。
ORG 400
:如果您不在程序顶部存储数据,这不是很有用。只要放下这个。
这是一个可能的实现:
INPUT
STORE X
LOAD Zero
STORE Counter
Loop, LOAD X / First check if X is within range
SUBT Eleven / Subtract 11
SKIPCOND 000 / Skip if X - 11 < 0
JUMP Exit / Otherwise we've displayed the whole range
LOAD X
OUTPUT / Display the current value of X
ADD One / Increment X by 1
STORE X
LOAD Counter
ADD One / Increment the counter by 1
STORE Counter
Jump Loop
Exit, LOAD Counter
OUTPUT / Display the counter
HALT
X, DEC 0
Counter, DEC 0
Zero, DEC 0
One, DEC 1
Eleven, DEC 11