Syscall in MIPS

advertisement
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
Download