Устранение неполадок 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, 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

person kjk2017    schedule 16.09.2020    source источник


Ответы (1)


Инструкция OUT trap печатает один символ из своего кода ASCII. В LC-3 нет инструкции trap для прямой печати чисел — можно печатать только символы ASCII.

Если вы хотите напечатать десятичное число, вам нужно написать код для этого, напечатав символ ASCII для 1, что равно 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. (Обратный алгоритм, ascii-to-integer, используемый для чтения введенных пользователем строк в числа, можно найти с помощью atoi.)

Далее, точно так же, как вы выполняете умножение последовательным сложением, на LC-3 мы можем выполнять деление последовательным вычитанием.

person Erik Eidt    schedule 16.09.2020