/* #include unsigned int A[][4] = {{ 1, 2, 3, 4}, { 5, 6, 7, 8}, { 9,10,11,12}, {13,14,15,16}}; unsigned int B[][4] = {{ 1, 2, 3, 4}, { 5, 6, 7, 8}, { 9,10,11,12}, {13,14,15,16}}; unsigned int C[][4] = {{ 0, 0, 0, 0}, { 0, 0, 0, 0}, { 0, 0, 0, 0}, { 0, 0, 0, 0}}; int main() { unsigned int i, j, k; for (i = 0; i < 4; i++){ for (j = 0; j < 4; j++){ C[i][j] = 0; for (k = 0; k < 4; k++) C[i][j] += A[i][k] * B[k][j]; } } for (i = 0; i < 4; i++){ for (j = 0; j < 4; j++){ printf("%5u", C[i][j]); } printf("\n"); } return 0; } */ .data A: .word 1, 2, 3, 4 .word 5, 6, 7, 8 .word 9,10,11,12 .word 13,14,15,16 B: .word 1, 2, 3, 4 .word 5, 6, 7, 8 .word 9,10,11,12 .word 13,14,15,16 C: .zero 64 P: .string "%5u" .text .globl main main: addi sp,sp,-32 sw ra,28(sp) start: li s3, 0 # i next_i: li s4, 0 # j next_j: li a3, 0 # C[i][j] = 0; li s5, 0 # k ld_a: lui a1, %hi(A) addi a2, a1, %lo(A) slli a6, s3, 2 # i*4 add a6, a6, s5 # [i][k] slli a6, a6, 2 # to word offset add a2, a2, a6 lw a4, 0(a2) # A[i][k] ld_b: lui a1, %hi(B) addi a2, a1, %lo(B) slli a6, s5, 2 # k*4 add a6, a6, s4 # [k][j] slli a6, a6, 2 # to word offset add a2, a2, a6 lw a5, 0(a2) # B[k][j] mult: mul a0, a4, a5 # A[i][k] * B[k][j] add a3, a3, a0 # C[i][j] += A[i][k] * B[k][j]; check_k: addi s5, s5, 1 # k++ li a7, 4 # for (k = 0; k < 4; k++) bne s5, a7, ld_a st_c: lui a1, %hi(C) addi a2, a1, %lo(C) slli a6, s3, 2 # i*4 add a6, a6, s4 # [i][j] slli a6, a6, 2 # to word offset add a2, a2, a6 sw a3, 0(a2) # C[i][j] check_j: addi s4, s4, 1 # j++ li a7, 4 # for (j = 0; j < 4; j++) bne s4, a7, next_j check_i: addi s3, s3, 1 # i++ li a7, 4 # for (i = 0; i < 4; i++) bne s3, a7, next_i print_c: li s3, 0 # i p_next_i: li s4, 0 # j p_next_j: lui a1, %hi(C) addi a2, a1, %lo(C) slli a6, s3, 2 # i*4 add a6, a6, s4 # [i][j] slli a6, a6, 2 # to word offset add a2, a2, a6 lw a1, 0(a2) # C[i][j] lui a5, %hi(P) addi a0, a5, %lo(P) call printf p_check_j: addi s4, s4, 1 # j++ li a7, 4 # for (j = 0; j < 4; j++) bne s4, a7, p_next_j print_return: li a0, 10 # ENTER call putchar p_check_i: addi s3, s3, 1 # i++ li a7, 4 # for (i = 0; i < 4; i++) bne s3, a7, p_next_i finish: li a0, 0 # return 0 lw ra, 28(sp) addi sp, sp, 32 jr ra .end