我正在努力应对以下挑战:
编写一个LMC程序,可以将n位二进制数转换为十进制数。在停止程序之前将自然数显示为输出。第一个输入确定 n 的值。假设该值等于四或更大。例如,如果第一个输入是八 (8),则请求八个后续输入。如果后续输入编号为 1, 0, 0, 1, 0, 0, 0, 0,则输出将为 9。n 个输入值由用户提供,每一位一个:其中第一个是最小的 -重要位。第 n 个输入是最高有效位。
我的尝试:
IN
BRZ INVALID_N
STO N
LDA N
SUB FOUR
BRP VALID_N
INVALID_N:HLT
VALID_N:LDA ZERO
STO RESULT
LDA ONE
STO POWER
LOOP: BRZ OUTPUT
STO COUNT
IN
BRZ NEXT
LDA RESULT
ADD POWER
STO RESULT
NEXT: LDA POWER
ADD POWER
STO POWER
LDA COUNT
SUB ONE
BR LOOP
OUTPUT: LDA RESULT
OUT
BR LOOP
ZERO: HLT
ONE: DAT 1
POWER: DAT 32
COUNT: DAT 1
RESULT: DAT 21
N: DAT 0
FOUR: DAT 4
尽管我的代码转换了 n 个大于且等于 4 的二进制数字,但每次我输入 n 个二进制数字时,它都会显示“LMC out篮子”。即使将 n 个二进制转换为十进制后,它仍会继续循环。
我的错误是什么?