Работа с матрицами - 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