.data .align 4 A: .word 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 # Matrix A B: .word 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 # Matrix B C: .space 64 # Matrix C (4x4, initialized to 0) .text .globl main main: # Initialize registers and variables li $t0, 0 # Initialize i to 0 (row index) li $t1, 0 # Initialize j to 0 (column index) li $t2, 0 # Initialize k to 0 (inner loop index) li $t3, 0 # Initialize sum to 0 # Outer loop (i loop) LoopI: bge $t0, $rowsA, Exit # Exit if i >= rowsA # Middle loop (j loop) li $t1, 0 # Initialize j to 0 LoopJ: bge $t1, $colsB, NextI # Exit if j >= colsB # Inner loop (k loop) li $t2, 0 # Initialize k to 0 li $t3, 0 # Initialize sum to 0 LoopK: bge $t2, $colsA, ComputeSum # Exit if k >= colsA # Load A[i][k] and B[k][j], and multiply lw $s0, A($t0, $t2) lw $s1, B($t2, $t1) mul $s0, $s0, $s1 add $t3, $t3, $s0 addi $t2, $t2, 1 # Increment k j LoopK ComputeSum: # Store the result in C[i][j] sw $t3, C($t0, $t1) addi $t1, $t1, 1 # Increment j j LoopJ NextI: addi $t0, $t0, 1 # Increment i j LoopI Exit: # Program exit li $v0, 10 syscall