我将如何创建一个允许在邮箱中输入和存储多个输入的循环。我无法将其存储在不同的邮箱中。当输入 000 或邮箱中没有更多空间时,程序将停止。谢谢您的帮助!
问问题
1976 次
3 回答
1
保罗给出了正确的答案。
我只是想展示它是如何工作的,而不必在“数据部分”中编码操作码(尽管在 LMC 中真的没有这样的东西)。应该进行动态存储的指令最初不必是 a DAT
:它可以是STA
指令本身,带有应该存储第一个值的标签,然后该操作码可以动态递增:
#input:5 10 101 14 998 8
INP
STA COUNTER
LOOP LDA COUNTER
BRZ COUNTER ; is HLT
SUB ONE
STA COUNTER
INP
DYNAMIC STA ARRAY ; target address changes
LDA DYNAMIC
ADD ONE
STA DYNAMIC
BRA LOOP
COUNTER HLT ; note that 0 = HLT
ONE DAT 1
ARRAY DAT ; start of array
<script src="https://cdn.jsdelivr.net/gh/trincot/lmc@v0.75/lmc.js"></script>
于 2020-10-19T18:11:52.750 回答
0
如果你想写信到一个固定地址的邮箱,这很容易:STA addr
指令就是这样做的。如果要写入动态地址,则要困难得多,并且需要自修改代码。
这是一个示例,它从输入中读取 N,然后从输入中再读取 N 个数字并将它们写入地址 50、51、52 等。
INP
STA C
L LDA C
BRZ C
SUB ONE
STA C
LDA T
ADD ONE
STA T
ADD STAOP
STA STAI
INP
STAI DAT
BRA L
C DAT
ONE DAT 1
STAOP DAT 300
T DAT 49
请注意代码中间的 :它被一条指令STAI DAT
覆盖(在它执行之前存储了目标 -加载 的值,添加,然后将其存储在内存位置。STA
T
LDA T; ADD STAOP; STA STAI
T
300
STAI
像这样的技巧就是为什么汇编程序在可维护性方面名声不好的原因(尽管在现代处理器上,这种风格的自修改代码几乎没有使用过)。
您可以在此处看到它正在运行:在 LMC 模拟器中写入多个邮箱
于 2016-04-20T03:51:31.323 回答
-1
您根本不是很具体,答案很容易找到。但你可以做到这一点。
LOOP INP
STA MAILBOX
BRA LOOP
MAILBOX 000
于 2016-02-16T16:04:30.270 回答