Я пишу программу сборки на машине LC3.
Моя программа сборки представляет собой программу LC3, которая умножает R2 и R3 и сохраняет результат в R1.
Вот мой исходный код (с комментариями)
;Sets pc to this address at start of program
.ORIG x3000
;R1 will store the result lets clear it(ANd with 0)
AND R1,R1,x0
;R2 will be multiplied by R3, let's clear both of them
AND R2,R2,x0
AND R3,R3,x0
;Test case 4 * 3 = 12;
ADD R2,R2,4
ADD R3,R3,3
;Add to increment zone
LOOP Add R1,R1,R2;
;Decrement the counter, in this case the 3 or R3
ADD R3,R3,x-1
BrP LOOP
HALT
.END
Мой тестовый пример умножает 4 * 3. Результат должен быть 12, и он должен храниться в R1. Однако, когда я запускаю эту программу в симуляторе LC3, вот что я получаю на выходе
R3 содержит правильное значение в конце, но R1 содержит -1... Кто-нибудь видит проблему с моим кодом? Я обязательно очистил R1 в начале и продолжал добавлять R3 к R1 и сохранять результат в R1, пока счетчик R3 или 3 в этом случае больше нуля.