.align 2 A: .word 2, 1, 3 .word 3, 4, 1 .word 5, 2, 3 B: .word 1, 2, 0 .word 4, 1, 2 .word 3, 2, 1 C: .space 36 # Space for 9 elements (3x3 matrix) main: # Load the base addresses of A, B, and C into registers la t0, A # t0 = base of A la t1, B # t1 = base of B la t2, C # t2 = base of C # Calculate C[0] = A[0]*B[0] + A[1]*B[3] + A[2]*B[6] lw t3, 0(t0) # t3 = A[0] (2) lw t4, 0(t1) # t4 = B[0] (1) mul t5, t3, t4 # t5 = A[0]*B[0] (2*1 = 2) lw t3, 4(t0) # t3 = A[1] (1) lw t4, 12(t1) # t4 = B[3] (4) mul t6, t3, t4 # t6 = A[1]*B[3] (1*4 = 4) add t5, t5, t6 # t5 = t5 + t6 (2 + 4 = 6) lw t3, 8(t0) # t3 = A[2] (3) lw t4, 24(t1) # t4 = B[6] (3) mul t6, t3, t4 # t6 = A[2]*B[6] (3*3 = 9) add t5, t5, t6 # t5 = t5 + t6 (6 + 9 = 15) sw t5, 0(t2) # Store result C[0] = 15 # Calculate C[1] = A[0]*B[1] + A[1]*B[4] + A[2]*B[7] lw t3, 0(t0) # t3 = A[0] (2) lw t4, 4(t1) # t4 = B[1] (2) mul t5, t3, t4 # t5 = A[0]*B[1] (2*2 = 4) lw t3, 4(t0) # t3 = A[1] (1) lw t4, 16(t1) # t4 = B[4] (1) mul t6, t3, t4 # t6 = A[1]*B[4] (1*1 = 1) add t5, t5, t6 # t5 = t5 + t6 (4 + 1 = 5) lw t3, 8(t0) # t3 = A[2] (3) lw t4, 28(t1) # t4 = B[7] (2) mul t6, t3, t4 # t6 = A[2]*B[7] (3*2 = 6) add t5, t5, t6 # t5 = t5 + t6 (5 + 6 = 11) sw t5, 4(t2) # Store result C[1] = 11 # Calculate C[2] = A[0]*B[2] + A[1]*B[5] + A[2]*B[8] lw t3, 0(t0) # t3 = A[0] (2) lw t4, 8(t1) # t4 = B[2] (0) mul t5, t3, t4 # t5 = A[0]*B[2] (2*0 = 0) lw t3, 4(t0) # t3 = A[1] (1) lw t4, 20(t1) # t4 = B[5] (2) mul t6, t3, t4 # t6 = A[1]*B[5] (1*2 = 2) add t5, t5, t6 # t5 = t5 + t6 (0 + 2 = 2) lw t3, 8(t0) # t3 = A[2] (3) lw t4, 32(t1) # t4 = B[8] (1) mul t6, t3, t4 # t6 = A[2]*B[8] (3*1 = 3) add t5, t5, t6 # t5 = t5 + t6 (2 + 3 = 5) sw t5, 8(t2) # Store result C[2] = 5 # Exit program li a0, 10 # Exit code for RISC-V syscall ecall