Computer Architecture SPIM Simulator June-Hyun Moon
LIST SPIM Definition Multiple versions Memory Layout PCSPIM Example Homework
SPIM Definition SPIM은 MIPS R2000/R3000 프로세서들을 위해 작성되어진 프로그램을 실행시키기 위한 소프트웨어 시뮬레이터 SPIM은 어셈블리 언어나 MIPS의 실행할 수 있는 파일들을 읽고 즉시 실행할 수 있다. SPIM은 자체 포함된 시스템 디버거 약간 운영체제 시스템과 같은 서비스들
SPIM of Multiple versions Command-line-driven program 알파벳과 숫자로 이루어 진다. XSPIM X-windows environment Much easier program to learn PCSPIM Windows version of SPIM
Memory Layout . . . 0x7FFFFFFF Stack segment Data that Instruction operate on . . . Instruction Data segment 0x10000000 Text segment 0x00400000 Reserved
PCSPIM Download and Install Windows 기능 레지스터 출력 텍스트 세그먼트 데이터와 스택 세그먼트 Go Single step Multiple steps Breakpoint
PCSPIM Download Downloading PCSPIM http://www.cs.wisc.edu/~larus/spim.html
Executable File Install
Source Code Install Step 1
Source Code Install Step 2
Source Code Install Step 3 F7 - Compile
Source Code Install Step 4 Ctrl + F5 Program Run
Windows Register display Text segments Data segments SPIM messages
General-purpose registers Windows Register display MIPS CPU와 FPU안에 있는 모든 레지스터의 값을 보여준다. General-purpose registers
Windows Text segments PCSPIM이 실행될 때, 자동으로 로드되어지는시스템 코드와 자신의 프로그램으로 부터 명령어들을 출력한다. [0x00400000] 0x8fa40000 lw $4, 0($29) ; 89 : lw $a0, 0($sp) memory address of instruction Source code in assembly file Instruction`s numerical encoding Line number in assembly file Instruction`s mnemonic description
Windows Data segments (Data and stack segments) SPIM messages 프로그램의 스택에 있는 데이터와 자신의 프로그램의 메모리 안에 로드되는 데이터를 출력한다. SPIM messages error 메시지를 보여준다.
Simulator Function Load File → Open 어셈블리 파일을 선택한다. Go Simulator → Go 결과가 콘솔에 출력된다. Single step Simulator → Single Step 한번에 하나의 명령어가 실행된다. Multiple step Simulator → Multiple Step 한번에 주어진 명령어의 수만큼 실행된다. Breakpoint Simulator → Breakpoint 특정 명령어를 실행하기 전에 프로그램을 멈춘다.
Function - Load
Function - Go
Function - Go
Function – Single step
Function – Single step One step
Function – Multiple step
Function – Multiple step Two step
Function - breakpoint
Function - breakpoint
Function - breakpoint
Example Sum .text # text section .globl main # call main by SPIM main: la $t0, value # load address 'value' into $t0 lw $t1, 0($t0) # load word 0(value) into $t1 lw $t2, 4($t0) # load word 4(value) into $t2 lw $t3, 8($t0) # load word 8(value) into $t3 again: beqz $t2, End # t2가 0이면 End로 가고 아니면 다음으로 내려간다 add $t1, $t1, 1 # t1의 값을 하나씩 증가시킨다 add $t3, $t3, $t1 # t3에 t1을 더해 t3에 넣으며 같은 누적한다 sub $t2, $t2, 1 # t2의 값을 하나씩 감소시킨다 j again # again으로 이동시켜 루프를 돌린다 End: sw $t3, 8($t0) # store word $t3 into 8($t0) li $v0, 4 la $a0, msg1 syscall li $v0, 1 move $a0, $t3 .data # data section value: .word 0, 100, 0 # data for addition msg1: .asciiz "SUM of 0~100 Number=>" Sum
System calls System Calls (syscall) Method Example) 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 Example) li $v0, 4 # print string la $a0, msg1 syscall li $v0, 1 # print integer move $a0, $t3 msg1 = "SUM of 0~100 Number=>“ , $t3 = 5050
System calls