如何在lc3中添加2个数字以获得4位数的总和?

时间:2015-05-08 04:30:39

标签: lc3

到目前为止,我已经制作了一个代码,可以添加2个数字,但它们是单个数字。



.orig x3000

lea r0, string1
puts
getc
out
add r1, r0, 0

ld r0, minus48
add r1, r1, r0


lea r0, string1		;input one
puts


LOOP
getc
out
add r2, r0, 0
ld r0, minus48
add r2, r2, r0

add r3, r1, r2
out


OUTSIDE

lea r0, string2		;input two
puts

ld r0, plus48
add r0, r3, r0
out

HALT
plus48 .FILL 48
minus48 .FILL -48

string1 .stringz "\nPlease enter a number: "
string2 .stringz "\nSum is: "
.end




这很好但是我一直试图让数字输入存储超过1位数,这就是我所做的:



.orig x3000

lea r0, string1		;input one
puts

LOOP
getc
out
add r1, r0, 0
brz OUTSIDE

ld r0, minus48
add r1, r1, r0
out 
brnzp LOOP 

lea r0, string1		
puts


getc
out
add r2, r0, 0
ld r0, minus48
add r2, r2, r0

add r3, r1, r2
out
OUTSIDE


lea r0, string2		;input two
puts

ld r0, plus48
add r0, r3, r0
out

HALT
plus48 .FILL 48
minus48 .FILL -48

string1 .stringz "\nPlease enter a number: "
string2 .stringz "\nSum is: "
.end




我试过使用一个循环,所以我可以输入更多的单个数字,总和最多可以计算9999.但我的循环输出奇怪的字符,但它不像我想要的那样运行,LC3非常令人困惑就像我永远花了我一样的数字,所以非常感谢帮助。

1 个答案:

答案 0 :(得分:1)

我没有详细查看您的所有代码,但我对第一个循环感到有些困惑。

LOOP
getc
out
add r1, r0, 0
brz OUTSIDE

您正在使用ASCII字符并添加0以检查我们的ASCII字符是否为空,但您无法从该用户获取空字符。

ld r0, minus48
add r1, r1, r0
out 
brnzp LOOP 

接下来的几行也需要修改。基本上,当运行这9行时,您将从键盘获取一个char,将该ASCII值转换为整数,然后将该int添加到其ASCII值。这就是为什么你会得到一个永无止境的随机字符循环。

我建议为每个基数为10的值设置几个变量。

示例:

; Stored values
NUM1_1    .FILL x0000    ; stores the last number entered by the user
NUM1_10   .FILL x0000    ; stores the 10's value
NUM1_100  .FILL x0000    ; stores the 100's value
NUM1_1000 .FILL x0000    ; stores the 1,000's

因此,如果您在用户给出数字5,382的情况下,您将5存入NUM1_1000,3存入NUM1_100,等等......然后分别添加两个数字的数字。

或者可能更容易有一个查找表,可以帮助您在用户输入时添加基数为10的值。

示例:

LookUp10       .FILL  #0
               .FILL  #10
               .FILL  #20
               .FILL  #30
               .FILL  #40
               .FILL  #50
               .FILL  #60
               .FILL  #70
               .FILL  #80
               .FILL  #90


LookUp100      .FILL  #0
               .FILL  #100
               .FILL  #200
               .FILL  #300
               .FILL  #400
               .FILL  #500
               .FILL  #600
               .FILL  #700
               .FILL  #800
               .FILL  #900

然后,您可以使用用户提供给您的数字作为所需数组中值的索引。