Solving MIPS Runtime Error: Address Out of Range 0x00000000

Click For Summary
The discussion centers around a runtime error in assembly code, specifically an "address out of range 0x00000000" error occurring during a load word (lw) instruction. The user suspects the issue lies within the first three lines of their code. Suggestions include utilizing a low-level debugger or emulator to inspect register values, as this could help identify if a register is attempting to access an invalid memory address. Additionally, there is a query regarding whether the numbers in the mnemonics represent offsets provided with the register, indicating a potential area for further investigation in the code's logic.
m00nbeam360
Messages
20
Reaction score
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!
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
 
Technology news on Phys.org
Hey m00nbeam360.

Just out of curiosity, have you run this code through a low level debugger where you get access to the register values? (Even if you have to use some sort of emulator program)

I can't really speculate what it's in the values, but if you for example over-writing a value or trying to load in the contents at address 0x0 when something has been cleared then the register contents will reflect that.

Also are those numbers in your mneumonics some kind of offset you provide with the register?
 
Learn If you want to write code for Python Machine learning, AI Statistics/data analysis Scientific research Web application servers Some microcontrollers JavaScript/Node JS/TypeScript Web sites Web application servers C# Games (Unity) Consumer applications (Windows) Business applications C++ Games (Unreal Engine) Operating systems, device drivers Microcontrollers/embedded systems Consumer applications (Linux) Some more tips: Do not learn C++ (or any other dialect of C) as a...

Similar threads

  • · Replies 5 ·
Replies
5
Views
10K
  • · Replies 4 ·
Replies
4
Views
1K
  • · Replies 1 ·
Replies
1
Views
3K
  • · Replies 4 ·
Replies
4
Views
7K
  • · Replies 4 ·
Replies
4
Views
21K
  • · Replies 4 ·
Replies
4
Views
5K
  • · Replies 5 ·
Replies
5
Views
6K
  • · Replies 1 ·
Replies
1
Views
2K
Replies
1
Views
2K
  • · Replies 1 ·
Replies
1
Views
8K