Найти максимальный элемент в массиве и количество таких элементов - Assembler

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

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

Здравствуйте, первую часть задания сделал, но вот с второй не получается разобраться. Прошу помочь. На этом форуме уже находил похожее, но не смог понять. Хотелось бы увидеть на моем примере. Вот код для поиска максимального элемента:
Листинг программы
  1. cseg segment 'code'
  2. assume cs:cseg, ds:dseg
  3. org 100h
  4. main proc
  5. mov ax, dseg ; указывает на регистр данных
  6. mov ds, ax ; указывает на регистр данных
  7. Xor si, si; инициализация счетчика
  8. mov cx, len_mas
  9. M1:
  10. mov bl, mas[si]; помещаем массив в bl
  11. cmp bl, max; сравниваем с 0 на 1 итерации
  12. JG I
  13. jmp kon
  14. I: mov max, bl
  15. kon: inc si
  16. loop M1
  17. mov al, max
  18. Call Write
  19.  
  20. Exit:
  21. mov ah, 04ch; выход из программы (функция DOS)
  22. mov al, 0h; код возврата
  23. int 21h;
  24. ret; возвращаем управление отладчику
  25. Write proc
  26. aam
  27. add ax, 3030h
  28. mov bx, ax
  29. mov ah, 02h
  30. mov dl, bh
  31. int 21h
  32. mov dl, bl
  33. int 21h
  34. ret
  35. Write ENDP
  36. main endp
  37. dseg segment
  38. mas db 10,98,99,20,21
  39. len_mas = $-mas
  40. otr db 0
  41. max db 0
  42. incmax db 0
  43. dseg ends
  44. cseg ends
  45. stk segment stack
  46. dw 256 dup (0)
  47. stk ends
  48. end main

Решение задачи: «Найти максимальный элемент в массиве и количество таких элементов»

textual
Листинг программы
  1. .model small
  2. .stack 100h
  3. .data
  4.         Mas     db      8,9,3,1,10,5,10
  5.         len_mas =       $-Mas
  6.         max     db      0
  7.         IncMax  db      0
  8.         CRLf    db      13, 10, '$'
  9. .code
  10. main    proc
  11.         mov     ax,     @data
  12.         mov     ds,     ax
  13.  
  14.         cld
  15.         lea     si,     Mas
  16.         lodsb
  17.         mov     Max,    al
  18.         mov     IncMax, 1
  19.         mov     cx,     len_mas
  20.         dec     cx
  21. @@ForI:
  22.         lodsb
  23.         cmp     al,     Max
  24.         jng     @@TestEqu
  25.         mov     Max,    al
  26.         mov     IncMax, 0
  27. @@TestEqu:
  28.         cmp     al,     Max
  29.         jne     @@Continue
  30.         inc     IncMax
  31. @@Continue:
  32.         loop    @@ForI
  33.  
  34.         mov     ah,     0
  35.         mov     al,     Max
  36.         call    Show_AX
  37.  
  38.         lea     dx,     CrLf
  39.         mov     ah,     9
  40.         int     21h
  41.  
  42.         mov     ah,     0
  43.         mov     al,     IncMax
  44.         call    Show_AX
  45.  
  46.         mov     ax,     4C00h
  47.         int     21h
  48. main    endp
  49.  
  50. ; выводит число из регистра AX на экран
  51. ; входные данные:
  52. ; ax - число для отображения
  53. Show_AX proc
  54.         push    ax
  55.         push    bx
  56.         push    cx
  57.         push    dx
  58.         push    di
  59.  
  60.         mov     cx, 10
  61.         xor     di, di          ; di - кол. цифр в числе
  62.  
  63.         ; если число в ax отрицательное, то
  64.         ;1) напечатать '-'
  65.         ;2) сделать ax положительным
  66.         or      ax, ax
  67.         jns     @@Conv
  68.         push    ax
  69.         mov     dx, '-'
  70.         mov     ah, 2           ; ah - функция вывода символа на экран
  71.         int     21h
  72.         pop     ax
  73.  
  74.         neg     ax
  75.  
  76. @@Conv:
  77.         xor     dx, dx
  78.         div     cx              ; dl = num mod 10
  79.         add     dl, '0'         ; перевод в символьный формат
  80.         inc     di
  81.         push    dx              ; складываем в стэк
  82.         or      ax, ax
  83.         jnz     @@Conv
  84.         ; выводим из стэка на экран
  85. @@Show:
  86.         pop     dx              ; dl = очередной символ
  87.         mov     ah, 2           ; ah - функция вывода символа на экран
  88.         int     21h
  89.         dec     di              ; повторяем пока di<>0
  90.         jnz     @@Show
  91.  
  92.         pop     di
  93.         pop     dx
  94.         pop     cx
  95.         pop     bx
  96.         pop     ax
  97.         ret
  98. Show_AX endp
  99.  
  100. end     main

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


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

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

14   голосов , оценка 3.714 из 5

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

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

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