В массиве из двадцати элементов найти сумму из четных элементов и их индексов - 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,' Summ.: $'
  10. buff    db   20 dup(0)       ; буфер для ввода
  11.  
  12. start:  mov   ah,9       ; запрос на ввод массива
  13.     mov   dx,mess0       ;
  14.     int   21h        ;
  15.     mov   cx,20      ; чисел для ввода
  16.     mov   di,buff        ; адрес приёмника чисел
  17.     push  cx di      ;   ..запомним эти значения в стеке
  18. input:  xor   ax,ax      ; ввод без эхо!
  19.     int   16h        ;
  20.     cmp   al,'0'         ; фильт чисел..
  21.     jb    input      ; пропустить, если меньше нуля
  22.     cmp   al,'9'         ;
  23.     ja    input      ;   ..и больше девяти
  24.     int   29h        ; выводим символ на экран
  25.     and   ax,0fh         ; переводим символ в число
  26.     stosb            ; сохраняем число в буфере
  27.     loop  input      ; мотаем цикл СХ-раз..
  28.  
  29.     pop   si cx      ; снимаем со-стека длину и адрес источника
  30.     xor   ax,ax      ; АХ=0! AH будет индекс, AL будет число
  31.     xor   bx,bx      ; ВХ=0! Будет суммой чётных и их индексов
  32. cycle:  lodsb            ; берём в AL число из SI (буфера)
  33.     inc   ah         ; индекс +1
  34.     test  al,1       ; проверяем число на чётное
  35.     jnz   next       ; пропускаем не чётные..
  36.     add   bl,al      ; суммируем чётные,
  37.     add   bl,ah      ;    ..и прибавляем к сумме индекс (позицию чётного)
  38. next:   loop  cycle      ; мотаем цикл СХ-раз
  39.  
  40.     mov   ah,9       ; мессага!
  41.     mov   dx,mess1       ;
  42.     int   21h        ;
  43.     mov   ax,bx      ; отправляем сумму в АХ
  44.     mov   bx,10      ; система счисления для вывода
  45.     call  hex2asc        ; выводим сумму на экран!
  46.  
  47. exit:   xor   ax,ax      ; ждём любую клавишу..
  48.     int   16h        ;
  49.     int   20h        ; выход!
  50. ;---------------------------------------------------------------------
  51. hex2asc:             ; Функция переводит числа в символы
  52.     pusha            ; Вход:  АХ = число, BX = система счисления
  53.     xor   cx,cx      ; Выход: на экране
  54. isDiv:  xor   dx,dx      ;
  55.     div   bx         ;
  56.     push  dx         ;
  57.     inc   cx         ;
  58.     or    ax,ax      ;
  59.     jnz   isDiv      ;
  60. isOut:  pop   ax         ;
  61.     cmp   al,9       ;
  62.     jle   noHex      ;
  63.     add   al,7       ;
  64. noHex:  add   al,30h         ;
  65.     int   29h        ;
  66.     loop  isOut      ;
  67.     popa             ;
  68.     ret          ;

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


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

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

11   голосов , оценка 3.545 из 5

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

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

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