Определить среднее арифметическое четных чисел, находящихся после максимального значения массива - Assembler
Формулировка задачи:
добрый день, помогите пожалуйста друзья , перевести в ассемблер
Определить среднее арифметическое четных чисел находящихся после максимального значения в массиве D[1...N]
const n=10; var d:array[1..n] of real; s:real; i,j:integer; begin write('Введите ',n,' элементов массива:'); s:=0.0; for i:=1 to n do begin read(d[i]); if (i=1) or (d[i]>d[j]) then begin s:=0.0;j:=i;end else s:=s+d[i]; end; if i-j=0 then writeln('Максимальный элемент последний!') else writeln('<S>=',s/(i-j):0:4); end.
Решение задачи: «Определить среднее арифметическое четных чисел, находящихся после максимального значения массива»
textual
Листинг программы
ORG 100h JMP start mass DB 5,19,200,31,50,64,159,11,7,80 size = $ - mass ; длина массива max DW 0 ; буфер максимального pos DW 0 ; буфер его позиции в массиве start: ;================ ПОИСК МАКСИМАЛЬНОГО ================// ;================ ..И ЕГО ПОЗИЦИИ В МАССИВЕ ==========// MOV SI,mass ; адрес массива MOV CX,size ; его размер XOR AH,AH ; обнуляем старший байт АХ @@: ; LODSB ; берём байт с массива CMP AX,[max] ; сравниваем его с переменной JB next ; меньше? пропускаем его MOV [max],AX ; сохраняем текущее число MOV [pos],SI ; ..и его позицию в массиве next: ; LOOP @b ; сл.байт... ;================ ПОИСК ЧЁТНЫХ ЧИСЕЛ =================// ;================ ..И ИХ СРЕДНЕ/АРИФМЕТИЧЕСКОГО ======// MOV SI,[pos] ; SI = адрес сл., после макс. MOV CX,SI ; расчитаем, сколько эл.осталось SUB CX,mass ; SUB CX,size ; получили отрицательное число NEG CX ; СХ = кол-во оставшихся элементов PUSH 0 0 0 ; POP AX BX DX ; очищаем нужные регистры @@: ; LODSB ; берём байт из SI TEST AL,1 ; число чётное? JNZ miss ; нет - едем дальше.. ADD BX,AX ; да - суммируем его с BX INC DX ; ..и увеличиваем счётчик. miss: ; LOOP @b ; сл.байт.. PUSH DX ; DX = кол-во чётных чисел в массиве MOV AX,BX ; AX = их сумма XOR DX,DX ; POP BX ; разделим сумму на количество DIV BX ; АХ = средне/арифметическое! exit: ; XOR AX,AX ; INT 16h ; INT 20h ;
Объяснение кода листинга программы
[Пояснения к коду]
- Массив представлен в виде строки DB 5,19,200,31,50,64,159,11,7,80
- Переменные max и pos используются для хранения максимального значения и его позиции в массиве.
- Код сначала находит максимальное значение в массиве и его позицию с помощью цикла while.
- Затем он переходит к поиску четных чисел, которые находятся после максимального значения. Для этого он использует переменные SI и CX.
- Переменная CX изначально содержит размер массива, вычитаемый из SI, чтобы получить количество оставшихся элементов.
- Код затем проверяет каждый байт в массиве, начиная с SI, чтобы определить, является ли он четным числом.
- Если число четное, оно добавляется к BX, а счетчик DX увеличивается на 1.
- После прохода по всем элементам массива, DX содержит количество четных чисел, а BX содержит их сумму.
- Среднее арифметическое вычисляется путем деления суммы на количество, используя операцию DIV.
- Код затем завершается с помощью функции INT 20h.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д