Online Compiler Nasm

extern io_get_udec extern io_get_dec extern io_print_dec extern io_print_char section .bss a resd 10000 b resd 10000 c resd 10000 size_a resd 1 size_b resd 1 size_c resd 1 n resd 1 m resd 1 k resd 1 section .text global main main: ; Matrix sizes call io_get_udec mov [n], eax call io_get_udec mov [m], eax call io_get_udec mov [k], eax mul dword [n] mov [size_c], eax mov eax, dword [n] mul dword [m] mov [size_a], eax mov eax, dword [m] mul dword [k] mov [size_b], eax mov esi, dword [size_a] mov ebx, dword a a_for_beg: cmp esi, 0 jng a_for_end call io_get_dec mov [ebx], eax dec esi add ebx, dword 4 jmp a_for_beg a_for_end: mov esi, dword [size_b] mov ebx, dword b b_for_beg: cmp esi, 0 jng b_for_end call io_get_dec mov [ebx], eax dec esi add ebx, dword 4 jmp b_for_beg b_for_end: mov esi, dword [b] mov edi, dword [a] mov ebx, dword a apr_for_beg: cmp esi, 0 jng apr_for_end apr_inn_beg: cmp edi, 0 jng apr_inn_end mov eax, dword [ebx] call io_print_dec mov eax, dword ' ' call io_print_char add ebx, dword 4 dec edi jmp apr_inn_beg apr_inn_end: dec esi jmp apr_for_beg apr_for_end: xor eax, eax ret
1) Этот код считывает размеры двух матриц (n×m и m×k), затем считывает их элементы, но вместо умножения матриц он просто выводит элементы первой матрицы построчно, разделяя их пробелами.

2) Обрати внимание, что регистры `esi` и `edi` в цикле `apr_for_beg` инициализируются не значениями размеров, а значениями из первых элементов массивов `b` и `a`. Это явная ошибка — нужно использовать переменные размеров.

3) Для умножения матриц тебе понадобится три вложенных цикла и правильный расчёт индексов элементов в одномерных массивах.