我有一个正在做的程序,我想输入两个数字,以便 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
我有一个正在做的程序,我想输入两个数字,以便 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
反转条件分支:使用 BRN(否定分支)而不是 BRP。或者,切换决定哪个值可用于输出的逻辑分支。
您将两个输入值都存储在 中first
,这意味着您用第二个覆盖第一个。
在修复上述问题之前和之后,您的代码都不是输出最大的,而是输出第二个(不管相对大小)。单步执行或实际阅读代码应该会告诉您原因。
问题是您将第二个输入与自身进行了比较。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>