LC3大会广场N

时间:2017-12-12 04:35:02

标签: assembly low-level lc3 lc3-trap

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

1 个答案:

答案 0 :(得分:0)

如果我正确记住LC-3语法,add r2,r1,#0r2 = 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在下一行,并且继续执行下一行。你不必跳过源中的空格!