Warum setzt mein Assemblerprogramm r1 nicht auf den richtigen Wert?

Ich schreibe ein Assemblerprogramm auf der LC3-Maschine.

Mein Assemblerprogramm ist ein LC3-Programm, das R2 und R3 multipliziert und das Ergebnis in R1 speichert.

Hier ist mein Quellcode (mit Kommentaren)

;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

Mein Testfall multipliziert 4 * 3. Das Ergebnis sollte 12 sein und in R1 gespeichert werden. Wenn ich dieses Programm in meinem LC3-Simulator starte, bekomme ich das für die Ausgabe

R3 enthält am Ende den korrekten Wert, aber R1 enthält -1 .... Stellt jemand ein Problem mit meinem Code fest? Ich habe zu Beginn darauf geachtet, R1 zu löschen und weiterhin R3 zu R1 zu addieren und das Ergebnis in R1 zu speichern, während der Zähler R3 oder 3 in diesem Fall größer als Null is

Antworten auf die Frage(2)

Ihre Antwort auf die Frage