Консультация № 189809
23.09.2016, 09:20
0.00 руб.
0 1 1
Здравствуйте! У меня возникли сложности с таким вопросом:

Три массива в памяти заданы начальными адресами и длинами. Вычис-
лить и вывести на устройство вывода среднее арифметическое парамет-
ров этих массивов.Параметр массивов это номер максимального числа,размер массива n = 10;
ниже представил код что я написал,но не могу правильно написать условие выполнение подпрограммы помогите :)

Приложение:
RD #85
WR R1
RD #10
WR R2
CALL M
WR R6
RD #100
WR R1
RD #10
WR R2
CALL M
WR R7
RD #110
WR R1
RD #10
WR R2
CALL M
ADD R7
ADD R6
DIV #3
OUT
HLT
M: RD @R1
WR R3
L1:RD @R1+
JS L3
WR R4
RD R3
JZ L2
SUB R4
JS L3 >=
L2: MOV R3,R4
L3: JRNZ R2,L1
RD R3
RET

Обсуждение

давно
Посетитель
7438
7205
23.09.2016, 11:44
общий
это ответ
Здравствуйте, 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]
5
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен
Форма ответа