- #1
m00nbeam360
- 20
- 0
Hi there,
Not sure if this is the right place to post, but I seem to get a runtime error that says: address out of range 0x00000000. I think that it's probably in the first three lines of my code, but any idea as to what else it may be? Thanks so much!
Not sure if this is the right place to post, but I seem to get a runtime error that says: address out of range 0x00000000. I think that it's probably in the first three lines of my code, but any idea as to what else it may be? Thanks so much!
Code:
.data
save: .word 1,2,4
size: .word 3
.text
swap: sll $t1, $a1, 2 #shift bits by 2
add $t1, $a1, $t1 #set $t1 address to v[k]
lw $t0, 0($t1) #load v[k] into t1 <--- ERROR
#lw $t2, 4($t1) #load v[k+1] into t1
#sw $t2, 0($t1) #swap addresses
#sw $t0, 4($t1) #swap addresses
jr $ra #return
sort: addi $sp, $sp, -20 #make enough room on the stack for five registers
sw $ra, 16($sp) #save the return address on the stack
sw $s3, 12($sp) #save $s3 on the stack
sw $s2, 8($sp) #save Ss2 on the stack
sw $s1, 4($sp) #save $s1 on the stack
sw $s0, 0($sp) #save $s0 on the stack
move $s2, $a0 #copy the parameter $a0 into $s2 (save $a0)
move $s3, $a1 #copy the parameter $a1 into $s3 (save $a1)
move $s0, $zero #start of for loop, i = 0
for1tst: slt $t0, $s0, $s3 #$t0 = 0 if $s0 S $s3 (i S n)
beq $t0, $zero, exit1 #go to exit1 if $s0 S $s3 (i S n)
addi $s1, $s0, -1 #j - i - 1
for2tst: slti $t0, $s1, 0 #$t0 = 1 if $s1 < 0 (j < 0)
bne $t0, $zero, exit2 #$t0 = 1 if $s1 < 0 (j < 0)
sll $t1, $s1, 2 #$t1 = j * 4 (shift by 2 bits)
add $t2, $s2, $t1 #$t2 = v + (j*4)
lw $t3, 0($t2) #$t3 = v[j]
lw $t4, 4($t2) #$t4 = v[j+1]
slt $t0, $t4, $t3 #$t0 = 0 if $t4 S $t3
beq $t0, $zero, exit2 #go to exit2 if $t4 S $t3
move $a0, $s2 #1st parameter of swap is v(old $a0)
move $a1, $s1 #2nd parameter of swap is j
jal swap #swap
addi $s1, $s1, -1
j for2tst #jump to test of inner loop
j print
exit2:
addi $s0, $s0, 1 #i = i + 1
j for1tst #jump to test of outer loop
exit1:
lw $s0, 0($sp) #restore $s0 from stack
lw $s1, 4($sp) #resture $s1 from stack
lw $s2, 8($sp) #restore $s2 from stack
lw $s3, 12($sp) #restore $s3 from stack
lw $ra, 16($sp) #restore $ra from stack
addi $sp, $sp, 20 #restore stack pointer
jr $ra #return to calling routine
.data
space:.asciiz " " # space to insert between numbers
head: .asciiz "The sorted numbers are:\n"
.text
print:add $t0, $zero, $a0 # starting address of array
add $t1, $zero, $a1 # initialize loop counter to array size
la $a0, head # load address of print heading
li $v0, 4 # specify Print String service
syscall # print heading
out:
li $v0, 1 # specify Print Integer service
la $a0, space # load address of spacer for syscall
li $v0, 4 # specify Print String service
syscall # output string
addi $t0, $t0, 4 # increment address
addi $t1, $t1, -1 # decrement loop counter
bgtz $t1, out # repeat if not finished
jr $ra # return