Сумма четных отрицательных элементов массива, имеющих нечетные индексы - Assembler

Узнай цену своей работы

Формулировка задачи:

Помогите с реализацией программы на masm32 .486 Уже набросал небольшой код , но в нем есть конечно же огромные недостатки в виде переходов JS , jp, jnp - которые я использовал не по назначению и хотел бы попросить совета как их исправить, заранее благодарен за помощь.
Листинг программы
  1. .data
  2. massiv dd 1,2,-4,-3,-5,-6,-4,-2,-1,-2 ; массив
  3. .code
  4. xor eax,eax
  5. xor esi,esi
  6. xor ecx,ecx
  7. na4alo:
  8. cmp ecx,11
  9. jge result
  10. inc ecx ; в ecx 1 = индекс
  11. mov eax,massiv[esi] ; в eax 1-ый элемент массива .
  12. cmp eax,eax
  13. jp otricTest ; если четный прыгает на OtricTest
  14. add esi,4 ; else следующий элемент и
  15. jmp na4alo ; прыгаем на начало
  16.  
  17. otricTest:
  18. cmp eax,eax
  19. js Index ; если отрицательный прыгаем и проверяем index на нечетность
  20. add esi,4 ; else следующий элемент и
  21. jmp na4alo ; прыгаем на начало
  22.  
  23. Index: ; тест на нечет индекс
  24. cmp eax,eax
  25. jnp PlusRez ; если и индекс нечет - добавляем в результат
  26. add esi,4 ; else следующий элемент и
  27. jmp na4alo ; прыгаем на начало
  28. PlusRez:
  29. add ebx,eax
  30. cmp ecx,10 ; если 10-ый элемент то заканчиваем программу выводя ebx в результат.
  31. jge result ; если больше или равен
  32. add esi,4 ; если проверили не весь массив - прыгаем в начало с новым элементом.
  33. jmp na4alo ;
  34.  
  35. ; Меняем имя регистра на имя в котором находится ваш результат
  36. result:
  37. mov Result,ebx
  38. PUSH Result ; вывода результата на экран.
Упс, не написал суть программы. В массиве нахожу сумму отрицательных Четных элементов массива с нечетными индексами.
Массив - massiv dd -2,-1,-3,-4,-5,6,-7,-8,-2,-4
Листинг программы
  1. xor eax,eax
  2. xor esi,esi
  3. xor ecx,ecx
  4. xor ebx,ebx
  5. na4alo:
  6. cmp ecx,10
  7. jge result
  8. inc ecx ; в ecx 1 = индекс
  9. mov eax,massiv[esi] ; в eax 1-ый элемент массива .
  10. cmp eax,eax
  11. jp otricTest ; если четный прыгает на OtricTest
  12. add esi,4 ; else следующий элемент и
  13. jmp na4alo ; прыгаем на начало
  14.  
  15. otricTest:
  16. cmp eax,0
  17. jl Index ; если отрицательный элемент прыгаем и проверяем index на нечетность
  18. add esi,4 ; else следующий элемент и
  19. jmp na4alo ; прыгаем на начало
  20.  
  21. Index: ; тест на нечет индекс
  22. cmp ecx,ecx
  23. jnp PlusRez ; если и индекс нечет - добавляем в результат
  24. add esi,4 ; else следующий элемент и
  25. jmp na4alo ; прыгаем на начало
  26. PlusRez:
  27. inc ebx
  28. cmp ecx,10 ; если 10-ый элемент то заканчиваем программу выводя ebx в результат.
  29. jge result ; если больше или равен
  30. add esi,4 ; если проверили не весь массив - прыгаем в начало с новым элементом.
  31. jmp na4alo ;
  32.  
  33. ; Меняем имя регистра на имя в котором находится ваш результат
  34. result:
  35. mov Result,ebx
Исправил немного код. В ответе должно быть 2-а, а выводит 0-ь :/

Решение задачи: «Сумма четных отрицательных элементов массива, имеющих нечетные индексы»

textual
Листинг программы
  1. test eax, 1
  2. jz otricTest

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

5   голосов , оценка 4.4 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы