0

嗨我正在尝试编写一个 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
4

1 回答 1

0

如果我正确地记得 LC-3 语法,add r2,r1,#0确实r2 = r1 + 0如此,所以它实际上从未添加到r2,只是用 . 覆盖它r1

您希望在循环之外r2进行类似的初始化。

但在循环内,你想要add r2, r2, r1which does r2 = r2 + r1,即r2 += r1.


我不明白为什么你也有add r0,r2,#0循环。如果您想要最终结果r0,请首先将其累积r0。如果这应该是总和,那么你有同样的错误。

另请注意,它add r5,r5,#-1必须是最后一个,因此从它为循环分支设置条件代码标志,而不是从循环中add r0, r0, r2或您在循环内需要的任何其他内容。


另外:brn theend完全没用:theend在下一行,执行自行继续到下一行。您不必跳过源代码中的空格!

于 2017-12-12T04:48:19.240 回答