我输入了几个变量。我想知道如何每次递增地址,以便每个输入都保存在不同的地址中。我每次都尝试添加1,但它只能用于特定的输入,而不能用于地址。
发布于 2020-10-19 06:03:23
如果你知道你会得到多少个输入,那么就把每个输入存储在一个预定义的位置(所以:没有循环)。
另一方面,如果事先不知道输入的数量,那么可以使用自修改代码。
有几种方法可以获得可变数量的输入。下面是一些例子:
下面是一个程序,它将输入存储在顺序的内存位置,直到输入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 --尽管这是一种不受支持的语法。
在一个真实的用例中,您将在label DONE处对收集到的数据执行一些操作,而这里我们只是结束程序。
发布于 2015-12-02 19:39:08
我相信您需要的是DAT函数。这将保留一个内存地址,然后您可以在特定的内存地址中STA (存储)变量。
例如:A DAT将为变量A保留一个内存地址
发布于 2016-04-21 02:18:46
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 1https://stackoverflow.com/questions/33809835
复制相似问题