0

我有一个正在做的程序,我想输入两个数字,以便 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
4

3 回答 3

0

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

于 2017-10-20T18:49:33.377 回答
0

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

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

于 2017-10-20T18:51:02.640 回答
0

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

于 2020-09-25T10:31:15.987 回答