Assembly 小人电脑赢了';循环时,t分支位于零
所以我在LMC中创建了一个东西,我从5数到17,并显示奇数。我已经完成了代码,但是当我尝试在零分支时,当代码达到17时,它将不起作用,并且它将继续输出超过17。我试图做到这一点的方法是在循环的每次迭代之前减去17,最终当我使用的计数变量hit的17时,17将被减去,它将在0处分支,从而停止程序。有谁能告诉我为什么这不起作用,也许是我做这件事的顺序Assembly 小人电脑赢了';循环时,t分支位于零,assembly,little-man-computer,Assembly,Little Man Computer,所以我在LMC中创建了一个东西,我从5数到17,并显示奇数。我已经完成了代码,但是当我尝试在零分支时,当代码达到17时,它将不起作用,并且它将继续输出超过17。我试图做到这一点的方法是在循环的每次迭代之前减去17,最终当我使用的计数变量hit的17时,17将被减去,它将在0处分支,从而停止程序。有谁能告诉我为什么这不起作用,也许是我做这件事的顺序 lda third print out sub first brz done lda thi
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
我不知道是什么导致了这个问题,但是当我第一次改为11时,它在17时停止了。我不知道为什么会有这种差异,但对我来说是有效的:D只是一个小小的建议。如果您使用传达含义的变量名,则会使程序更具可读性。例如,
第一个
可以是结束
,第二个
可以是步骤
,第三个
可以是开始
。它使它更具可读性,并且可能更容易理解您的程序为何以这种方式运行。如果试图计数到17位小数,则应使用17位小数,而不是0x17位十六进制。0x11是17位十进制的十六进制,这就是它工作的原因。我个人认为您错过了0x
表示十六进制(而非十进制)值的事实。非常感谢您的澄清!从现在起我肯定会使用十进制值,除非我真的需要十六进制值。小心!你的教授读了这些,我认识布朗先生,哈哈。我已经知道代码是有效的,我只是不明白为什么我写这篇文章。正如迈克尔·佩奇指出的,你把十六进制(0x..)和十进制搞混了。所以0x11=17十进制
谢谢!我的朋友明白了,也告诉了我。