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

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

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

Здравствуйте Помогите пожалуйста исправить ошибку Дана матрица, и нужно определить есть ли в ней строка, все числа которой нечетны Так вот, команда Test всегда определяет первый элемент в первой строке матрицы как четный, даже если он нечетный В чем может быть проблема?
public _haracterictica
.586
.model flat
.code
_haracterictica proc        ;функция near
                push    ebp
                mov     ebp,esp          ;ebp - указывает на вершину стека
                push    esi
                push    ecx
                push    edi
                push    ebx
                push    edx
                
                add     ebp,8            ;пропускаем в стеке адрес возврата
                mov     edi,[ebp]        ;адрес матрицы(массив указателей на строки)
            
                mov     ecx,[ebp+4]      ;размерность
                mov     ebx,ecx
                mov     edx,ecx
                mov     esi,ebp
                c2:                      ;рассматриваем только первую строку матрицы
                xor     eax,eax
                mov     eax,[esi]        ;помещаем в eax элемент строки массива
                test    eax,1
                jnz     nechet           ;если нечетный...
                jmp     c3
                nechet:                  ;...то продолжаем работу
                add     esi,4
                dec     edx              ;уменьшаем количество нерассмотренных строк
                loop    c2
                    
                c3:                      ;рассматриваем все оставшиеся строки
                mov     edx,ebx
                dec     ebx              ;уменьшаем количество нерассмотренных строк
                cmp     ebx,0            ;если строки кончились...
                jnz     m1
                jmp     exit             ;...то выходим
                m1:
                xor     ecx,ecx 
                mov     ecx,[ebp+4]      ;в ecx количество столбцов в матрице
                add     edi,4
                mov     esi,[edi]        ;переходим к следующей строке
                mov     edx,[ebp+4]      ;в edx количество столбцов в матрице
                c4:
                
                xor     eax,eax
                mov     eax,[esi]        ;переходим к следующему элементу в строке
                test    eax,1            ;проверяем на нечетность
                jnz     nechet1          ;если нечетный, то продолжаем работу
                jmp     c3               
                nechet1:
                add     esi,4            ;переходим к следующему элементу в строке
                dec     edx              ;уменьшаем счетчик количества элементов в строке
                loop    c4
                exit:
                mov     eax,edx          ;помещаем счетчик в eax(если равен 0, то есть строка, содержащая только нечетные числа)
 
                pop     edx
                pop     ebx
                pop     edi
                pop     ecx
                pop     esi
                pop     ebp
                ret                     ;возврат данных через регистр eax
_haracterictica endp
 
end

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

textual
Листинг программы
.386
.model flat, stdcall
.stack 4096
ExitProcess proto, dwExitCode:dword
 
.data
array dword 4, 4, 4,
            13, 33, 51,
            344, 3431, 343
 
.code
main proc
    push 3
    push offset array
    call checkArray
    invoke ExitProcess, 0
main endp
 
checkArray proc
    push ebp
    mov ebp, esp
    push ecx
    push esi
    push edx
 
    mov ecx, [ebp + 12]
    mov esi, [ebp + 8]
    xor eax, eax
 
L1:
    push ecx
    mov ecx, [ebp + 12]
L2:
    mov edx, [esi]
    add esi, type dword
    shr edx, 1
    jnc L3
 
    loop L2
    or eax, 1
    pop ecx
    jmp L4
L3:
    mov eax, type dword
    dec ecx
    mul ecx
    add esi, eax
    xor eax, eax
    pop ecx
    loop L1
L4:
    pop edx
    pop esi
    pop ecx
    mov esp, ebp
    pop ebp
    ret 8
checkArray endp
 
end main

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


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

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

7   голосов , оценка 3.571 из 5
Похожие ответы