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

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

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

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

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

textual
Листинг программы
; В массиве из 20 элементов
; найти сумму из четных элементов и их индексов.
;-----------------------------------------------------
;fasm code....
org  100h
jmp  start
 
mess0   db   13,10,' Array: $'
mess1   db   13,10,' Summ.: $'
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      ; снимаем со-стека длину и адрес источника
    xor   ax,ax      ; АХ=0! AH будет индекс, AL будет число
    xor   bx,bx      ; ВХ=0! Будет суммой чётных и их индексов
cycle:  lodsb            ; берём в AL число из SI (буфера)
    inc   ah         ; индекс +1
    test  al,1       ; проверяем число на чётное
    jnz   next       ; пропускаем не чётные..
    add   bl,al      ; суммируем чётные,
    add   bl,ah      ;    ..и прибавляем к сумме индекс (позицию чётного)
next:   loop  cycle      ; мотаем цикл СХ-раз
 
    mov   ah,9       ; мессага!
    mov   dx,mess1       ;
    int   21h        ;
    mov   ax,bx      ; отправляем сумму в АХ
    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          ;

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


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

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

11   голосов , оценка 3.545 из 5
Похожие ответы