next up previous
Next: Description of the MIPS Up: SPIM Previous: Assembler Syntax


System Calls


Table 1: System services.
Service System Call Code Arguments Result
print_int 1 $a0 = integer
print_float 2 $f12 = float
print_double 3 $f12 = double
print_string 4 $a0 = string
read_int 5 integer (in $v0)
read_float 6 float (in $f0)
read_double 7 double (in $f0)
read_string 8 $a0 = buffer $a1 = length
sbrk 9 $a0 = amount address (in $v0)
exit 10

SPIM provides a small set of operating-system-like services through the system call (syscall) instruction. To request a service a program loads the system call code (see Table 1) into register $v0 and the arguments into registers $a0$\ldots$$a3 (or $f12 for floating point values). System calls that return values put their result in register $v0 (or $f0 for floating point results). For example to print ``the answer = 5'' use the commands:
        .data
str:  .asciiz "the answer = "
.text
li $v0
4        # system call code for print_str
la $a0
str      # address of string to print
syscall          # print the string

li $v0
1        # system call code for print_int
li $a0
5        # integer to print
syscall          # print it

print_int is passed an integer and prints it on the console. print_float prints a single floating point number. print_double prints a double precision number. print_string is passed a pointer to a null-terminated string which it writes to the console.

read_int read_float and read_double read an entire line of input up to and including the newline. Characters following the number are ignored. read_string has the same semantics as the Unix library routine fgets. It reads up to n-1 characters into a buffer and terminates the string with a null byte. If there are fewer characters on the current line it reads through the newline and again null-terminates the string. Warning: programs that use these syscalls to read from the terminal should not use memory-mapped IO (see Section 5).

sbrk returns a pointer to a block of memory containing n additional bytes. exit stops a program from running.


next up previous
Next: Description of the MIPS Up: SPIM Previous: Assembler Syntax
Ian Moor
1998-09-11