我正在输入几个变量。我想知道每次如何递增地址,因此每个输入都保存在不同的地址中。我每次尝试添加1,但它只能用于特定输入,而不能用于地址。
答案 0 :(得分:0)
我认为你需要的是DAT
功能。这将保留一个内存地址,然后您可以STA
(存储)特定内存地址中的变量。
例如:A DAT
将为变量A
答案 1 :(得分:0)
INP
STA N
LOOP LDA A
SUB N
BRP ENDLOOP
LDA A
OUT
LDA B
ADD A
STA ACC
LDA B
STA A
LDA ACC
STA B
BRA LOOP
ENDLOOP HLT
A DAT 0
B DAT 1
N DAT
ACC DAT 1
答案 2 :(得分:0)
如果您知道将获得多少输入,那么只需将每个输入存储在预定义的位置即可(因此:无循环)。
另一方面,如果事先不知道输入数量,则可以使用自修改代码。
有几种获取可变数量输入的方法。这里是一些:
这是一个将输入存储在顺序存储器位置直到输入0的程序:
#input: 1 2 3 0
LOOP INP
BRZ DONE
DYN STA ARR
LDA DYN ; read the opcode
ADD ONE
STA DYN ; modifying code!
BRA LOOP
DONE HLT
ONE DAT 1
ARR DAT ; start of the array
<script src="https://cdn.jsdelivr.net/gh/trincot/lmc@v0.73/lmc.js"></script>
运行此代码时,您会注意到数据写在ARR
标签之外。发生这种情况是因为DYN
中的指令是在循环中动态更新的。因此,在第二次迭代中,它的确类似于STA ARR+1
-尽管不支持该语法。
在一个实际的用例中,您将对标签DONE
上收集的数据进行处理,而在这里我们只是结束程序。