0

我将如何创建一个允许在邮箱中输入和存储多个输入的循环。我无法将其存储在不同的邮箱中。当输入 000 或邮箱中没有更多空间时,程序将停止。谢谢您的帮助!

4

3 回答 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覆盖(在它执行之前存储了目标 -加载 的值,添加,然后将其存储在内存位置。STATLDA T; ADD STAOP; STA STAIT300STAI

像这样的技巧就是为什么汇编程序在可维护性方面名声不好的原因(尽管在现代处理器上,这种风格的自修改代码几乎没有使用过)。

您可以在此处看到它正在运行:在 LMC 模拟器中写入多个邮箱

于 2016-04-20T03:51:31.323 回答
-1

您根本不是很具体,答案很容易找到。但你可以做到这一点。

LOOP INP
     STA MAILBOX 
     BRA LOOP
MAILBOX 000
于 2016-02-16T16:04:30.270 回答