массивы.не могу понять какая ошибка...(
Добавлено: 28 ноя 2010, 20:39
Б4-3. Дана матрица 5х5. Для данного натурального М найти сум-
му тех элементов матрицы, сумма индексов которых равна М.
При выполнении заданий каждого раздела разработать программы в
двух вариантах:
А) в виде «минимального» модуля с просмотром результатов работы в
отладчике ,
Б) с выводом результата работы на экран
Код:
; сумма елементов сумма индексов которых равна m
; результат см. в EBX
.386
.model flat, stdcall
includelib kernel32.lib
ExitProcess proto
WORD
.data
; задаем матрицу из 5 строк и 5 столбцов
A BYTE 1,2,3,12,5,
1,2,3,4,5,
1,2,3,4,5,
1,2,3,4,5,
1,2,3,4,5
m BYTE 3
cikl_stop DWORD ?
;summ dword ?
.code
start:
xor eax, eax
xor ebx, ebx
xor ecx, ecx
xor edx, edx
xor esi, esi
xor edi, edi
MOV al,0 ; сумма искомых елементов
; внешний цикл по строкам
MOV ECX,5 ; счетчик внешнего цикла
MOV EBX,0 ; смещение от А до начала строки (20*I)
MOV SI,0 ; индекс элемента внутри строки (j)
mov dl,0 ; псевдо i
L: MOV cikl_stop, ECX ; запоминание CX внешнего цикла ```````````
; внутренний цикл по столбцам
MOV ECX, 4 ; задание счетчика внутреннего цикла
mov dh,0 ; псевдо j
L1:
xor ah, ah
mov ah, dl
add ah, dh
inc dh
inc esi
cmp ah, m
LOOPNE L1
add al, A[EBX][esi]
LOOPE L1
JNE L2
;конец внутреннего цикла
L2: MOV ECX, cikl_stop ; восстановить CX для внешнего цикла
ADD EBX, 5 ; на начало следующей строки
inc dl
;inc esi
LOOP L ; цикл 5 раза
MOV bl, al
invoke ExitProcess, 0
end start
в программе в середине идет перескок.
в первом цикле считает правильно,во втором на единицу меньше,не могу понять в чем дело...
му тех элементов матрицы, сумма индексов которых равна М.
При выполнении заданий каждого раздела разработать программы в
двух вариантах:
А) в виде «минимального» модуля с просмотром результатов работы в
отладчике ,
Б) с выводом результата работы на экран
Код:
; сумма елементов сумма индексов которых равна m
; результат см. в EBX
.386
.model flat, stdcall
includelib kernel32.lib
ExitProcess proto

.data
; задаем матрицу из 5 строк и 5 столбцов
A BYTE 1,2,3,12,5,
1,2,3,4,5,
1,2,3,4,5,
1,2,3,4,5,
1,2,3,4,5
m BYTE 3
cikl_stop DWORD ?
;summ dword ?
.code
start:
xor eax, eax
xor ebx, ebx
xor ecx, ecx
xor edx, edx
xor esi, esi
xor edi, edi
MOV al,0 ; сумма искомых елементов
; внешний цикл по строкам
MOV ECX,5 ; счетчик внешнего цикла
MOV EBX,0 ; смещение от А до начала строки (20*I)
MOV SI,0 ; индекс элемента внутри строки (j)
mov dl,0 ; псевдо i
L: MOV cikl_stop, ECX ; запоминание CX внешнего цикла ```````````
; внутренний цикл по столбцам
MOV ECX, 4 ; задание счетчика внутреннего цикла
mov dh,0 ; псевдо j
L1:
xor ah, ah
mov ah, dl
add ah, dh
inc dh
inc esi
cmp ah, m
LOOPNE L1
add al, A[EBX][esi]
LOOPE L1
JNE L2
;конец внутреннего цикла
L2: MOV ECX, cikl_stop ; восстановить CX для внешнего цикла
ADD EBX, 5 ; на начало следующей строки
inc dl
;inc esi
LOOP L ; цикл 5 раза
MOV bl, al
invoke ExitProcess, 0
end start
в программе в середине идет перескок.
в первом цикле считает правильно,во втором на единицу меньше,не могу понять в чем дело...