您好我正在尝试编写一个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
答案 0 :(得分:0)
如果我正确记住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
在下一行,并且继续执行下一行。你不必跳过源中的空格!