Поиск максимального значения в массиве - Assembler

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

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

Вечер добрый, господа! Задача: поиск максимального элемента в массиве и вывод его. Знаю, что тема уже заезженная и много тем о ней, но код не работает) Я тут пробовал написать, но чет не очень у меня не шибко работает) Может кто поможет новичку исправить код? Использую FASM.
Листинг программы
  1. org 100H
  2. mov si, -1
  3. mov bl, 0 ; хранится значение max
  4. start:
  5. inc si
  6. cmp si, 9
  7. je exit
  8. cmp [mas + si], bl
  9. jg zamena ; если эл. массива больше регистра bl (max), то вызываем замену
  10. jmp start
  11.  
  12. exit:
  13. mov ah, 02h
  14. mov dl, bl ; выводим наш максимальный эл
  15. int 21h
  16. mov ah, 0
  17. int 16h
  18. mov ax, 4C00h
  19. int 21h
  20. ret
  21.  
  22. zamena:
  23. mov bl, [mas + si] ; заменяем bl(max) на эл. массива
  24. loop start
  25.  
  26. mas db 1,2,3,4,5,6,7,8,9,5

Решение задачи: «Поиск максимального значения в массиве»

textual
Листинг программы
  1. org 100H
  2.  
  3. start:
  4.   mov cx,10
  5.   mov si,mas
  6.   sub si,1
  7.  
  8. cicl:
  9.   inc si
  10.   mov al,byte [si]
  11.   cmp al,ah
  12.   ja cicl1
  13.   jmp cicl2
  14.  
  15. cicl1:
  16.   mov ah,al
  17.  
  18. cicl2:
  19.   loop cicl
  20.  
  21. exit:
  22. ;max simvol of massive  ah
  23.  
  24.   mov dl,ah
  25.   add dl,30h
  26.  
  27.   mov ah, 02h
  28.   int 21h
  29.  
  30.   mov ah, 0
  31.   int 16h
  32.  
  33.   mov ax,4C00h
  34.   int 21h
  35.  
  36.  
  37.  
  38. mas db 1,2,3,4,5,6,7,8,9,5

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

  1. org 100H — здесь задаётся базовый адрес для сегмента (100H), в данном случае — для сегмента данных.
  2. start: — здесь начинается выполнение программы.
  3. mov cx,10 — данная команда задаёт значение счётчика (cx), которое будет использоваться в цикле.
  4. mov si,mas — здесь в качестве регистра-индекса (si) используется значение начала массива (mas).
  5. sub si,1 — здесь уменьшается значение регистра-индекса (si) на единицу, так как счёт начинается с нуля.
  6. cicl: — здесь начинается цикл.
  7. inc si — увеличивается значение регистра-индекса (si) на единицу.
  8. mov al,byte [si] — в регистр (al) записывается значение байта, который находится по индексу (si) в массиве.
  9. cmp al,ah — сравниваются значения регистра (al) и аккумулятора (ah).
  10. ja cicl1 — если значение регистра (al) больше значения аккумулятора (ah), то происходит переход на метку cicl1.
  11. jmp cicl2 — в противном случае происходит переход на метку cicl2.
  12. cicl1: — здесь выполняются действия, которые будут выполняться при каждом превышении значения регистра (al) значения аккумулятора (ah).
  13. mov ah,al — значение регистра (al) копируется в аккумулятор (ah).
  14. cicl2: — здесь выполняются действия, которые будут выполняться после каждой итерации цикла.
  15. loop cicl — здесь происходит проверка условия цикла (cicl), и если оно истинно, то происходит переход на начало цикла (cicl).
  16. mov dl,ah — в регистр (dl) записывается значение аккумулятора (ah), которое содержит максимальное значение.
  17. add dl,30h — к значению регистра (dl) добавляется значение 30h, чтобы получить ASCII-код символа для максимального значения.
  18. mov ah, 02h — в регистр (ah) записывается значение 02h, которое используется для вывода ASCII-кода.
  19. int 21h — происходит ввод/вывод команды, которая выводит ASCII-код на экран.
  20. mov ah, 0 — в регистр (ah) записывается значение 0, которое используется для вывода символа новой строки.
  21. int 16h — происходит ввод/вывод команды, которая выводит символ новой строки на экран.
  22. mov ax,4C00h — в регистры (ax) записывается значение 4C00h, которое является кодом завершения работы программы.
  23. int 21h — происходит ввод/вывод команды, которая завершает работу программы. Таким образом, в данном коде выполняется поиск максимального значения в массиве, и выводится ASCII-код символа и само значение на экран.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

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

8   голосов , оценка 4.125 из 5

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

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

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