Работа с матрицами - 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
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д