Найти число положительных четных элементов массива masm32 - Assembler
Формулировка задачи:
Доброго вечера.
Помогите пожалуйста найти ошибку.
Задача: найти число положительных четных элементов массива.
Только почему-то это число всегда равно количеству элементов в массиве. Программа под masm32.
Наперед спасибо.
.586
.model flat, stdcall
option casemap: none
include \masm32\include\windows.inc
include \masm32\include\kernel32.inc
include \masm32\include\masm32.inc
include \masm32\include\debug.inc
include \masm32\include\user32.inc
includelib \masm32\lib\kernel32.lib
includelib \masm32\lib\masm32.lib
includelib \masm32\lib\debug.lib
includelib \masm32\lib\user32.lib
.data
Arr dd 1,2,3,4,5,6,-7,-8,9,10
numb db 0
.code
start:
mov ecx, 10
begin:
mov eax, [Arr+ecx*4-4]
jns signed
signed:
jp parn
parn:
inc numb
dec ecx
cmp ecx, 0
jnz begin
PrintDec numb, "Kol"
invoke ExitProcess, NULL
end startРешение задачи: «Найти число положительных четных элементов массива masm32»
textual
Листинг программы
.586 .model flat, stdcall option casemap: none include \masm32\include\windows.inc include \masm32\include\kernel32.inc include \masm32\include\masm32.inc include \masm32\include\debug.inc include \masm32\include\user32.inc includelib \masm32\lib\kernel32.lib includelib \masm32\lib\masm32.lib includelib \masm32\lib\debug.lib includelib \masm32\lib\user32.lib .data Arr dd 1,2,3,4,5,6,-7,-8,9,10 numb db 0 .code start: mov ecx, 10 begin: mov eax, [Arr+ecx*4-4] test eax, eax ; отрицательное? js next ; да, дальше test eax,1 ; нечётное? jp next ; да, дальше inc [numb] next: dec ecx cmp ecx, 0 jnz begin PrintDec numb, "Kol" invoke ExitProcess, NULL end start
Объяснение кода листинга программы
- Переменная Arr содержит 10 элементов: 1, 2, 3, 4, 5, 6, -7, -8, 9, 10.
- Переменная numb инициализирована нулем и используется для подсчёта числа положительных чётных элементов.
- Цикл начинается с переменной ecx равной 10.
- Ecx уменьшается на 1 на каждой итерации.
- Каждый элемент массива проверяется на отрицательность (тест eax, eax) и чётность (тест eax, 1).
- Если элемент отрицательный или нечётный, то на следующей итерации будет проверен следующий элемент.
- Если элемент положительный и чётный, то к переменной numb прибавляется единица.
- Цикл продолжается до тех пор, пока ecx больше нуля.
- Выводится значение переменной numb.
- Вызывается функция ExitProcess.