我写了这个小程序,尝试添加一个从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
答案 0 :(得分:0)
问题在于您没有考虑多个数字的答案。我评论了您的代码的固定版本(下面)供您和其他人了解,因为我逐步完成了几个示例;我建议您查看ASCII Table。
对于2 + 3(按给定的方式工作),你
'2'
和'3'
的ASCII代码作为输入,将R0
设置为50
,将R1
设置为51
ADD R0, R0, R1
,将101
放入R0
48
减去R0
以获取53
,这是'5'
的ASCII代码(答案)对于5 + 6(不按指定工作),提供的代码执行此操作...
'5'
和'6'
的ASCII代码作为输入,将R0
设置为53
,将R1
设置为54
ADD R0, R0, R1
,将107
放入R0
48
减去R0
以获取59
,这是';'
的ASCII代码(不是答案)对于x + y(FIX),...
x
和y
的ASCII代码作为输入,将R0
设置为x + 48
,将R1
设置为y + 48
(自动添加) GETC
)ADD R0, R0, R1
,将x + y + 96
放入R0
48
减去R0
以获取x + y + 48
57
中减去'9'
R0
的ASCII代码,并将结果放入R1
R0 - 57 <= 0
然后R0
介于(包含)'0'
和'9'
之间(假设有效输入),那么BRnz DONE
其中{{1} (然后DONE OUT
)HALT
持有的值大于R0
时才会运行该程序,这意味着我们的答案不是一位数'9'
和R2
中,其中LD R0, p49
和p49 .fill 49
打印OUT
'1'
中输入另一个数字的ASCII代码,以便在我们到达R2
时打印,所以我们DONE OUT
修正版:
ADD R0, R2, -10