В массиве из двадцати элементов найти минимальный элемент из нечетных и вывести его номер - 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 ;
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д