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

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

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

Здравствуйте, не могли бы помочь с программой, не идет и все..
Листинг программы
  1. Program abczdarova
  2. Uses crt;
  3. Const N=10
  4. Var A:array[1..N] of integer;
  5. i:1..N;
  6. Begin
  7. Randomize;
  8. For i:1 to N do
  9. Begin
  10. A[i]:=random(10);
  11. Writeln(A[i]:4);
  12. Write('Massiv A:');
  13. Write(A[i]);
  14. End;
  15. Asm
  16. LEA SI, A
  17. Mov AX, [SI]
  18. Mov DX, 1
  19. Mov CX, N
  20. Mov BX, 0
  21. @1: CMP AX, [SI+DX]
  22. JLE @2
  23. Mov AX, [SI+DX]
  24. Mov BX, 0
  25. Inc DX
  26. Loop @1
  27. @2: inc DX
  28. Inc BX
  29. CMP AX, [SI+BX]
  30. JLE @2
  31. Mov AX, [SI+DX]
  32. Mov BX, 0
  33. JMP @1
  34. End;
  35. For i:=1 to N do
  36. Writeln('макс элемент' AX 'встречается ' BX 'раз');
  37. Readln;
  38. end.
а как исправить?

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

textual
Листинг программы
  1. program abczdarova;
  2.  
  3. uses
  4.   crt;
  5.  
  6. const
  7.   N = 10;
  8. var
  9.   A: array[1..N] of integer;
  10.   i: 1..N;
  11.   Count, Max: integer;
  12. begin
  13.   Randomize;
  14.   for i := 1 to N do
  15.   begin
  16.     A[i] := random(10);
  17.     Writeln(A[i]: 4);
  18.     Write('Massiv A:');
  19.     Write(A[i]);
  20.   end;
  21.   writeln;
  22.   asm
  23.     LEA SI, A
  24.     MOV AX, [SI]
  25.     MOV DX, 1
  26.     MOV CX, N
  27.     DEC CX
  28.     ADD SI, 2
  29.     @1:
  30.     CMP AX, [SI]
  31.     JNE @2
  32.     INC DX
  33.     JMP @3
  34.     @2:
  35.     JG @3
  36.     MOV AX, [SI]
  37.     MOV DX, 1
  38.  
  39.     @3:
  40.  
  41.     ADD SI, 2
  42.     LOOP @1
  43.  
  44.     MOV Count,DX
  45.     MOV Max, AX
  46.   end;
  47.   Writeln('макс элемент ', Max, ' встречается ', Count, ' раз');
  48.   Readln;
  49. 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

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы