3 года назад

Assembler под Windows (MASM32). Не работает процедура произведения матриц

Есть процедура. При её вызове ей сообщается:1. MAAd - адрес начала первой матрицы А2. MBad - адрес начала второй матрицы В3. MCad - адрес начала результирующей матрицы С4. RowA - количество строк в матрице А5. CalB - количество столбцов в матрице В6. СaRoAB - количество столбцов в матрице А или строк в ВВнутри регистрируются локальные переменные NeRA (i), NeCB (j) и NexCR (l), которые являются счетчиками для циклов.Данная процедура должна совершать операцию произведения двух матриц и записывать результат в третью. Попутно заполняя некоторый буфер значениями ячеек результирующей матрицы, перемежаемыми запятыми.Но данная процедура не работает, так как в буфере по завершению остается "0, ".Подскажите, пожалуйста, где ошибка.MatPod poc 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        ivoke ItMul, NeRA, CalB      mov ebx, NeCB      add eax, ebx      mov ebx, DWORD PTR 4      ivoke ItMul, eax, ebx      mov ebx, MCAd      add eax, ebx      mov [eax],DWORD PTR 0      .WHILE TRUE        ;mov eax, MBAd[NexCR*CalB+NeCB]        ivoke ItMul, NexCR, CalB        mov ebx, NeCB        add eax, ebx        mov ebx, DWORD PTR 4        ivoke ItMul, eax, ebx        mov ebx, MBAd        add eax, ebx        mov ebx, [eax]        mov eax, ebx            push eax            ;mov ebx, MAAd[NeRA*CaRoAB+NexCR]        ivoke ItMul, NeRA, CaRoAB        mov ebx, NexCR        add eax, ebx        mov ebx, DWORD PTR 4        ivoke ItMul, eax, ebx        mov ebx, MAAd        add eax, ebx        mov ebx, [eax]                pop eax        ivoke ItMul, eax, ebx        push eax            ;add MCAd[NeRA*CalB+NeCB],edx        ;add MCAd[NeRA*CalB+NeCB],eax        ivoke ItMul, NeRA, CalB        mov ebx, NeCB        add eax, ebx        mov ebx, DWORD PTR 4        ivoke ItMul, eax, ebx        mov ebx, MCAd        add ebx, eax        pop eax        add [ebx],eax        ivoke dwtoa, eax, ADDR buf11        ivoke lstcat,add buf11,add st11            mov eax, NexCR        mov ebx, CaRoAB        .BREAK .IF eax==ebx        ic NexCR      .ENDW      mov eax, NeCB      mov ebx, CalB      .BREAK .IF eax==ebx      ic NeCB    .ENDW    mov eax, NeRA    mov ebx, RowA    .BREAK .IF eax==ebx    ic NeRA  .ENDW    etMatPod edp
ivoke ItMul, NeRA, CalB ; ItMul - произведение целых, результат в eax     mov ebx, NeCB     add eax, ebx     mov ebx, DWORD PTR 4     ivoke ItMul, eax, ebx     mov ebx, MCAd     add eax, ebxВот в таких блоках ведется поиск текущей ячейки, для последующего умножения, путем увеличения начального адреса матрицы на необходимую величину (перемещаем курсор указывающий ячейку на позицию NeRA*CalB+NeCB).       ivoke dwtoa, eax, ADDR buf11       ivoke lstcat,add buf11,add st11Здесь производится заполнение буфера только что рассчитанным значением и добавлением в него ", " (st11 = ", ")

The White (Гость) Assembler
3

Assembler: Assembler под Windows (MASM32). Не работает процедура произведения матриц

8 месяцев назад Умножение матриц в MASM32 с использованием WinAPI и встроенных скриптов MASM32

Подскажите алгоритм для подобной ситуации. А то написанная мной ущербная процедура перемножает матрицы и выводит результат либо в 2 раза больше, либо 0

Amazing (Гость) Нет ответов
3
8 месяцев назад masm32

я написал программу на masm32. работа с арифметическим сопроцессором, поэтому через emu я ее запустить не могу. можно ли через masm посмотреть что происходит со стеком во время выполнения программы? или нужна другая программа для этого?

ThaRealDip . (Гость) 1 ответ
3
8 месяцев назад Чтение данных массива из файла

Есть некоторый текстовый файл в котором записаны: количество столбцов, количество строк и значения ячеек двух массивов (для дальнейшего перемножения).Необходимо все эти данные считать и затем использовать в работе программы (перемножить матрицы).Как лучше устроить такой файл для более удобного чтения? И как производить такое чтение используя WiAPI или встроенные функции MASM? Можно ли использовать ii файлы? И как их использовать на ассемблере?Мне известен следующий метод чтения данных из файла:m...

SomBOSS (Гость) Нет ответов
3
Ответы (1)
Александр12345678 (Гость) 3 года назад
2

Мои соболезнования.

"На ассемблере можно написать что угодно, но только жизнь коротка" ©

Пожаловаться
Assembler под Windows (MASM32). Не работает процедура произведения матриц (Assembler) - вопросы и ответы на все случаи жизни - справочник Assembler moi-vopros.ru