Здравствуйте, freeflowmc!
Подробные комментарии в коде
[code lang=asm h=200]
;Три массива в памяти заданы начальными адресами и длинами.
;Вычислить и вывести на устройство вывода среднее арифметическое
;параметров этих массивов.Параметр массивов это номер максимального числа,размер массива n = 10;
RD #85
WR R1
RD #10
WR R2
CALL M
WR R6 ;сохраним первый индекс максимального
RD #100
WR R1
RD #10
WR R2
CALL M
ADD R6 ;сложим с предыдущим!
WR R6 ;сохраним там же
RD #110
WR R1
RD #10
WR R2
CALL M
ADD R6 ;сложим с суммой первых двух
DIV #3
OUT
HLT
;п/п вычисления индекса максимального элемента
M:MOV R4,R1 ;сохраним адрес массива, надо для вычисления индекса
RD @R1+ ;читаем первого
MOV R0,R1 ;сохраним адрес ЗА первым, как индекс максимального
WR R3 ;здесь будет значение максимального элемента
JRNZ R2,L1 ;вот таким "хитрым"" способом уменьшим счетчик R2 на 1
L1:RD @R1+ ;читаем очередного текущего
WR R7 ;сохраним для будущего
SUB R3 ;проверяем больше ли текущий максимального
JZ L3 ;равного обходим
JS L3 ;меньше - обходим
MOV R0,R1 ;для большего сохраним адрес ЗА значением
RD R7 ;сохраненное значение текущего
WR R3 ;будет новым максимальным
L3: JRNZ R2,L1 ;по всем элементам
RD R0 ;адрес ЗА максимальным
SUB R4 ;отняв сохраненный адрес начала, получим индекс ЗА максимальным (или счет с 1)
SBI #1 ;отняв 1, получим индекс, считая с 0!.
RET ;Если надо считать номер первого, как 1, то предыдущую команду убрать!
[/code]
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен