Проверка суммы на парность (четное или не четное число) - Assembler
Формулировка задачи:
Доброе время суток. Подскажите, пожалуйста, что я не так написала. В програме надо сумировать все элементы массива и проверить полученное число на четность.
title lab3_3.asm model small .stack 256 .data len equ 5 mass db 1,4,5,7,8 mess1 db "Parne",0Dh, 0Ah,'$' mess2 db "Neparne",0Dh, 0Ah,'$' summa db 0 .code begin: mov ax, @data mov ds, ax mov cx, len xor ax, ax xor si, si mov al, summa cycl: add al, mass[si] inc si loop cycl jp chet mov dx, offset mess2 jmp prn chet:mov dx, offset mess1 jmp prn prn: mov ah, 9 int 21h mov ax, 4c00h int 21h end begin
Решение задачи: «Проверка суммы на парность (четное или не четное число)»
textual
Листинг программы
title lab3_3.asm model small .stack 256 .data len equ 5 mass db 1,4,5,7,8 mess1 db "Parne",0Dh, 0Ah,'$' mess2 db "Neparne",0Dh, 0Ah,'$' summa db 0 .code begin: mov ax, @data mov ds, ax mov cx, len xor ax, ax xor si, si mov al, summa cycl: add al, mass[si] inc si loop cycl mov dx, offset mess2 shr ax,1 jc prn mov dx, offset mess1 prn: mov ah, 9 int 21h mov ax, 4c00h int 21h end begin
Объяснение кода листинга программы
- Объявление переменных:
- len - длина массива (5)
- mass - массив чисел (1, 4, 5, 7, 8)
- mess1 - строка
Parne
- mess2 - строка
Neparne
- summa - переменная для хранения суммы
- Начало выполнения программы (begin):
- Передача сегмента данных в регистр ds
- Передача счетчика длины массива в регистр cx
- Обнуление регистров ax и si
- Передача значения переменной summa в регистр al
- Цикл по обработке каждого элемента массива (cycl):
- Добавление элемента массива к переменной summa
- Увеличение индекса элемента массива (si)
- Проверка значения переменной summa на четность (prn):
- Деление ax на 2 (shr ax,1)
- Если результат меньше или равен 1 (jc prn), то число четное
- Вывод сообщения
Neparne
- Если число нечетное, то вывод сообщения
Parne
- Завершение работы программы (mov ax, 4c00h, int 21h)