Сумма четных отрицательных элементов массива, имеющих нечетные индексы - Assembler
Формулировка задачи:
Помогите с реализацией программы на masm32 .486
Уже набросал небольшой код , но в нем есть конечно же огромные недостатки в виде переходов JS , jp, jnp - которые я использовал не по назначению и хотел бы попросить совета как их исправить, заранее благодарен за помощь.
Исправил немного код. В ответе должно быть 2-а, а выводит 0-ь :/
.data
massiv dd 1,2,-4,-3,-5,-6,-4,-2,-1,-2 ; массив
.code
xor eax,eax
xor esi,esi
xor ecx,ecx
na4alo:
cmp ecx,11
jge result
inc ecx ; в ecx 1 = индекс
mov eax,massiv[esi] ; в eax 1-ый элемент массива .
cmp eax,eax
jp otricTest ; если четный прыгает на OtricTest
add esi,4 ; else следующий элемент и
jmp na4alo ; прыгаем на начало
otricTest:
cmp eax,eax
js Index ; если отрицательный прыгаем и проверяем index на нечетность
add esi,4 ; else следующий элемент и
jmp na4alo ; прыгаем на начало
Index: ; тест на нечет индекс
cmp eax,eax
jnp PlusRez ; если и индекс нечет - добавляем в результат
add esi,4 ; else следующий элемент и
jmp na4alo ; прыгаем на начало
PlusRez:
add ebx,eax
cmp ecx,10 ; если 10-ый элемент то заканчиваем программу выводя ebx в результат.
jge result ; если больше или равен
add esi,4 ; если проверили не весь массив - прыгаем в начало с новым элементом.
jmp na4alo ;
; Меняем имя регистра на имя в котором находится ваш результат
result:
mov Result,ebx
PUSH Result ; вывода результата на экран.
Упс, не написал суть программы.
В массиве нахожу сумму отрицательных Четных элементов массива с нечетными индексами.
Массив - massiv dd -2,-1,-3,-4,-5,6,-7,-8,-2,-4
xor eax,eax
xor esi,esi
xor ecx,ecx
xor ebx,ebx
na4alo:
cmp ecx,10
jge result
inc ecx ; в ecx 1 = индекс
mov eax,massiv[esi] ; в eax 1-ый элемент массива .
cmp eax,eax
jp otricTest ; если четный прыгает на OtricTest
add esi,4 ; else следующий элемент и
jmp na4alo ; прыгаем на начало
otricTest:
cmp eax,0
jl Index ; если отрицательный элемент прыгаем и проверяем index на нечетность
add esi,4 ; else следующий элемент и
jmp na4alo ; прыгаем на начало
Index: ; тест на нечет индекс
cmp ecx,ecx
jnp PlusRez ; если и индекс нечет - добавляем в результат
add esi,4 ; else следующий элемент и
jmp na4alo ; прыгаем на начало
PlusRez:
inc ebx
cmp ecx,10 ; если 10-ый элемент то заканчиваем программу выводя ebx в результат.
jge result ; если больше или равен
add esi,4 ; если проверили не весь массив - прыгаем в начало с новым элементом.
jmp na4alo ;
; Меняем имя регистра на имя в котором находится ваш результат
result:
mov Result,ebxРешение задачи: «Сумма четных отрицательных элементов массива, имеющих нечетные индексы»
textual
Листинг программы
test eax, 1 jz otricTest