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