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