Download SPIM : A MIPS Simulator

Survey
yes no Was this document useful for you?
   Thank you for your participation!

* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project

Document related concepts
no text concepts found
Transcript
SPIM : A MIPS Simulator
Archi & Net Lab
이용석
([email protected])
Contents
Introduction
SPIM Interface
Simulator Usage
MIPS R2000 Assembler Language
Program Example
Introduction (1/2)
What’s SPIM?
A simulator that runs programs for the MIPS
R2000/R3000 RISC computers
What does SPIM do?
Reads and executes MIPS assembly language file
immediately
Works as a debugger
Provides some OS like services
Introduction (2/2)
Where can we get SPIM?
FTP: ftp.cs.wisc.edu
/pub/spim/spimwin.exe
Installing SPIM
Just run spimwin.exe and follow the installation
procedure
Windows Interface
 Registers window
shows the values of all
registers in the MIPS CPU and
FPU
 Text segment window
shows instructions
 Data segment window
shows the data loaded into the
program’s memory and the
data of the program’s stack
 Messages window
shows PCSpim messages
(include error messages)
Simulator Usage
Opening source file
Use File menu or toolbar button
Simulation
Go: Run loaded program
Break: Stop the execution of the program
Single / Multiple Step: Stepping for debugging
Breakpoint: Stop program before it executes a particular instruction
Reload: Reload source file after change it with editor program
MIPS Assembly Layout
Program Layout
.text
#code section
.globl main
#starting point: must be global
main:
# user program code
.data
label:
#data section
.data_type list_of_data
#data loc + data type + data
.text
label:
#code section
#function label
#user functions
MIPS Assembler Directives (1/2)
Data Types
.word, .half - 32/16 bit integer
.byte - 8 bit integer (similar to ‘char’ type in C)
.ascii, .asciiz - string (asciiz is null terminated)
Strings are enclosed in double-quotas(”)
Special characters in strings follow the C convention
• newline(\n), tab(\t), quote(\”)
.double, .float - floating point
MIPS Assembler Directives (2/2)
Other Directives
.text - Indicates that following items are stored in
the user text segment
.data - Indicates that following data items are
stored in the data segment
.globl sym - Declare that symbol sym is global
and can be referenced from other files
SPIM System Calls
System Calls (syscall)
OS-like services
Method
Load system call code into register $v0
Load arguments into registers $a0…$a3
After call, return value is in register $v0
Frequently used system calls
Service
Print_int
Print_string
Read_int
Code($v0)
Arg
1
4
5
$a1
$a0
Result
$v0
SPIM Program Example (1/3)
A Simple Program
#sample example 'add two numbers’
.text
.globl main
# text section
# call main by SPIM
main:
#
#
#
#
#
la $t0, value
lw $t1, 0($t0)
lw $t2, 4($t0)
add $t3, $t1, $t2
sw $t3, 8($t0)
.data
value: .word 10, 20, 0
load address ‘value’ into $t0
load word 0(value) into $t1
load word 4(value) into $t2
add two numbers into $t3
store word $t3 into 8($t0)
# data section
# data for addition
SPIM Program Example (2/3)
A Program with System Call
#sample example 'system call'
.text
.globl main
lw $t1, 0($t0)
lw $t2, 4($t0)
add $t3, $t1, $t2
sw $t3, 8($t0)
main:
la $t0, value
li $v0, 4
la $a0, msg1
syscall
li $v0, 1
move $a0, $t3
syscall
li $v0, 5
syscall
sw $v0, 0($t0)
li $v0, 5
syscall
sw $v0, 4($t0)
.data
value: .word 0, 0, 0
msg1: .asciiz "Result = "
SPIM Program Example (3/3)
A Program with Procedure Call
# sample example ‘swap two numbers’
.text
.globl
main
main:
la
$a0, array
addi
$a1, $0, 0
.data
array:
addi
sw
$sp, $sp, -4
$ra, 0($sp)
jal
swap
lw
addi
$ra, 0($sp)
$sp, $sp, 4
jr
$ra
.word 5, 4, 3, 2, 1
#
#
#
#
#
#
#
swap(int v[], int k)
{
int temp;
temp = v[k];
v[k] = v[k+1];
v[k+1] = temp;
}
swap:
add
add
add
lw
lw
sw
sw
jr
$t1,
$t1,
$t1,
$t0,
$t2,
$t2,
$t0,
$ra
$a1, $a1
$t1, $t1
$a0, $t1
0($t1)
4($t1)
0($t1)
4($t1)
Related documents