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 ... $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
Table 1: System Services
Service | 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 $a0) | |||||
read_float | 6 | float (in $f0) | |||||
read_double | 7 | double (in $f0) | |||||
read_string | 8 | $a0$ = buffer, $a1 = length | |||||
sbrk | 9 | $a0$ = amountaddress
(in $v0)
| exit | 10 | |
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 th ecurrent line, it reads through thenewline 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.
Maintained by John Loomis, last updated 7 September 2005