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

How to add 2 numbers in lc3 to get a sum of 4 digits?

到目前为止,我已经制作了一个添加 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 非常令人困惑,就像我花了很长时间才得到个位数的加法,所以非常感谢帮助。

我没有详细查看你的所有代码,但我对第一个循环有点困惑。

LOOP
getc
out
add r1, r0, 0
brz OUTSIDE

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

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

接下来的几行也需要修改。基本上,当这 9 行是 运行 时,您从键盘获取一个字符,将该 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,等等...然后分别将两个数字的数字相加。

或者查找 table 可能更容易,它可以帮助您在用户输入时添加以 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

那么你可以直接使用用户给你的数字作为你想要的数组中值的索引。