В массиве из двадцати элементов найти минимальный элемент из нечетных и вывести его номер - Assembler
Формулировка задачи:
Все элементы массива ввести с клавиатуры, ответ вывести на экран.
В массиве из двадцати элементов найти минимальный элемент из нечетных и вывести его номер.
Решение задачи: «В массиве из двадцати элементов найти минимальный элемент из нечетных и вывести его номер»
textual
Листинг программы
- ; В массиве из 20 элементов
- ; найти мин.элемент из нечетных и вывести его, и его номер.
- ;-----------------------------------------------------------
- ;fasm code....
- org 100h
- jmp start
- mess0 db 13,10,' Array: $'
- mess1 db 13,10,' Min..: $'
- mess2 db 13,10,' Index: $'
- buff db 20 dup(0) ; буфер для ввода
- start: mov ah,9 ; запрос на ввод массива
- mov dx,mess0 ;
- int 21h ;
- mov cx,20 ; чисел для ввода
- mov di,buff ; адрес приёмника чисел
- push cx di ; ..запомним эти значения в стеке
- input: xor ax,ax ; ввод без эхо!
- int 16h ;
- cmp al,'0' ; фильт чисел..
- jb input ; пропустить, если меньше нуля
- cmp al,'9' ;
- ja input ; ..и больше девяти
- int 29h ; выводим символ на экран
- and ax,0fh ; переводим символ в число
- stosb ; сохраняем число в буфере
- loop input ; мотаем цикл СХ-раз..
- pop si cx ; снимаем со-стека длину и адрес источника
- mov ah,0feh ; AH будет мин. Пока ставим его на макс.
- xor bx,bx ; BL будет номер (индекс,позиция) числа,
- ; BH будет индекс минимального
- cycle: lodsb ; берём очередное число
- inc bl ; индекс +1
- test al,1 ; проверяем число на нечётное
- jz next ; пропускаем чётные..
- cmp al,ah ; сравниваем с предыдущим
- jae next ; пропустить, если больше/равно
- xchg ah,al ; иначе: отправляем число в АХ
- mov bh,bl ; ..и запомним его индекс
- next: loop cycle ; мотаем цикл СХ-раз
- shr ax,8 ; АХ = минимальное нечётное
- shr bx,8 ; ВХ = его индекс в строке
- push bx ax ; запомним..
- mov ah,9 ; мессага!
- mov dx,mess1 ;
- int 21h ;
- pop ax ; минимальное
- mov bx,10 ; система счисления для вывода
- call hex2asc ; выводим его на экран!
- mov ah,9 ; мессага!
- mov dx,mess2 ;
- int 21h ;
- pop ax ; индекс
- mov bx,10 ; система счисления для вывода
- call hex2asc ; выводим его на экран!
- exit: xor ax,ax ; ждём любую клавишу..
- int 16h ;
- int 20h ; выход!
- ;---------------------------------------------------------------------
- hex2asc: ; Функция переводит числа в символы
- pusha ; Вход: АХ = число, BX = система счисления
- xor cx,cx ; Выход: на экране
- isDiv: xor dx,dx ;
- div bx ;
- push dx ;
- inc cx ;
- or ax,ax ;
- jnz isDiv ;
- isOut: pop ax ;
- cmp al,9 ;
- jle noHex ;
- add al,7 ;
- noHex: add al,30h ;
- int 29h ;
- loop isOut ;
- popa ;
- ret ;
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д