Найти сумму положительных четных элементов массива - Assembler
Формулировка задачи:
Помогите, в универе задали написать программу: Найти сумму положительных четных элементов массива.
Все хорошо, ошибок не выводит, но и правильно не высчитывает.
Тело цикла:
Помогите найти проблему, заранее спасибо!
start: cmp mas[di],0
jle met
cbw
idiv two
cmp ah,0
jne met
add al, mas[di]
met: inc di
loop start
mov sum, alРешение задачи: «Найти сумму положительных четных элементов массива»
textual
Листинг программы
.data .... sum dw 0 .... .code .... mov si,offset mas mov cx,число_элементов массива mov ah,0 @0: lodsb or ax,ax js @1;если значение в AL <0 -- переходим test al,1 jnz @1;если значение в AL нечетное -- переходим add sum,ax @1: loop @0
Объяснение кода листинга программы
- В данных (
.data) объявлена переменнаяsumтипаdw(слово, двойное слово), которая инициализирована нулем. - В коде (
.code) происходит следующее:- Переменная
siполучает смещение массива (предположительно, это смещение первого элемента). - Переменная
cxполучает количество элементов в массиве. - Переменная
ahинициализируется нулем. - Затем выполняется цикл, который начинается с метки
@0и продолжается до@1. - Внутри цикла происходит следующее:
- Переменная
alзагружается байтом из памяти по смещениюmas(это первый элемент массива). - Затем выполняется операция
or ax,ax, которая проверяет, является ли значение вalчетным. - Если значение в
alнечетное, то происходит переход к следующей итерации цикла. - Если значение в
alчетное, то оно добавляется к переменнойsum.
- Переменная
- После выполнения цикла, переменная
sumсодержит сумму положительных четных элементов массива.
- Переменная