Работа с матрицами - Assembler (223808)

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

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

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

Решение задачи: «Работа с матрицами»

textual
Листинг программы
model   tiny,pascal
.code
org 100h
start:
    mov ax,3
    mov bx,4
    lea cx,arrayA
    call    h,cx,ax,bx
    call    o,ax
    mov ax,3
    mov bx,4
    lea cx,arrayB
    call    h,cx,ax,bx
    call    o,ax
    ret 
h   proc    a:word,b:word,c:word
uses    cx,dx,si
    mov si,a
    mov cx,b
@@01:   push    cx
    mov cx,c
    xor dx,dx
@@02:   lodsw
    and ax,1
    add dx,ax
    loop    @@02
    pop cx
    mov ax,c
    sub ax,dx
    jz  @@03
    loop    @@01
@@03:   ret
h   endp
o   proc    a:word
    lea dx,dbNo
    or  ax,ax
    jnz @@04
    lea dx,dbYes
@@04:   mov ah,9
    int 21h
    ret
dbNo    db  10,13,'No$'
dbYes   db  10,13,'Yes$'
o   endp
arrayA  dw  3, 7, 9, 11
    dw  2, 3, 8, 4
    dw  1, 7, 9, 12
arrayB  dw  1, 2, 7, 9
    dw  2, 4, 9, 1
    dw  3, 1, 7, 4
    end start

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

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