Little Man Computer 在循环时不会在零处分支

Posted

技术标签:

【中文标题】Little Man Computer 在循环时不会在零处分支【英文标题】:Little Man Computer won't branch at zero when looping 【发布时间】:2016-02-16 21:25:41 【问题描述】:

所以我在 LMC 中创建了一个东西,我从 5 数到 17 并显示奇数。我已经完成了代码,但是当我尝试在代码达到 17 时在零处分支时,它将不起作用,并且它将继续输出超过 17。我尝试这样做的方法是在每次迭代之前减去 17循环,最终当我使用的计数变量命中的 17、17 将被减去,它将在 0 处分支,停止程序。谁能告诉我为什么这不起作用,也许是我这样做的顺序?

       lda third
print  out
       sub first
       brz done
       lda third
       add second
       sto third
       br  print
done   hlt

first  dat 0x17
second dat 0x02
third  dat 0x05

【问题讨论】:

只是一点建议。如果您使用传达含义的变量名,它会使您的程序更具可读性。例如first 可以是endsecond 可以是stepthird 可以是start。它使它更具可读性,并且可能更容易理解为什么您的程序会以它的方式运行。 另一条评论是 0x17 是十六进制,也就是十进制的 23。如果您尝试计数到十进制 17,那么您应该使用十进制 17 而不是 0x17 十六进制。 0x11 是十进制 17 的十六进制,这就是它起作用的原因。我个人认为你已经错过了 0x 表示十六进制值(不是十进制)的事实 非常感谢您的澄清!从现在开始我肯定会使用十进制值,除非我真的需要十六进制值。 当心!你的教授会读这些。 我认识布朗先生哈哈。我已经知道代码有效,只是不明白为什么我发了这个帖子。 【参考方案1】:

我不知道是什么导致了问题,但是当我首先更改为 11 时,它在 17 处停止。我不知道为什么差异会起作用,但对我有用:D

【讨论】:

正如 Michael Petch 指出的那样,您将 HEXADECIMAL (0x..) 与 DECIMAL 混淆了。所以0x11 = 17 decimal 谢谢!我的朋友发现了这一点并告诉了我。

以上是关于Little Man Computer 在循环时不会在零处分支的主要内容,如果未能解决你的问题,请参考以下文章

《人月神话》(The Mythical Man-Month)5画蛇添足(The Second-System Effect)

CF1534C Little Alawn's Puzzle

Linux使用Mkdir时提示cannot create directory‘test’怎么办

为啥 useState 钩子在 useEffect() 中使用循环时不更新

如果在 Xeon Phi 上编译时不知道循环计数,则性能下降

为啥通过for循环插入时List中的代表总是相等但没有循环时不相等