Цикл: определить количество четных элементов в массиве и индекс первого четного - Assembler
Формулировка задачи:
Определить количество четных элементов в массиве и индекс первого четного.
Решение задачи: «Цикл: определить количество четных элементов в массиве и индекс первого четного»
textual
Листинг программы
use16 org 100h ; mov al, [massiv] ;Первый элемент в регистр AL xor bx, bx ;В BX - адрес начала массива mov cx, mas_sz ;В CX - количество элементов xor dx, dx ; результат xor si, si ; первый чётный, индекс dec si cycle: bt word [massiv+bx],0 ;помещаем в CF младший бит элемента с адресом massiv[BX] cmc ; инвертитуем флаг CF jnc @F ; нечетный - дальше adc dx, 0 ; увеличиваем счётчик or si, si jns @F mov si, bx @@: inc bx loop cycle ;циклически повторяем действиe push dx mov ah,9 mov dx, even1 int 21h mov ax, si call cvt mov ah,9 mov dx, even2 int 21h mov al, [massiv+si] cbw call cvt mov ah,9 mov dx, even3 int 21h pop ax call cvt xor ax, ax ;задержка экрана int 16h int 20h ; 0 - 99 cvt: aam or ax, 3030h xchg ah,al int 29h xchg ah,al int 29h ret massiv: db 0,1,3,6,2,9,8,5, 4, 2 ;Объявляем массив mas_sz = $ - massiv chet: rb 1 ;Резервируем память под переменную chet i: db 0 even1: db 'Первый чётный: индекс = $' even2: db 0Dh, 0Ah, 'значение = $' even3: db 0Dh, 0Ah, 'Всего чётных: $'
Объяснение кода листинга программы
Код выполняет следующие действия:
- В регистр AL записывается первый элемент массива.
- В BX записывается адрес начала массива.
- В CX записывается количество элементов в массиве.
- Результат инициализируется как ноль.
- Индекс первого четного элемента устанавливается как 1.
- Начинается цикл, который повторяется до тех пор, пока не будет достигнуто условие выхода из цикла.
- В каждом цикле выполняется проверка на четность текущего элемента массива, начиная с первого.
- Если элемент четный, то увеличивается счетчик четных элементов и сохраняется индекс этого элемента.
- Если элемент нечетный, то цикл продолжается.
- Если в массиве больше нет элементов, то выполняется завершающая часть программы.
- Выводится сообщение с количеством четных элементов и их индексом. Переменные:
- use16 - сегмент данных.
- org 100h - начало сегмента данных.
- masiv - массив для обработки.
- mas_sz - размер массива.
- chet - переменная для хранения результата.
- i - счетчик для цикла.
- even1, even2, even3 - строки для вывода результатов. Значения переменных:
- use16 = 16.
- org 100h - начальный адрес сегмента данных.
- masiv - массив с четными элементами.
- mas_sz = 10 - размер массива.
- chet = 0 - начальное значение счетчика четных элементов.
- i = 0 - счетчик для цикла.
- even1, even2, even3 - строки для вывода результатов.