LC3 N的装配方块

LC3 Assembly Square of N

您好,我正在尝试编写一个 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

如果我没记错 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 在下一行,执行会自行继续到下一行。您不必跳过源代码中的空格![=2​​5=]