嗨,我正在编写一个lc3汇编程序,它计算一个数字的平方并将它存储在r0中,整数作为一个参数给出,并且位于r1中,我注意到在调试过程中遇到的问题是在第一次传递时它最初添加了2,但是第二次传递没有将另一个2添加到r0 --我的代码低于任何帮助。
.orig x3FF8
ld r1,n
ld r5,n
square
add r2,r1,#0
add r5,r5,#-1
add r0,r2,#0
brzp square
brn theend
theend
halt
n .fill #2
.end我的最后代码感谢帮助我的用户:
.orig x3FF8
ld r1,n
ld r5,n
square
add r2, r2,r1
add r5,r5,#-1
brp square
theend
halt
n .fill #4
.end发布于 2017-12-12 04:48:19
如果我正确地记住了LC-3语法,add r2,r1,#0会执行r2 = r1 + 0,所以它从来没有实际添加到r2中,只是用r1覆盖它。
您希望在循环之外这样的东西来初始化r2。
但是在循环中,您需要add r2, r2, r1,它执行r2 = r2 + r1,即r2 += r1。
我不明白为什么循环中也有add r0,r2,#0。如果您想在r0中获得最终结果,那么首先将其积累到r0中。如果那应该是一个和,那么你有同样的错误。
还请注意,add r5,r5,#-1必须是最后一个,以便从它为循环分支设置条件代码标志,而不是从add r0, r0, r2或循环中需要的其他任何东西中设置条件代码标志。
另外:brn theend是完全无用的:theend在下一行,执行继续到下一行。您不必跳过源中的空白!
https://stackoverflow.com/questions/47765417
复制相似问题