显示输入了多少个正数和负数
Show how many positive and negative numbers were input
我正在尝试编写一个 Little Man Computer 程序,输出我有多少个正数和多少个负数,但它也将负数视为正数。
这是我目前拥有的:
LOOP IN
STO NUM
BRZ END
BRP POS
POS LDA ZERO
ADD UN
STO ZERO
END LDA ZERO
OUT
BR LOOP
HLT
NUM DAT 000
UN DAT 001
ZERO DAT 000
规范不支持为 LMC 提供负输入。 LMC 内存单元只能保存 0 到 999 之间的值(来源:Wikipedia). The only notion of "negative" is represented by the LMC's negative flag. And that flag is only set by the execution of ADD
or SUB
, so not by INP
/IN
, LDA
or STA
/STO
(spellings differ). See also these notes of Ian! D. Allen,他在其中讨论了这个令人困惑的概念。
这实际上意味着您的 BRP
指令将始终分支到提供的标签。
您可能会发现模拟器实际上允许负输入,但这将是对原始规范的扩展。
现在,你的代码也有这个 BRP POS
指令的问题,因为它只是跳到下一行(标记为 POS
),所以实际上是否 BRP
是否会分支:这是一个空操作。
类似的练习
由于 LMC 中并不真正存在负值,让我们做一些不同的练习:考虑以 10 的补码表示的输入,因此 500..999 被视为负值(即 -500。 ..-1).或者,当您执行 INP
时,带符号的输入值实际上将存储在 10 的补码中。然后计算小于 500(正)和不小于 500 的输入的数量(因为这些在解释为 10 的补码时为负)。
LOOP INP
BRZ FINISH
SUB COMPARE
BRP ELSE
LDA LESS
ADD ONE
STA LESS
BRA LOOP
ELSE LDA NOTLESS
ADD ONE
STA NOTLESS
BRA LOOP
FINISH LDA LESS
OUT
LDA NOTLESS
OUT
HLT
LESS DAT
NOTLESS DAT
COMPARE DAT 500
ONE DAT 1
<script src="https://cdn.jsdelivr.net/gh/trincot/lmc@v0.6/lmc.js"></script>
确保为程序提供最终的 0 值以输出结果。
我正在尝试编写一个 Little Man Computer 程序,输出我有多少个正数和多少个负数,但它也将负数视为正数。
这是我目前拥有的:
LOOP IN
STO NUM
BRZ END
BRP POS
POS LDA ZERO
ADD UN
STO ZERO
END LDA ZERO
OUT
BR LOOP
HLT
NUM DAT 000
UN DAT 001
ZERO DAT 000
规范不支持为 LMC 提供负输入。 LMC 内存单元只能保存 0 到 999 之间的值(来源:Wikipedia). The only notion of "negative" is represented by the LMC's negative flag. And that flag is only set by the execution of ADD
or SUB
, so not by INP
/IN
, LDA
or STA
/STO
(spellings differ). See also these notes of Ian! D. Allen,他在其中讨论了这个令人困惑的概念。
这实际上意味着您的 BRP
指令将始终分支到提供的标签。
您可能会发现模拟器实际上允许负输入,但这将是对原始规范的扩展。
现在,你的代码也有这个 BRP POS
指令的问题,因为它只是跳到下一行(标记为 POS
),所以实际上是否 BRP
是否会分支:这是一个空操作。
类似的练习
由于 LMC 中并不真正存在负值,让我们做一些不同的练习:考虑以 10 的补码表示的输入,因此 500..999 被视为负值(即 -500。 ..-1).或者,当您执行 INP
时,带符号的输入值实际上将存储在 10 的补码中。然后计算小于 500(正)和不小于 500 的输入的数量(因为这些在解释为 10 的补码时为负)。
LOOP INP
BRZ FINISH
SUB COMPARE
BRP ELSE
LDA LESS
ADD ONE
STA LESS
BRA LOOP
ELSE LDA NOTLESS
ADD ONE
STA NOTLESS
BRA LOOP
FINISH LDA LESS
OUT
LDA NOTLESS
OUT
HLT
LESS DAT
NOTLESS DAT
COMPARE DAT 500
ONE DAT 1
<script src="https://cdn.jsdelivr.net/gh/trincot/lmc@v0.6/lmc.js"></script>
确保为程序提供最终的 0 值以输出结果。