微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

ASM- LC3故障排除问题无法正确打印R0

如何解决ASM- LC3故障排除问题无法正确打印R0

我有ASM简介问题。 问题:乘以4 x 3并打印结果 我有将正确答案放入注册表的循环,但是当我在循环后使用“ OUT”时,它将输出□。想要在下面打印“ 12” CODE。

LD R0,reset
LD R1,reset
ADD R0,R0,#0  ;set R1 to zero
LD R2,number1
LD R3,number2





; enter loop
MULTIPLY 
ADD R0,R2 ; add to sum

ADD R3,R3,#-1 ; decrement our counter

BRp MULTIPLY ; continue until the 2nd num is 0


OUT

number1 .FILL 4
number2 .FILL 3

reset .Fill #0

解决方法

OUT陷阱指令从其ASCII代码打印单个字符。在LC-3中,没有陷阱指令可以直接打印数字-只能打印ASCII字符。

如果要以十进制格式打印数字,则必须编写代码以通过打印1的ASCII字符(即48),然后打印ASCII字符的2来实现。 49。

如果您知道某个值只有一个十进制数字长,则可以在其中添加48,这将打印一个介于0到9之间的值。

但是,如果该值大于9,LC-3将不会自动打印多余的数字({OUT将打印一个ASCII字符,例如,对于10,上述字符将打印:,因为10 + 48 = 58,这是:的ASCII码,因此您需要一种小的算法来打印多位数字。

比方说,我们希望能够打印最多2位数字。然后检查数字是否> 9(或> = 10),如果是,则将数字除以10,并打印该数字的字符,然后打印其余字符。 (如果您不进行检查,然后右移除以10,则该算法将为小于10的数字打印前导零。)

可以使用术语itoa来搜索将数字转换为数字字符串(例如,用于打印)的通用算法,该词代表整数到ascii。 (可以使用atoi搜索用于将用户输入的字符串读取为数字的反向算法,即ascii-to-integer。)

此外,就像您要通过连续加法进行乘法运算一样,在LC-3上,我们可以通过连续减法进行除法。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。