Syscall in MIPS Xinhui Hu Yuan Wang MARS • What is MARS? – MIPS simulator • How to get it? – http://courses.missouristate.edu/KenVollmar/Mar s/download.htm – Java based • How to use it? – Use the tutorial in the website – Assemble->execute->step-by-step execute Format of a MIPS program • Every line contains at most one instruction • # marks beginning of comment – assembly language program require more comments! – at least one per line! Parts of a MIPS program • Identify data segment and text (code) segment .data .text .globl main main: # start of code • On simulator, data segment starts at 0x10010000 Data segment • Identify data segment and text (code) segment .data .word 7 .word 3 .text .globl main main: #one word with initial value 7 #one word with initial value 3 # start of code • On simulator, data segment starts at 0x10010000 Data and labels • Locations in data section can be marked with label • Label represents the address of where the data is in memory .data first: .word 7 last: .word 3 #one word with initial value 7 #one word with initial value 3 System calls • syscall instruction is used for calls to the operating systems – input – output • Basic operation – load $v0 with command to execute – put output value in $a0 (or $f12) – get input result from $v0 (or $f0) Useful syscall Commands Command (in $v0) 1 2 4 5 6 8 10 11 Event Arguments print int print float print string read int read float read string exit program print byte $a0 = integer $f12 = float $a0 = pointer to string Result $a0 is printed out $f12 is printed out string is printed out $v0 holds integer read $f0 holds float read $a0 = buffer,a1 = length string is read from console $a0 = byte byte is printed out Printing an integer • Command is 1 • Command must be in register • Value to print must be in register a0 • Example: print the value 10 addi $v0, $v0, 1 # command to print integer addi $a0, $a0, 10 # value to print syscall Strings for output • Define in data section of program • Use labels to identify different strings – Labels represent addresses in memory • Strings are C strings (end with 0) .data prompt: .asciiz "Enter in an integer: " str1: .asciiz "The integer is: " newline: .asciiz "\n " hello: .asciiz”Hello, students of CSE230!” Printing a string • Command is 4 • $v0 must hold command • $a0 must hold address of string to print • Example: print hello li $v0, 4 #command to print string la $a0, hello # load address of string syscall Reading input • Command is 5 • $v0 must hold command • $v0 get result • Example: read number li $v0, 5 # command to read integer syscall move $t0, $v0 # result saved in $t0