Dismiss Notice
Join Physics Forums Today!
The friendliest, high quality science and math community on the planet! Everyone who loves science is here!

Programming in mips

  1. Jan 23, 2013 #1
    I am trying to teach mips to my self and wrote a fairly simple program and it isn't working and found out that the strings I declared in .data are somehow affecting one of my pointers.

    Here is the code:

    #Write a program that allows the user to enter 5 ints and store these ints in an array and display them in reverse order


    msg: .asciiz "Enter your number: "
    msg1: .asciiz "Here are your numbers: "
    msg2: .asciiz " "
    array: .data 20



    la $s0, array

    add $t0, $s0, $zero

    li $t1, 0
    li $t2, 5


    li $v0, 4

    la $a0,msg


    li $v0, 5


    add $t2, $v0, $zero

    sw $t2, 0($t0) # This is the line causing errors

    addi $t0, $t0, 4
    addi $t1, $t1, 1

    slt $t3, $t1, $t2

    bne $t3, $zero, loop

    li $v0, 4

    la $a0, msg1


    li $t5, 0


    add $t0, $t0, -4

    lw $t4, 0($t0)

    li $v0, 4

    add $a0, $t4, $zero


    li $v0, 4

    la $a0, msg2


    addi $t1, $t1, -1

    slt $t2, $t5, $t1

    bne $t2, $zero, loop1

    li $v0, 10


    Can anyone help please?
  2. jcsd
  3. Jan 24, 2013 #2


    Staff: Mentor

    When you post code, it's good manners to put [ code ] and [ /code ] tags around it (without the extra spaces). I have done that below.
    I took a stab at running your code, and hit the same exception at the line you indicated. Since there essentially no comments in your code, it's difficult to tell what you are trying to do. Comments are even more important in assembly code, to help a reader (including yourself) understand what, and more importantly, why you are doing something.

    It would be a good idea for you to break up your code into sections, using comments, where each section has a specific purpose.

    The first block of code should ask the user to input the five numbers. When I ran your code, it continued asking for numbers well past the fifth. Your loop should keep track of how many times it has run, so that it asks for only five numbers and then moves on.

    The final block should print the numbers. The simplest way to do this would be to merely print the numbers in reverse order, starting at the last number in the array (the highest memory address), and working your way to the beginning. I am assuming you don't actually need to reverse the numbers in the array itself.

    With regard to the exception you're getting, this code:
    Code (Text):
    sw $t2, 0($t0)
    stores the value at $t2 (R10) at location $t0 + 0 (R8 + 0). When I ran the program, the address in R8 was 0, which meant that the program was trying to store a value in location 0.
    Last edited: Jan 24, 2013
Share this great discussion with others via Reddit, Google+, Twitter, or Facebook