Сколько раз в массиве повторяется максимальный элемент - Assembler

Узнай цену своей работы

Формулировка задачи:

Здравствуйте, не могли бы помочь с программой, не идет и все..
Program abczdarova
Uses crt;
Const N=10
Var A:array[1..N] of integer;
i:1..N;
Begin
Randomize;
For i:1 to N do
Begin 
A[i]:=random(10);
Writeln(A[i]:4);
Write('Massiv A:');
Write(A[i]);
End;
Asm
LEA SI, A
Mov AX, [SI]
Mov DX, 1
Mov CX, N
Mov BX, 0
@1: CMP AX, [SI+DX]
JLE @2
Mov AX, [SI+DX]
Mov BX, 0
Inc DX
Loop @1
@2: inc DX
Inc BX
CMP AX, [SI+BX]
JLE @2
Mov AX, [SI+DX]
Mov BX, 0
JMP @1
End;
For i:=1 to N do
Writeln('макс элемент' AX 'встречается ' BX 'раз');
Readln;
end.
а как исправить?

Решение задачи: «Сколько раз в массиве повторяется максимальный элемент»

textual
Листинг программы
program abczdarova;
 
uses
  crt;
 
const
  N = 10;
var
  A: array[1..N] of integer;
  i: 1..N;
  Count, Max: integer;
begin
  Randomize;
  for i := 1 to N do
  begin
    A[i] := random(10);
    Writeln(A[i]: 4);
    Write('Massiv A:');
    Write(A[i]);
  end;
  writeln;
  asm
    LEA SI, A
    MOV AX, [SI]
    MOV DX, 1
    MOV CX, N
    DEC CX
    ADD SI, 2
    @1:
    CMP AX, [SI]
    JNE @2
    INC DX
    JMP @3
    @2:
    JG @3
    MOV AX, [SI]
    MOV DX, 1
 
    @3:
 
    ADD SI, 2
    LOOP @1
 
    MOV Count,DX
    MOV Max, AX
  end;
  Writeln('макс элемент ', Max, ' встречается ', Count, ' раз');
  Readln;
end.

Объяснение кода листинга программы

  1. Объявляется переменная N и инициализируется значением 10.
  2. Объявляется массив A типа integer со значениями от 1 до N.
  3. Объявляется переменная i типа 1..N для использования в цикле.
  4. Объявляются переменные Count и Max типа integer для хранения количества повторений максимального элемента и его значения.
  5. Производится инициализация генератора случайных чисел.
  6. В цикле от 1 до N для каждого элемента массива:
    • Генерируется случайное значение и помещается в массив A[i].
    • Значение A[i] выводится на экран.
  7. Используется ассемблерный блок:
    • При помощи инструкции LEA адрес массива A помещается в SI.
    • AX инициализируется значением первого элемента массива.
    • Устанавливается начальное значение счетчика повторений DX в 1.
    • CX устанавливается в N, количество элементов массива.
    • В цикле происходит сравнение текущего значения с максимальным элементом и увеличивается счетчик DX при равенстве.
    • При нахождении большего элемента, AX инициализируется этим значением и счетчик DX устанавливается в 1.
    • Происходит увеличение адреса массива SI и проверка на конец цикла.
    • Данные из ассемблерного блока копируются в переменные Count и Max.
  8. Выводится на экран число Max (максимальный элемент массива) и количество его повторений Count. P.S. Код написан на Pascal с использованием вставок на ассемблере.

Оцени полезность:

10   голосов , оценка 4 из 5
Похожие ответы