首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >小人计算机循环

问小人计算机循环
EN

Stack Overflow用户
提问于 2015-10-16 01:59:57
回答 3查看 1.9K关注 0票数 0

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

EN

回答 3

Stack Overflow用户

发布于 2020-10-20 02:11:53

保罗给出了正确的答案。

我只想展示它是如何工作的,而不必在“数据部分”中编码操作码(尽管在LMC中实际上没有这样的东西)。动态存储应该发生的指令最初不一定是DAT:它可以是STA指令本身,带有第一个值应该存储的标签,然后该操作码可以动态递增:

​

代码语言:javascript
复制
#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>

​

票数 1
EN

Stack Overflow用户

发布于 2016-04-20 11:51:31

如果您想写入固定地址的邮箱,这很简单:STA addr指令可以做到这一点。如果你想写一个动态地址,那就更难了,并且需要自修改代码。

下面是一个从输入读取N的示例,然后从输入读取N个数字并将它们写入地址50、51、52,依此类推。

代码语言:javascript
复制
     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

票数 0
EN

Stack Overflow用户

发布于 2016-02-17 00:04:30

你一点也不具体,答案很容易找到。但你能做到的。

代码语言:javascript
复制
LOOP INP
     STA MAILBOX 
     BRA LOOP
MAILBOX 000
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33155400

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档