11

My program is supposed to read an integer and print it back to the user, but every time it just prints 268501230, no matter what is entered. How can I fix it?

.data
prompt2: .asciiz "Please enter value: "
array1:  .space 40
array2:  .space 40
buffer:  .space 4
.text

main:

# Prints the prompt2 string
li $v0, 4
la $a0, prompt2
syscall

# Reads one integer from user and saves in t0
li $v0, 5
la $t0, buffer
syscall

li $v0, 1
li $t0, 5       # $integer to print
syscall

exitProgram:    li $v0, 10  # System call to terminate
    syscall                 # the program

Peter Mortensen
  • 30,738
  • 21
  • 105
  • 131
user2837034
  • 207
  • 1
  • 6
  • 11

2 Answers2

21

This is how I will write a program to get an integer input and to print it out

.data

     text:  .asciiz "Enter a number: "

.text

 main:
    # Printing out the text
    li $v0, 4
    la $a0, text
    syscall

    # Getting user input
    li $v0, 5
    syscall

    # Moving the integer input to another register
    move $t0, $v0

    # Printing out the number
    li $v0, 1
    move $a0, $t0
    syscall

    # End Program
    li $v0, 10
    syscall
aspire29
  • 461
  • 3
  • 16
9
#reads one integer from user and saves in t0
li $v0, 5
la $t0, buffer
syscall

That's not how syscall 5 works. The integer is returned in $v0, so the code ought to be something like:

li $v0,5
syscall
move $t0,$v0

li $v0, 1       
li $t0, 5       # $integer to print
syscall 

You're using the wrong register here as well. The integer to print should go into $a0, not $t0.

Here's a list of syscalls and the registers they use.

Michael
  • 57,169
  • 9
  • 80
  • 125