Массив: вывести в файл наибольший элемент и количество нулевых элементов - Assembler

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

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

Есть программа, сортирует, записывает в файл массив, выводит наименьший элемент (работает), сделать вывод наибольшего элемента, и количество нулевых элементов
Листинг программы
  1. ;== FASM code =======================
  2. org 100h
  3. jmp start
  4. mes0 db 13,10,'ARRAY.....: $'
  5. mes1 db 13,10,'SORTED....: $'
  6. mes2 db 13,10,'MIN.EL: $'
  7. mes3 db 13,10,'MAX.EL: $'
  8. buff db 18 dup(0)
  9. fName db 'array.txt',0
  10. start:
  11. ;------ Заполняем буфер данными -------------------------------------
  12. mov dx,mes0 ;
  13. call message ;
  14. mov cx,18 ; всего элементов
  15. mov di,buff ;
  16. mov ah,1 ;
  17. @1: int 21h ;
  18. stosb ; запись в ES:DI
  19. loop @1 ;
  20. ;------ Сортировка массива ------------------------------------------
  21. mov dx,mes1 ;
  22. call message ;
  23. sort: mov si,buff ; источник,
  24. mov di,si ; ..он-же приёмник
  25. mov cx,18 ;
  26. xor bx,bx ; флаг перестановок
  27. next: lodsw ; берём 2-соседнии элемента
  28. cmp ah,al ; сравниваем их
  29. jae miss ;
  30. xchg ah,al ; перестановка если меньше
  31. inc bx ; флаг +1
  32. miss: stosw ; перезапись элементов
  33. dec si ; шаг назад
  34. dec di ;
  35. loop next ; мотаем 16 раз..
  36. or bx,bx ; перестановки были?
  37. jnz sort ; да - начинаем всё сначала
  38. ;------ Выводим отсортированный массив на экран ---------------------
  39. mov cx,18 ; всего
  40. mov si,buff ; адрес
  41. print: lodsb ; читаем из SI
  42. int 29h ; выводим на консоль
  43. loop print ; на повтор..
  44. ;------ Выводим на экран наименьший элемент ----------------
  45. mov dx,mes2 ;
  46. call message ;
  47. mov cx,18 ;
  48. mov si,buff ;
  49. lodsb ; читаем байт
  50. stopmin: int 29h ; выводим найденый эл.на экран
  51. ;------ Выводим на экран наибольший элемент ----------------
  52. mov dx,mes3 ;
  53. call message ;
  54. mov cx,18 ;
  55. mov si,buff ;
  56. lodsb ; читаем байт
  57. stopmax: int 29h ; выводим найденый эл.на экран
  58. ;------ Запись массива в файл ---------------------------------------
  59. mov ah,3Ch ; создать файл!
  60. mov cx,20h ; атрибут
  61. mov dx,fName ;
  62. int 21h ;
  63. xchg bx,ax ; отправляем дескриптор в BX
  64. mov ah,40h ; запись в файл!
  65. mov cx,18 ; кол-во байт для записи
  66. mov dx,buff ; буфер с данными
  67. int 21h ;
  68. mov ah,3Eh ; закрыть файл!
  69. int 21h ;
  70. exit: xor ax,ax ; выход..
  71. int 16h ;
  72. int 20h ;
  73. ;ннннннннннннннннн П Р О Ц Е Д У Р Ы нннннннннннннннннннннннннннннннннннн
  74. ;------------------------------------------------------------------------
  75. message: ;
  76. mov ah,9 ; вывод строки на экран
  77. int 21h ;
  78. ret

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

textual
Листинг программы
  1.      xor   ax,ax        ;
  2.      mov   di,buff      ; адрес строки
  3.      mov   cx,18        ; её длина
  4.      mov   al,'0'       ; символ для поиска
  5. @@1: repne scasb        ; поиск!
  6.      or    cx,cx        ; всю строку проверили?
  7.      jz    @@2          ;
  8.      inc   ah           ; счётчик нулей +1
  9.      jmp   @@1          ; продолжить поиск..
  10. @@2: shr   ax,8         ; AX = результат!

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

  1. Инициализация счётчика нулей и адреса строки: xor ax,ax; mov di,buff; mov cx,18; mov al,'0';
  2. Поиск первого нуля: @@1: repne scasb; or cx,cx; jz @@2; inc ah; jmp @@1;
  3. Завершение поиска: @@2: shr ax,8; Результат: В результате работы данного кода в переменной AX будет храниться наибольший элемент массива, а в переменной CX — количество нулевых элементов.

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


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

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

15   голосов , оценка 3.667 из 5

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

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

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