0

我能够编写一个 LMC 程序,它可以找到两个输入值中的较大值。但是如何修改它以找到任意数量的输入值中的最大值,而不仅仅是两个?

下面是我的代码:

START    INP 
         STA NUM1
         INP
         STA NUM2
         LDA NUM1
         SUB NUM2
         BRP Positive
         LDA NUM2
         OUT
         HLT
Positive LDA NUM1
         HLT
NUM1     DAT
NUM2     DAT
4

1 回答 1

1

令 NUM1 为迄今为止的最大值,并循环将下一个输入读入 NUM2。如果比较显示下一个输入更大,则更新 NUM1,否则不更新。

使用这种方法,最好将 NUM1 重命名为 MAX,将 NUM2 重命名为 NUM。

您还应该确定已提供所有输入的指示。一种方法是同意用户必须输入一个特定的值来标记输入的结束。显然,这意味着该特殊值不能成为输入本身的一部分。

如果该终止值为 0,则如下所示:

#input: 5 2 8 4 5 0
START  INP 
       BRZ OUTPUT
       STA MAX
       
LOOP   INP
       BRZ OUTPUT
       STA NUM
       LDA MAX
       SUB NUM
       BRP LOOP ; input was not greater
       LDA NUM
       STA MAX  ; input was greater
       BRA LOOP

OUTPUT LDA MAX
       OUT
       HLT

NUM    DAT 
MAX    DAT 0

<script src="https://cdn.jsdelivr.net/gh/trincot/lmc@v0.7/lmc.js"></script>

于 2020-09-13T13:43:50.863 回答