- MAAd - адрес начала первой матрицы А
- MBad - адрес начала второй матрицы В
- MCad - адрес начала результирующей матрицы С
- RowA - количество строк в матрице А
- CalB - количество столбцов в матрице В
- СaRoAB - количество столбцов в матрице А или строк в В
Данная процедура должна совершать операцию произведения двух матриц и записывать результат в третью. Попутно заполняя некоторый буфер значениями ячеек результирующей матрицы, перемежаемыми запятыми.
Но данная процедура не работает, так как в буфере по завершению остается "0, ".
Подскажите, пожалуйста, где ошибка.
Код: Выделить всё
MatrProd proc MAAd: DWORD, MBAd: DWORD, MCAd: DWORD,
RowA: DWORD, CalB: DWORD, CaRoAB: DWORD
LOCAL NeRA: DWORD
LOCAL NeCB: DWORD
LOCAL NexCR: DWORD
mov NeRA,0
mov NeCB,0
mov NexCR,0
.WHILE TRUE
.WHILE TRUE; вычислить адрес и затем [],0
;---mov MCAd[NeRA*CalB+NeCB],0
;---МатрицаС[i,j]:=0
;---i=NeRA*CalB (номер строки на количество строк)
;---j=NeCB
invoke IntMul, NeRA, CalB
mov ebx, NeCB
add eax, ebx
mov ebx, DWORD PTR 4
invoke IntMul, eax, ebx
mov ebx, MCAd
add eax, ebx
mov [eax],DWORD PTR 0
.WHILE TRUE
;mov eax, MBAd[NexCR*CalB+NeCB]
invoke IntMul, NexCR, CalB
mov ebx, NeCB
add eax, ebx
mov ebx, DWORD PTR 4
invoke IntMul, eax, ebx
mov ebx, MBAd
add eax, ebx
mov ebx, [eax]
mov eax, ebx
push eax
;mov ebx, MAAd[NeRA*CaRoAB+NexCR]
invoke IntMul, NeRA, CaRoAB
mov ebx, NexCR
add eax, ebx
mov ebx, DWORD PTR 4
invoke IntMul, eax, ebx
mov ebx, MAAd
add eax, ebx
mov ebx, [eax]
pop eax
invoke IntMul, eax, ebx
push eax
;add MCAd[NeRA*CalB+NeCB],edx
;add MCAd[NeRA*CalB+NeCB],eax
invoke IntMul, NeRA, CalB
mov ebx, NeCB
add eax, ebx
mov ebx, DWORD PTR 4
invoke IntMul, eax, ebx
mov ebx, MCAd
add ebx, eax
pop eax
add [ebx],eax
invoke dwtoa, eax, ADDR buf11
invoke lstrcat,addr buf11,addr str11
mov eax, NexCR
mov ebx, CaRoAB
.BREAK .IF eax==ebx
inc NexCR
.ENDW
mov eax, NeCB
mov ebx, CalB
.BREAK .IF eax==ebx
inc NeCB
.ENDW
mov eax, NeRA
mov ebx, RowA
.BREAK .IF eax==ebx
inc NeRA
.ENDW
ret
MatrProd endp
Код: Выделить всё
invoke IntMul, NeRA, CalB ; IntMul - произведение целых, результат в eax
mov ebx, NeCB
add eax, ebx
mov ebx, DWORD PTR 4
invoke IntMul, eax, ebx
mov ebx, MCAd
add eax, ebx
Код: Выделить всё
invoke dwtoa, eax, ADDR buf11
invoke lstrcat,addr buf11,addr str11
Если необходимо приведен образец работы.