James R. Larus
Edited by Tom Kelliher
Copyright ©1990-2004 by James R. Larus
(This document may be copied without royalties,
so long as this copyright notice remains on it.)
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 into
register $v0 and the arguments into registers $a0
$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
| 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 | ||
| print_character | 11 | $a0 = character | |
| read_character | 12 | character (in $v0) | |
| open | 13 | $a0 = filename, | file descriptor (in $v0) |
| $a1 = flags, $a2 = mode | |||
| read | 14 | $a0 = file descriptor, | bytes read (in $v0) |
| $a1 = buffer, $a2 = count | |||
| write | 15 | $a0 = file descriptor, | bytes written (in $v0) |
| $a1 = buffer, $a2 = count | |||
| close | 16 | $a0 = file descriptor | 0 (in $v0) |
| exit2 | 17 | $a0 = value |