Skip to main content
Logo image

Section A.2 OS Calls

Calling the operating system is done by the ecall instruction. The operation to be carried out is specified by the a0 register. Potential arguments to the system call are passed in the other argument registers.
Action a0 Description
print integer 1 a1 = number to be printed.
print string 4 a1 = address of ASCIIZ string.
convert integer 5 Return integer interpretation of null-terminated string from a1 in a0.
read integer 6 Return read number in a0.
read string 8
a1 = start address of memory area where characters are put. a2 = maximum number of characters to read.
exit 10 End program execution.
print character 11 a1 = ASCII code of character to print.
read character 12 Return ASCII code of read character in a0.
enable terminal 0x130 Enables the VSCode terminal for receiving input.
read character poll 0x131 a0=0 if all input read, a0=1 if waiting for input, a0=2 if a character was read, a1 contains the character
There are more ecalls for specialized tasks:
Action a0 Description
heap allocation (sbrk) 9 Allocates a a1 large segment on the heap returned in a0
open file 13 a1 filename, a2 permissions, returns filehandle in a0
read file 14 read a3 bytes from filehandle from a1, writes to address at a2, a0 contains number of bytes read
write file 15 a1 filehandle, a2 buffer with data, a3 amount to write, a4 size of each item, returns a0 number of items written
close file 16 a1 filehandle, return 0 if successfull, EOF otherwise
exit with error code 17 a1 error code
flush 18 a1 filehandle, return 0 if successfull, EOF otherwise
end of file 19 a1 filehandle, return a0 is non-zero if file at end
error check 20 a1 filehandle, return a0 is non-zero if file encountered errors
print hex 34 a1 number to print in hex