Массив: вывести в файл наибольший элемент и количество нулевых элементов - Assembler
Формулировка задачи:
Есть программа, сортирует, записывает в файл массив, выводит наименьший элемент (работает), сделать вывод наибольшего элемента, и количество нулевых элементов
;== FASM code ======================= org 100h jmp start mes0 db 13,10,'ARRAY.....: $' mes1 db 13,10,'SORTED....: $' mes2 db 13,10,'MIN.EL: $' mes3 db 13,10,'MAX.EL: $' buff db 18 dup(0) fName db 'array.txt',0 start: ;------ Заполняем буфер данными ------------------------------------- mov dx,mes0 ; call message ; mov cx,18 ; всего элементов mov di,buff ; mov ah,1 ; @1: int 21h ; stosb ; запись в ES:DI loop @1 ; ;------ Сортировка массива ------------------------------------------ mov dx,mes1 ; call message ; sort: mov si,buff ; источник, mov di,si ; ..он-же приёмник mov cx,18 ; xor bx,bx ; флаг перестановок next: lodsw ; берём 2-соседнии элемента cmp ah,al ; сравниваем их jae miss ; xchg ah,al ; перестановка если меньше inc bx ; флаг +1 miss: stosw ; перезапись элементов dec si ; шаг назад dec di ; loop next ; мотаем 16 раз.. or bx,bx ; перестановки были? jnz sort ; да - начинаем всё сначала ;------ Выводим отсортированный массив на экран --------------------- mov cx,18 ; всего mov si,buff ; адрес print: lodsb ; читаем из SI int 29h ; выводим на консоль loop print ; на повтор.. ;------ Выводим на экран наименьший элемент ---------------- mov dx,mes2 ; call message ; mov cx,18 ; mov si,buff ; lodsb ; читаем байт stopmin: int 29h ; выводим найденый эл.на экран ;------ Выводим на экран наибольший элемент ---------------- mov dx,mes3 ; call message ; mov cx,18 ; mov si,buff ; lodsb ; читаем байт stopmax: int 29h ; выводим найденый эл.на экран ;------ Запись массива в файл --------------------------------------- mov ah,3Ch ; создать файл! mov cx,20h ; атрибут mov dx,fName ; int 21h ; xchg bx,ax ; отправляем дескриптор в BX mov ah,40h ; запись в файл! mov cx,18 ; кол-во байт для записи mov dx,buff ; буфер с данными int 21h ; mov ah,3Eh ; закрыть файл! int 21h ; exit: xor ax,ax ; выход.. int 16h ; int 20h ; ;ннннннннннннннннн П Р О Ц Е Д У Р Ы нннннннннннннннннннннннннннннннннннн ;------------------------------------------------------------------------ message: ; mov ah,9 ; вывод строки на экран int 21h ; ret
Решение задачи: «Массив: вывести в файл наибольший элемент и количество нулевых элементов»
textual
Листинг программы
xor ax,ax ; mov di,buff ; адрес строки mov cx,18 ; её длина mov al,'0' ; символ для поиска @@1: repne scasb ; поиск! or cx,cx ; всю строку проверили? jz @@2 ; inc ah ; счётчик нулей +1 jmp @@1 ; продолжить поиск.. @@2: shr ax,8 ; AX = результат!
Объяснение кода листинга программы
- Инициализация счётчика нулей и адреса строки: xor ax,ax; mov di,buff; mov cx,18; mov al,'0';
- Поиск первого нуля: @@1: repne scasb; or cx,cx; jz @@2; inc ah; jmp @@1;
- Завершение поиска: @@2: shr ax,8; Результат: В результате работы данного кода в переменной AX будет храниться наибольший элемент массива, а в переменной CX — количество нулевых элементов.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д