首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >LMC -如何递增地址?

LMC -如何递增地址?
EN

Stack Overflow用户
提问于 2015-11-20 00:52:32
回答 3查看 912关注 0票数 1

我输入了几个变量。我想知道如何每次递增地址,以便每个输入都保存在不同的地址中。我每次都尝试添加1,但它只能用于特定的输入,而不能用于地址。

EN

回答 3

Stack Overflow用户

发布于 2020-10-19 06:03:23

如果你知道你会得到多少个输入,那么就把每个输入存储在一个预定义的位置(所以:没有循环)。

另一方面,如果事先不知道输入的数量,那么可以使用自修改代码。

有几种方法可以获得可变数量的输入。下面是一些例子:

  • 让第一个输入指示有多少个输入将跟随
  • 保留一个特殊的值来指示输入的结束,例如0。这意味着0不能是此结束标记之前的“真实”输入的一部分。

下面是一个程序,它将输入存储在顺序的内存位置,直到输入0:

代码语言:javascript
运行
复制
#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标签之外。这是因为DYN处的指令在循环中动态更新。因此,在第二次迭代中,它实际上类似于STA ARR+1 --尽管这是一种不受支持的语法。

在一个真实的用例中,您将在label DONE处对收集到的数据执行一些操作,而这里我们只是结束程序。

票数 1
EN

Stack Overflow用户

发布于 2015-12-02 19:39:08

我相信您需要的是DAT函数。这将保留一个内存地址,然后您可以在特定的内存地址中STA (存储)变量。

例如:A DAT将为变量A保留一个内存地址

票数 0
EN

Stack Overflow用户

发布于 2016-04-21 02:18:46

代码语言:javascript
运行
复制
          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
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33809835

复制
相关文章

相似问题

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