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

乔治·卡瓦列武(George Cavalevu)

到目前为止,我已经编写了一个代码,将两个数字相加,但是它们是个位数。

.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令人困惑,就像我花了很长时间一样以获得一位数字的加法,因此非常感谢您的帮助。

克里斯·M

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

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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何使用 itertools 获得 3 位或 4 位数字的排列?

如何获得一个数字的中间5位数字

如何在每3位数字后添加逗号?

如何在每3位数字后添加点(。)?

在二进制 LC3 中打印出 16 位数字

从1到4位数字中提取2个数字

用户键入时如何在本机TextInput中的每3位数字中添加点?

如何在Matlab中显示4位数字?

如何在python中创建4位数字的密码?

如何在C中将2个4位无符号数字组合为1个8位数字

如何根据文本中的前三个数字找到一个10位数字?Python

如何用2位数字和4个字母创建6位OTP?

C ++如何在32位数字中更改4位的值

生成一个小于4位数字的随机数,但它具有1位,2位或3位数字的概率相等

如何在5位数字上添加小数

如何在逗号(。)后仅允许2位数字和1位数字?

如何在每三位数字后添加一个逗号?

在每3位数字中为货币添加一个点

将文本框中的数字分成 4 组数字,每个数字都得到它的总和,并组合每个组中每个总和的所有最后一位数字

如何在列中过滤4个数字

您如何识别文本中的一组2位或3位数字?PostgreSQL的

正则表达式2个字母和3、4或5位数字

如何将N个数字分成N / 2组(每组2个数字),以使每组中2个数字之间的差总和最小?

给定4位数字,如何在屏幕上打印该数字的单位,十,十万个?

Java中2个6位数字的乘法

使用数组更改3位数字中的每个数字

如何在FreeSwitch中拨打10位数字的电话?

如何在SAS中读取12位数字

如何在HTML文本框中仅允许4位数字?