ASM-LC3 故障诊断问题无法正确打印 R0



我有一个介绍性 ASM 问题。 问题:乘以 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陷阱指令从其 ASCII 代码中打印单个字符。 在LC-3中,没有直接打印数字的陷阱指令 - 只能打印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。 (反向算法 ascii 到整数,用于将用户输入的字符串读取为数字,可以使用atoi进行搜索。

此外,就像您在LC-3上乘以连续加法一样,我们可以除以连续

减法。

最新更新