如何创建允许多个输入输入并存储在邮箱中的循环。我无法将它存储在不同的邮箱中。当输入000或邮箱中没有更多空间时,程序将停止。谢谢你的帮助!
发布于 2020-10-20 02:11:53
保罗给出了正确的答案。
我只想展示它是如何工作的,而不必在“数据部分”中编码操作码(尽管在LMC中实际上没有这样的东西)。动态存储应该发生的指令最初不一定是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>
发布于 2016-04-20 11:51:31
如果您想写入固定地址的邮箱,这很简单: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中。
这就是为什么汇编器在可维护性方面名声不好的原因(尽管在现代处理器上,这种风格的自修改代码并不多用)。
你可以在这里看到它的运行:writing to multiple mailbox in LMC emulator
发布于 2016-02-17 00:04:30
你一点也不具体,答案很容易找到。但你能做到的。
LOOP INP
STA MAILBOX
BRA LOOP
MAILBOX 000https://stackoverflow.com/questions/33155400
复制相似问题