设计一个算法,输入 2 个数字,然后在小人计算中输出最小的数字



我有一个程序正在做,我想输入两个数字,以便LMC可以输出最小的一个。我的代码给了我最大的数字,帮我修复它。

INP
STA first
INP
STA second
SUB second
BRP secondBig
LDA second
OUT
BRA endProgram
secondBig LDA second
OUT
endProgram HLT
first DAT
second DAT

您将两个输入值都存储在 first 中,这意味着您用第二个覆盖第一个。

在修复上述问题之前和之后,您的代码不会输出最大的代码,而是输出第二个(无论相对大小如何)。 单步执行或实际读取代码应该告诉您原因。

反转你的条件分支:使用 BRN(分支负数)而不是 BRP。或者,切换逻辑分支,以确定哪个值可用于输出。

问题是您将第二个输入与自身进行了比较。您可以在SUB second之前插入LDA first,但是如果您反转输出块,则可以避免额外的LDA

同样令人困惑的是,您有一个标签"secondBig",而实际上您不是在寻找最大的数字,而是最小的数字

校正:

#input: 4 7
           INP
           STA first
           INP
           STA second
           SUB first
           BRP firstLeast
           LDA second     
           OUT
           BRA endProgram
           
firstLeast LDA first
           OUT
           
endProgram HLT
first      DAT
second     DAT
<script src="https://cdn.jsdelivr.net/gh/trincot/lmc@v0.7/lmc.js"></script>

最新更新