[http://www.di.univaq.it/muccini/labarch] Modulo di Laboratorio di Architettura degli Elaboratori Corso di Architettura degli Elaboratori con Laboratorio Docente: H. Muccini Lecture 3: Introduzione a SPIM -L interfaccia grafica di SPIM -La struttura di un programma SPIM -Gestione dell input in SPIM Software Engineering and Architecture Group Henry Muccini Il simulatore SPIM Permette di eseguire programmi assembler scritti per il processore MIPS. Può essere scaricato dal sito www.cs.wisc.edu/~larus/spim.html 2/16 1
Download SPIM Linux Platform Unix or Linux system Mac OS X Microsoft Windows (Windows NT, 2000, XP) (spim 7.0 and later versions no longer run on Windows 95/98. Use version 6.5 or earlier.) Program spim xspim spim xspim spim PCSpim Form Source code Binary RPM for Fedora Executa ble Source code File http://www.cs.wisc.edu/~larus/s PIM/spim.tar.Z or http://www.cs.wisc.edu/~larus/s PIM/spim.tar.gz http://www.cs.wisc.edu/cbi/down loads/ http://www.cs.wisc.edu/~larus/s PIM/pcspim.zip http://www.cs.wisc.edu/~larus/s PIM/pcspim_src.zip 3/16 Lezione Sommario della lezione: 1) L interfaccia grafica di SPIM 2) La struttura di un programma SPIM 3) Gestione dell input in SPIM 4/16 2
1) L interfaccia grafica di SPIM Il simulatore SPIM si presenta organizzato in due finestre visuali, una chiamata console che funge da terminale per le operazioni di input /output e l altra che modella il processore MIPS che si presenta organizzata in quattro pannelli, che sono: 3.1 Il display dei registri 3.2 Il segmento di testo 3.3 Il segmento di dati e dello stack 3.4 Il pannello dei messaggi 5/16 6/16 3
3.1 Il display dei registri Mostra lo stato di tutti i registri della CPU e della FPU del MIPS. Il contenuto dei registri è codificato in esadecimale ed è aggiornato ogni volta che il programma interrompe la sua esecuzione, ovvero quando il programma termina; produce un errore; raggiunge un breakpoint definito dall utente. 7/16 Registri e SPIM MAR Memoria MBR Bus R1R2 Rn MEMORIA ALU CPU 8/16 4
3.2 Il segmento di testo Mostra la porzione di memoria in cui è memorizzato il programma da eseguire (a partire dalla locazione 0x0040000). Tale programma è costituito dal codice utente più una parte di codice di sistema che si occupa della gestione della riga di comando e della terminazione (trap handler). Una generica riga di questo segmento ha il seguente formato: Numero di riga del programma contenente l istruzione [0x00400004] 0x8fa40000 lw $4,0($29); 89: lw $a0,0($sp) Indirizzo dell istruzione Codifica dell istruzione in linguaggio macchina Descrizione mnemonica dell istruzione Codifica dell istruzione in linguaggio assembler 9/16 Esempi di numerazioni 10/16 5
Aiuto Progetto 1 : Conversione di numeri esadecimali in binario Esadecimale in binario. Inoltre, si converta byte a byte nel corrispondente carattere, utilizzando la notazione ASCII. Ad esempio, 31 in 0x00000031, 0011 0001 -> in decimale sta per 49 -> che nella tabella ASCII sta per il carattere 1. 11/16 3.3 Segmento di dati e stack Mostra lo stato della memoria riservata ai dati statici (segmento di dato) e dinamici (stack) del programma. Per facilitarne la lettura, ogni riga di tali segmenti mostra il contenuto (in esadecimale) di 4 locazioni di memoria consecutive (1 locazione ~1 word ~ 4 byte ~ 1 registro) Queste locazioni sono ordinate in maniera crescente da sinistra verso destra. Ogni locazione, essendo questa una word e poiché il MIPS indirizza il singolo byte, rappresenta a sua volta 4 locazioni consecutive che sono invece ordinate da destra verso sinistra. 12/16 6
Memoria e SPIM MAR Memoria MBR Bus R1R2 Rn MEMORIA ALU CPU 13/16 Organizzazione della memoria Global pointer Dati statici Static Data Text Codice del programma ( text ) 14/16 7
Esempio: Determinare l indirizzo dei byte di memoria evidenziati in rosso nella figura sottostante. a) [0x10000000] 0x00000000 0x00000000 0x00000000 0x00000000 b) [0x10000010] 0x00000000 0x00000000 0x00000000 0x00000000 Risposta: a) 0x10000005; b) non si tratta di un indirizzo di memoria valido. 15/16 2) Struttura di un programma SPIM.data.text.globl main main: Facoltativo Apri Lezione3.palindroma.asm 16/16 8
HM1 3) Gestione dell input in SPIM (1/4) Scegliendo il seguente percorso dalla barra degli strumenti: Simulator Set Value èpossibile inserire direttamente qualsiasi valore nelle seguenti destinazioni: Registro Locazione di memoria 17/16 Gestione dell input in SPIM (2/4) E inoltre possibile usare il segmento.data per inserire valori in memoria (a partire dalla locazione 0x10010000) secondo il seguente schema:.data label Facoltativo.tipo valore.data X:.word 5 dove label èun eventuale nome che si vuole associare alla locazione di memoria che si sta inizializzando mentre valore ne definisce il contenuto; tipo, infine, è la dimensione con cui si vuole rappresentare valore (es. word, half, byte). 18/16 9
Diapositiva 17 HM1 Per usare il Set Values con un "Address", bisogna scrivere l'indirizzo ed il valore nella forma 0xaaaaaaaa. Per usare il SetVAlues con un "Registro", bisogna invece scrivere il nome del registro nella forma R18 mentre il suo valore come 0xaaaaaaaa. Henry Muccini; 13/01/2006
Esempio: Caricare i valori numerici 14 e 5 rispettivamente nei registri $s0 e $s1..data X:.word 14 Y:.word 5.text.globl main main: lw $s0,x lw $s1,y Apri Lezione3.palindroma.asm 19/16 Gestione dell input in SPIM (3/4) SPIM fornisce anche una modalità di inserimento dati interattiva usando alcune chiamate di sistema e la finestra console come terminale. Per invocare una chiamata di sistema è sufficiente utilizzare il comando syscall. Prima di utilizzare tale comando, però, è necessario specificare tutti i parametri richiesti dalla particolare chiamata di sistema che si vuole utilizzare. 20/16 10
Alcune chiamate di sistema Chiamata di sistema Print_string Read_int Codice 4 5 Parametri $a0 contiene l indirizzo della stringa da stampare $v0 conterrà il risultato della lettura da tastiera Prima di utilizzare una qualsiasi chiamata di sistema ènecessario porre nel registro $v0 il relativo codice. 21/16 Esempio: Lettura di un intero da tastiera..data Stringa:.asciiz Inserisci un numero:.text.globl main main: li $v0,4 # codice per la chiamata di sistema Print_string la $a0,stringa # codice syscall li $v0,5 # codice per la chiamata di sistema Read_int syscall 22/16 11
File: Lezione3.syscall.asm 23/16 Gestione dell input in SPIM (4/4) SPIM fornisce due ulteriori modalità di inserimento dati che sono: Utilizzo della riga di comando Input formattato in memoria Vedremo tali input nelle prossime lezioni Ora vediamo un esempio di Programma in SPIM 24/16 12
Esempio: Lezione3.palindroma.asm 25/16 Per approfondimenti - Alcuni documenti su SPIM - Alcuni manuali sul MIPS - Alcuni esempi svolti in SPIM - http://www.di.univaq.it/muccini/labarch/ Materiale.htm 26/16 13
MARS MARS MIPS Assembler and Runtime Simulator MARS 3.5 14 Aug 2008 http://courses.missouristate.edu/kenvollmar/ MARS/ 27/16 28/16 14