Вычисление среднего, нахождение мин / макс на языке ассемблера Мари
Я пытаюсь найти способ сохранить минимальное и максимальное из 10 чисел, которые вводит пользователь. Я не ищу в массиве чисел, а хочу сравнить каждое входное число, которое появляется перед тем, как добавить его к другим числам. Код, который я сделал ниже, сложит все входные числа вместе и затем вычтет, чтобы получить среднее значение, но я также хочу вывести min и max, и я не уверен, как это сделать.
Числа, которые будут введены: 10 20 30 40 50 60 70 80 90 100.
Таким образом, в настоящее время код выводит только среднее значение, которое составляет 55
ORG 100
LOOP, LOAD X /counter
SUBT TEN
SKIPCOND 000 /if X = 10
JUMP LOOP2 /take average after X = 10;
CLEAR /BEGIN INPUTING NUMBERS FOR AVERAGE
INPUT
ADD Y /add Y to the input
STORE Y /save new value
CLEAR
LOAD X /INCREMENT COUNTER
ADD ONE
STORE X
CLEAR
JUMP LOOP /RESTART LOOP
LOOP2, LOAD Y /LOAD ALL THE ADDED NUMBERS
SKIPCOND 800 /WHEN Y = 0
JUMP PRINT /GO TO OUTPUT
SUBT TEN /SUBTRACT 10 UNTIL REACH 0
STORE Y /STORE NEW NUMBER
CLEAR
LOAD AVERAGE /EACH LOOP ADD 1 TO AVERAGE
ADD ONE
STORE AVERAGE
CLEAR
JUMP LOOP2
PRINT, LOAD AVERAGE
OUTPUT
HALT
TEN, DEC 10
ONE, DEC 1
X, DEC 0 /USE TO INPUT 10 NUMBERS, COUNTER
Y, DEC 0 /ALL NUMBERS INPUT ADDED
MIN, DEC 0
MAX, DEC 0
AVERAGE, DEC 0 /AVERAGE OF Y DIVIDED BY X
1 ответ
Это решение взято из вопроса ОП. (это было отредактировано)
LOOP, LOAD X
SUBT TEN
SKIPCOND 000 /if X = 10
JUMP LOOP2 /take average after X = 10;
CLEAR /BEGIN INPUTING NUMBERS FOR AVERAGE
INPUT
STORE TEMP
CLEAR
IF, LOAD X
SUBT 1
SKIPCOND 800
JUMP STOREFIRST
CLEAR
LOAD TEMP
SUBT MIN
SKIPCOND 000
JUMP FINDMAX
ELSE, SKIPCOND 800
JUMP FINDMIN
CONTINUE, CLEAR
LOAD TEMP
ADD Y /add Y to the input
STORE Y /save new value
CLEAR
LOAD X /INCREMENT COUNTER
ADD ONE
STORE X
CLEAR
JUMP LOOP /RESTART LOOP
FINDMAX, CLEAR
LOAD TEMP
STORE MAX
JUMP CONTINUE
FINDMIN, CLEAR
LOAD TEMP
STORE MIN
JUMP CONTINUE
STOREFIRST, LOAD TEMP
STORE MIN
STORE MAX
JUMP CONTINUE
LOOP2, LOAD Y /LOAD ALL THE ADDED NUMBERS
SKIPCOND 800 /WHEN Y = 0
JUMP PRINT /GO TO OUTPUT
SUBT TEN /SUBTRACT 10 UNTIL REACH 0
STORE Y /STORE NEW NUMBER
CLEAR
LOAD AVERAGE /EACH LOOP ADD 1 TO AVERAGE
ADD ONE
STORE AVERAGE
CLEAR
JUMP LOOP2
PRINT, LOAD AVERAGE
OUTPUT
CLEAR
LOAD MIN
OUTPUT
CLEAR
LOAD MAX
OUTPUT
CLEAR
HALT
TEN, DEC 10
ONE, DEC 1
X, DEC 0 /USE TO INPUT 10 NUMBERS, COUNTER
Y, DEC 0 /ALL NUMBERS INPUT ADDED
MIN, DEC 0
MAX, DEC 0
TEMP, DEC 0
AVERAGE, DEC 0 /AVERAGE OF Y DIVIDED BY X