В массиве из двадцати элементов найти минимальный элемент из нечетных и вывести его номер - Assembler

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

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

Все элементы массива ввести с клавиатуры, ответ вывести на экран. В массиве из двадцати элементов найти минимальный элемент из нечетных и вывести его номер.

Решение задачи: «В массиве из двадцати элементов найти минимальный элемент из нечетных и вывести его номер»

textual
Листинг программы
  1. ; В массиве из 20 элементов
  2. ; найти мин.элемент из нечетных и вывести его, и его номер.
  3. ;-----------------------------------------------------------
  4. ;fasm code....
  5. org  100h
  6. jmp  start
  7.  
  8. mess0   db   13,10,' Array: $'
  9. mess1   db   13,10,' Min..: $'
  10. mess2   db   13,10,' Index: $'
  11. buff    db   20 dup(0)       ; буфер для ввода
  12.  
  13. start:  mov   ah,9       ; запрос на ввод массива
  14.     mov   dx,mess0       ;
  15.     int   21h        ;
  16.     mov   cx,20      ; чисел для ввода
  17.     mov   di,buff        ; адрес приёмника чисел
  18.     push  cx di      ;   ..запомним эти значения в стеке
  19. input:  xor   ax,ax      ; ввод без эхо!
  20.     int   16h        ;
  21.     cmp   al,'0'         ; фильт чисел..
  22.     jb    input      ; пропустить, если меньше нуля
  23.     cmp   al,'9'         ;
  24.     ja    input      ;   ..и больше девяти
  25.     int   29h        ; выводим символ на экран
  26.     and   ax,0fh         ; переводим символ в число
  27.     stosb            ; сохраняем число в буфере
  28.     loop  input      ; мотаем цикл СХ-раз..
  29.  
  30.     pop   si cx      ; снимаем со-стека длину и адрес источника
  31.     mov   ah,0feh        ; AH будет мин. Пока ставим его на макс.
  32.     xor   bx,bx      ; BL будет номер (индекс,позиция) числа,
  33.                  ; BH будет индекс минимального
  34. cycle:  lodsb            ; берём очередное число
  35.     inc   bl         ; индекс +1
  36.     test  al,1       ; проверяем число на нечётное
  37.     jz    next       ; пропускаем чётные..
  38.     cmp   al,ah      ; сравниваем с предыдущим
  39.     jae   next       ; пропустить, если больше/равно
  40.     xchg  ah,al      ; иначе: отправляем число в АХ
  41.     mov   bh,bl      ;   ..и запомним его индекс
  42. next:   loop  cycle      ; мотаем цикл СХ-раз
  43.  
  44.     shr   ax,8       ; АХ = минимальное нечётное
  45.     shr   bx,8       ; ВХ = его индекс в строке
  46.     push  bx ax      ; запомним..
  47.  
  48.     mov   ah,9       ; мессага!
  49.     mov   dx,mess1       ;
  50.     int   21h        ;
  51.     pop   ax         ; минимальное
  52.     mov   bx,10      ; система счисления для вывода
  53.     call  hex2asc        ; выводим его на экран!
  54.  
  55.     mov   ah,9       ; мессага!
  56.     mov   dx,mess2       ;
  57.     int   21h        ;
  58.     pop   ax         ; индекс
  59.     mov   bx,10      ; система счисления для вывода
  60.     call  hex2asc        ; выводим его на экран!
  61.  
  62. exit:   xor   ax,ax      ; ждём любую клавишу..
  63.     int   16h        ;
  64.     int   20h        ; выход!
  65. ;---------------------------------------------------------------------
  66. hex2asc:             ; Функция переводит числа в символы
  67.     pusha            ; Вход:  АХ = число, BX = система счисления
  68.     xor   cx,cx      ; Выход: на экране
  69. isDiv:  xor   dx,dx      ;
  70.     div   bx         ;
  71.     push  dx         ;
  72.     inc   cx         ;
  73.     or    ax,ax      ;
  74.     jnz   isDiv      ;
  75. isOut:  pop   ax         ;
  76.     cmp   al,9       ;
  77.     jle   noHex      ;
  78.     add   al,7       ;
  79. noHex:  add   al,30h         ;
  80.     int   29h        ;
  81.     loop  isOut      ;
  82.     popa             ;
  83.     ret          ;

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


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

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

8   голосов , оценка 4 из 5

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

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

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