我正在输入几个变量。我想知道如何每次增加地址,所以每个输入都保存在不同的地址中。我每次都尝试添加 1,但它只能用于特定输入,不能用于地址。
问问题
941 次
3 回答
1
如果您知道将获得多少输入,则只需将每个输入存储在预定义的位置(因此:无循环)。
另一方面,如果事先不知道输入的数量,那么您可以使用自修改代码。
有几种方法可以获得可变数量的输入。这里有一些:
- 让第一个输入指示接下来有多少输入
- 保留一个特殊的值来指示输入的结束,例如 0。这意味着 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
标签写入。发生这种情况是因为 at 指令在DYN
循环中动态更新。所以在第二次迭代中,它确实类似于STA ARR+1
-- 尽管这是一种不受支持的语法。
在实际用例中,您将在 label 处对收集的数据做一些事情DONE
,而这里我们只是结束程序。
于 2020-10-18T22:03:22.737 回答
0
我相信你需要的是DAT
功能。这会保留一个内存地址,然后您可以将STA
变量(存储)到特定的内存地址中。
例如:A DAT
将为变量保留一个内存地址A
于 2015-12-02T11:39:07.737 回答
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
于 2016-04-20T18:18:45.800 回答