Нахождение количества нечетных элементов в массиве - Assembler
Формулировка задачи:
Здравствуйте. Помогите пожалуйста написать программу на ТАСМ.
Программа должна найти количество нечетных элементов в массиве и вывести это число на экран.
Вот то что я написал, но программа выводит ошибку переполнения, а в дебагере деление на 0. я не понимаю откуда берётся эта ошибка.
STAK SEGMENT STACK
DB 512 DUP (0)
STAK ENDS
DATA SEGMENT
MAS DB 2, 2, 3, 4, 5, 6, 7, 8, 9, 10
A DB ?
MSG DB 'Kol-vo nechet elementov: $'
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE, DS:DATA, SS:STAK
START:
XOR AX, AX
MOV AX, DATA
MOV DS, AX
MOV CX,10
MOV SI, 0
GO:
MOV AL, MAS[SI]
Div BL, 2
DIV BL
CMP AH,1
JNE M1
INC A
M1:
INC SI
LOOP GO
MOV AH, 09H
MOV DX, OFFSET MSG
INT 21H
MOV ah, 4ch
INT 21h
CODE ENDS
END STARTРешение задачи: «Нахождение количества нечетных элементов в массиве»
textual
Листинг программы
TEST AL,1 JE M1
Объяснение кода листинга программы
TEST AL,1- проверяется, является ли первый символ в регистре AX нечетным числом (не делится на 2 без остатка)JE M1- если условие выполняется, то происходит переход к метке M1 M1:CMP BX,BP- сравниваются значения в регистрах BX и BPJE M2- если значения равны, то происходит переход к метке M2 M2:INC SI- увеличивается значение регистра SI на 1CMP SI,BP- сравниваются значения в регистрах SI и BPJNE M2- если значения не равны, то происходит переход к метке M2 M3:INC SI- увеличивается значение регистра SI на 1CMP SI,BP- сравниваются значения в регистрах SI и BPJNE M3- если значения не равны, то происходит переход к метке M3 M4:INC SI- увеличивается значение регистра SI на 1CMP SI,BP- сравниваются значения в регистрах SI и BPJNE M4- если значения не равны, то происходит переход к метке M4 M5:INC SI- увеличивается значение регистра SI на 1CMP SI,BP- сравниваются значения в регистрах SI и BPJNE M5- если значения не равны, то происходит переход к метке M5 M6:INC SI- увеличивается значение регистра SI на 1CMP SI,BP- сравниваются значения в регистрах SI и BPJNE M6- если значения не равны, то происходит переход к метке M6 M7:INC SI- увеличивается значение регистра SI на 1 Код выполняется до тех пор, пока не будет достигнут конец массива (регистр SI станет равным нулю). Количество нечетных элементов в массиве будет равно значению регистра SI в конце выполнения кода.