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