Estou tentando resolver este desafio de código:
Escreva um programa LMC que calcule a soma dos números fornecidos pelo usuário. Exiba a soma como saída antes de interromper o programa. Se o usuário forneceu menor ou igual a dez valores de entrada, some apenas os números pares. Os números ímpares são ignorados. Se o usuário tiver fornecido mais de dez valores, some apenas os números ímpares subsequentes à décima entrada. A soma existente de números pares permanecerá. Se o usuário inserir zero, em qualquer ponto, o somatório será exibido.
Por exemplo:
Valores de entrada: 3, 3, 4, 0
Resultado: 4Valores de entrada: 2, 3, 7, 0
Resultado: 2Valores de entrada: 1, 2, 3, 4, 5, 6, 7, 8, 9, 8, 7, 6, 5, 4, 3, 0 Resultado:
43
Aqui você pode ver uma execução do meu programa com a entrada do primeiro exemplo e mostra a saída como 0 (em vez do 4 esperado):
Não tenho certeza do que há de errado com o código para fornecer essa saída errada. Onde está o meu erro?
Código:
start
INP
STA input
BRZ halt
LDA inputCounter
SUB ten
BRP afterTen
// Input <= 10
LDA input
STA isEven
SUB one
BRP oddNumber
LDA isEven
ADD one
STA isEven
SUB two
BRZ evenNumber
oddNumber LDA inputCounter
ADD one
STA inputCounter
BRA start
evenNumber LDA input
ADD evenSum
STA evenSum
LDA inputCounter
ADD one
STA inputCounter
BRA start
// Input > 10
afterTen LDA input
STA isEven
SUB one
BRP evenAfterTen
LDA isEven
ADD one
STA isEven
SUB two
BRZ oddAfterTen
evenAfterTen LDA inputCounter
ADD one
STA inputCounter
BRA start
oddAfterTen LDA input
ADD oddSum
STA oddSum
LDA inputCounter
ADD one
STA inputCounter
BRA start
// Display sum
halt LDA evenSum
ADD oddSum
OUT
HLT
// Variables
evenSum DAT 0
oddSum DAT 0
inputCounter DAT 0
isEven DAT 0
input DAT 0
// Constants
one DAT 1
two DAT 2
ten DAT 10