Определить, есть ли в матрице строка, все числа которой нечетны (C++ и ассемблер) - Assembler

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

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

Здравствуйте Помогите пожалуйста исправить ошибку Дана матрица, и нужно определить есть ли в ней строка, все числа которой нечетны Так вот, команда Test всегда определяет первый элемент в первой строке матрицы как четный, даже если он нечетный В чем может быть проблема?
Листинг программы
  1. public _haracterictica
  2. .586
  3. .model flat
  4. .code
  5. _haracterictica proc ;функция near
  6. push ebp
  7. mov ebp,esp ;ebp - указывает на вершину стека
  8. push esi
  9. push ecx
  10. push edi
  11. push ebx
  12. push edx
  13. add ebp,8 ;пропускаем в стеке адрес возврата
  14. mov edi,[ebp] ;адрес матрицы(массив указателей на строки)
  15. mov ecx,[ebp+4] ;размерность
  16. mov ebx,ecx
  17. mov edx,ecx
  18. mov esi,ebp
  19. c2: ;рассматриваем только первую строку матрицы
  20. xor eax,eax
  21. mov eax,[esi] ;помещаем в eax элемент строки массива
  22. test eax,1
  23. jnz nechet ;если нечетный...
  24. jmp c3
  25. nechet: ;...то продолжаем работу
  26. add esi,4
  27. dec edx ;уменьшаем количество нерассмотренных строк
  28. loop c2
  29. c3: ;рассматриваем все оставшиеся строки
  30. mov edx,ebx
  31. dec ebx ;уменьшаем количество нерассмотренных строк
  32. cmp ebx,0 ;если строки кончились...
  33. jnz m1
  34. jmp exit ;...то выходим
  35. m1:
  36. xor ecx,ecx
  37. mov ecx,[ebp+4] ecx количество столбцов в матрице
  38. add edi,4
  39. mov esi,[edi] ;переходим к следующей строке
  40. mov edx,[ebp+4] edx количество столбцов в матрице
  41. c4:
  42. xor eax,eax
  43. mov eax,[esi] ;переходим к следующему элементу в строке
  44. test eax,1 ;проверяем на нечетность
  45. jnz nechet1 ;если нечетный, то продолжаем работу
  46. jmp c3
  47. nechet1:
  48. add esi,4 ;переходим к следующему элементу в строке
  49. dec edx ;уменьшаем счетчик количества элементов в строке
  50. loop c4
  51. exit:
  52. mov eax,edx ;помещаем счетчик в eax(если равен 0, то есть строка, содержащая только нечетные числа)
  53. pop edx
  54. pop ebx
  55. pop edi
  56. pop ecx
  57. pop esi
  58. pop ebp
  59. ret ;возврат данных через регистр eax
  60. _haracterictica endp
  61. end

Решение задачи: «Определить, есть ли в матрице строка, все числа которой нечетны (C++ и ассемблер)»

textual
Листинг программы
  1. .386
  2. .model flat, stdcall
  3. .stack 4096
  4. ExitProcess proto, dwExitCode:dword
  5.  
  6. .data
  7. array dword 4, 4, 4,
  8.             13, 33, 51,
  9.             344, 3431, 343
  10.  
  11. .code
  12. main proc
  13.     push 3
  14.     push offset array
  15.     call checkArray
  16.     invoke ExitProcess, 0
  17. main endp
  18.  
  19. checkArray proc
  20.     push ebp
  21.     mov ebp, esp
  22.     push ecx
  23.     push esi
  24.     push edx
  25.  
  26.     mov ecx, [ebp + 12]
  27.     mov esi, [ebp + 8]
  28.     xor eax, eax
  29.  
  30. L1:
  31.     push ecx
  32.     mov ecx, [ebp + 12]
  33. L2:
  34.     mov edx, [esi]
  35.     add esi, type dword
  36.     shr edx, 1
  37.     jnc L3
  38.  
  39.     loop L2
  40.     or eax, 1
  41.     pop ecx
  42.     jmp L4
  43. L3:
  44.     mov eax, type dword
  45.     dec ecx
  46.     mul ecx
  47.     add esi, eax
  48.     xor eax, eax
  49.     pop ecx
  50.     loop L1
  51. L4:
  52.     pop edx
  53.     pop esi
  54.     pop ecx
  55.     mov esp, ebp
  56.     pop ebp
  57.     ret 8
  58. checkArray endp
  59.  
  60. end main

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


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

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

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

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

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

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