Por que meu programa de montagem não está configurando r1 para o valor correto?

Estou escrevendo um programa de montagem na máquina LC3.

Meu programa de montagem é um programa LC3 que multiplica R2 e R3 e armazena o resultado em R1.

Aqui está o meu código fonte (com comentários)

;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

Meu caso de teste está multiplicando 4 * 3. O resultado deve ser 12 e deve ser armazenado em R1. No entanto, quando executo este programa no meu simulador LC3, é isso que recebo pela saída

R3 mantém o valor correto no final, mas R1 mantém -1 ... Alguém vê algum problema com meu código? Fiz questão de limpar R1 no início e continuar adicionando R3 a R1 e armazenando o resultado em R1, enquanto o contador, R3 ou 3 nesse caso é maior que zero.

questionAnswers(1)

yourAnswerToTheQuestion