I was trying the answer from the post 2D Array in MIPS , which provides a complete coded solution for Row major matrix as user input.
.data
read_row_matrix_prompt_p: .asciiz "Enter an integer: "
###########################################################
.text
read_row_matrix:
li $t3, 0 # initialize outer-loop counter to 0
li $t2, 3
li $t1, 3
read_row_matrix_loop_outer:
bge $t3, $t1, read_row_matrix_loop_outer_end
li $t4, 0 # initialize inner-loop counter to 0
read_row_matrix_loop_inner:
bge $t4, $t2, read_row_matrix_loop_inner_end
mul $t5, $t3, $t2 # $t5 <-- width * i
add $t5, $t5, $t4 # $t5 <-- width * i + j
sll $t5, $t5, 2 # $t5 <-- 2^2 * (width * i + j)
add $t5, $t0, $t5 # $t5 <-- base address + (2^2 * (width * i + j))
li $v0, 4 # prompt for number
la $a0, read_row_matrix_prompt_p
syscall
li $v0, 5 # read a integer number
syscall
sw $v0, 0($t5) # store input number into array <--- ""Error""
addiu $t4, $t4, 1 # increment inner-loop counter
b read_row_matrix_loop_inner # branch unconditionally back to beginning of the inner loop
read_row_matrix_loop_inner_end:
addiu $t3, $t3, 1 # increment outer-loop counter
b read_row_matrix_loop_outer # branch unconditionally back to beginning of the outer loop
read_row_matrix_loop_outer_end:
and I have run into the following error :
line 28: Runtime exception at 0x00400048: address out of range 0x00000000
Similar error has been posted in many questions, but each scenario seems to be local.
I realize that #t5 would actually start from $t0 to begin with, since all the initialization make it Zero. I tried to start with 1 as well for the counters and still faced the same Error.
What could be the issue here?
Adding this part of the code before executing the procedure helped me initialize the array and it worked fine
mul $a0, $t1, $t2 #multiply to get the 2d array size and store in a0 register
sll $a0, $a0, 2 #multiply the resulting output with 2^2 = 4 for integers address size location
li $v0, 9 #allocate address with memory size as in a0
syscall
move $t0,$v0 #resulting memory stored in t0 register