到目前为止,我已经编写了一个代码,将两个数字相加,但是它们是个位数。
.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行时,您将从键盘上获取一个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
然后,您可以仅使用用户给您的数字作为所需数组中值的索引。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句