0

我一直在为以下内容编写程序:

2 + (bxc)     。

我的循环似乎有问题,但我无法解决。

我可以得到一个2和一个乘法,但是当我尝试将两者结合起来时,它只是一遍又一遍地要求输入。

乘:

        INP
        STA b
    INP STA c
   LOOP LDA c 
        BRZ ENDTHIS
        SUB ONE1
        STA c
        LDA ANS1
        ADD b
        STA ANS1
        BRA LOOP
ENDTHIS LDA ANS1 
        OUT
        SUB ANS1 
        STA ANS1
        HLT 
      b DAT
      c DAT 
   ONE1 DAT 1 
   ANS1 DAT 0

正方形:

        INP
        STA a
        LDA a
        STA y
   LOOP LDA y
        BRZ END
        SUB ONE2
        STA y 
        LDA ANS2
        ADD a
        STA ANS2
        BRA LOOP
    END LDA ANS2 
        OUT 
        SUB ANS2
        STA ANS2
        HLT 
      a DAT
      y DAT 
   ONE2 DAT 1
   ANS2 DAT 0 

但不能让他们一起工作

4

1 回答 1

0

您可以使用从 2 倒数到 0 的计数器。

将第一个输入传递给bc,并对结果执行乘法器部分。递减计数器,如果它还不是零,则在bc中获取其他两个输入,然后再次执行乘法器代码。

如果计数器变为零,则意味着您处理了所有输入并且可以输出结果。

#input: 3 5 2
        INP   // a
        STA b // pass (a, a) to multiplier
        STA c

// add (b x c) to result
   loop LDA c 
   exit BRZ endloop
        SUB one 
        STA c
        LDA result
        ADD b 
        STA result 
        BRA loop

// decrement counter from 2 to 1 to 0
endloop LDA counter
        SUB one
        STA counter
        BRZ finish
         
        INP   // b
        STA b
        INP   // c
        STA c
        BRA loop // add (b x c) to result

 finish LDA result
        OUT
        HLT

      a DAT
      b DAT 
      c DAT 
    one DAT 1
counter DAT 2
 result DAT 0
<script src="https://cdn.jsdelivr.net/gh/trincot/lmc@v0.7/lmc.js"></script>

于 2019-11-24T20:27:16.450 回答