Assembly ASM-LC3故障排除问题未正确打印R0

Assembly ASM-LC3故障排除问题未正确打印R0,assembly,lc3,Assembly,Lc3,我有一个自我介绍问题。 问题:乘以4 x 3并打印结果 我让循环在注册表中输入正确的答案,但当我在循环后使用“OUT”时,它会打印出来□. 希望它打印“12”代码如下 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, R0, R2 ; add to sum ADD R3, R3, #-1 ; dec

我有一个自我介绍问题。 问题:乘以4 x 3并打印结果 我让循环在注册表中输入正确的答案,但当我在循环后使用“OUT”时,它会打印出来□. 希望它打印“12”代码如下

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, 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
trap指令从其ASCII码打印单个字符。在LC-3中,没有直接打印数字的trap指令-只能打印ASCII字符

如果要打印十进制数字,必须编写代码,方法是打印
1
的ASCII字符,即48,然后打印
2
的ASCII字符,即49

如果您知道某个值只有一个小数位数,您可以将其加上48,这将打印一个介于0和9之间的值

但是,如果该值大于9,LC-3将不会自动打印额外的数字(
OUT
将打印一个ASCII字符,例如,对于10,上面将打印
,因为10+48=58,这是
的ASCII代码),因此需要一个小算法来打印多个数字

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

可使用术语
itoa
(表示整数到ascii)搜索将数字转换为数字字符串(例如用于打印)的通用算法。(可使用
atoi
搜索用于将用户输入字符串读取为数字的ascii到整数的反向算法)

而且,就像你们在做连续加法乘法一样,在LC-3上,我们可以做连续减法除法