LC-3在添加后用两个数字打印结果

时间:2015-09-15 23:22:22

标签: assembly ascii lc3

我写了这个小程序,尝试添加一个从0到9的数字并打印结果。

它有一个错误:如果结果超过9,它会显示一些疯狂的角色。我不确定解决这个问题的正确方法。

.orig x3000
ld r6, m48

lea r0, id
puts

lea r0, numberone
puts

getc
out
add r1, r0, 0


lea r0, numbertwo
puts

getc
out
add r2, r0, 0

lea r0, line

puts 
add r0, r1, 0
out

lea r0, display
puts
add r0, r2, 0
out

lea r0, equalization
puts

lea r0, result
puts
add r0, r2, r1
add r0, r0, r6
out

halt

id      .stringz "------"
numberone   .stringz "\nPlease enter first number"
numbertwo   .stringz "\nPlease enter second number"
display     .stringz " + "
line        .stringz "\n----: "
equalization    .stringz "\nanswer: "
m48 .fill -48
result      .stringz "  "

.end

1 个答案:

答案 0 :(得分:0)

问题在于您没有考虑多个数字的答案。我评论了您的代码的固定版本(下面)供您和其他人了解,因为我逐步完成了几个示例;我建议您查看ASCII Table

对于2 + 3(按给定的方式工作),你

  1. 获取'2''3'的ASCII代码作为输入,将R0设置为50,将R1设置为51
  2. ADD R0, R0, R1,将101放入R0
  3. 48减去R0以获取53,这是'5'的ASCII代码(答案)
  4. 对于5 + 6(不按指定工作),提供的代码执行此操作...

    1. 获取'5''6'的ASCII代码作为输入,将R0设置为53,将R1设置为54
    2. ADD R0, R0, R1,将107放入R0
    3. 48减去R0以获取59,这是';'的ASCII代码(不是答案)
    4. 对于x + y(FIX),...

      1. 获取xy的ASCII代码作为输入,将R0设置为x + 48,将R1设置为y + 48(自动添加) GETC
      2. ADD R0, R0, R1,将x + y + 96放入R0
      3. 48减去R0以获取x + y + 48
      4. 57中减去'9' R0的ASCII代码,并将结果放入R1
      5. 我们知道如果R0 - 57 <= 0然后R0介于(包含)'0''9'之间(假设有效输入),那么BRnz DONE其中{{1} (然后DONE OUT
      6. 此时,仅当HALT持有的值大于R0时才会运行该程序,这意味着我们的答案不是一位数
      7. 因为问题指定加数是&#34;从0到9,&#34;我们知道任何非一位数的有效答案必须是10到18,因此我们将数字存储在'9'R2中,其中LD R0, p49p49 .fill 49打印OUT
      8. 唯一要做的就是在'1'中输入另一个数字的ASCII代码,以便在我们到达R2时打印,所以我们DONE OUT
      9. 修正版:

        ADD R0, R2, -10