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
可以是end
,second
可以是step
,third
可以是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)
Linux使用Mkdir时提示cannot create directory‘test’怎么办
为啥 useState 钩子在 useEffect() 中使用循环时不更新