L ambiente di simulazione SPIM

Похожие документы
Assembly III SPIM: un ambiente di simulazione MIPS

Le costanti Le modalità di indirizzamento L assembly del MIPS

Il simulatore SPIM SPIM

Assembly MIPS: gestione degli array strutture di controllo. A. Borghese, F. Pedersini Dipartimento di Informatica Università degli Studi di Milano

Calcolatori Elettronici A a.a. 2008/2009

Il set istruzioni di MIPS Modalità di indirizzamento. Proff. A. Borghese, F. Pedersini

Linguaggio Assembly e linguaggio macchina

Linguaggio Assembly e linguaggio macchina

Linguaggio Assembly e linguaggio macchina

MIPS Instruction Set 2

Istruzioni di trasferimento dati

Il linguaggio Assembly

Università degli Studi di Roma La Sapienza

Assembler di Spim. Assembler di SPIM. Struttura di un programma assembler. Direttive

Laboratorio di Architettura degli Elaboratori

Linguaggio Assembler MIPS

Il linguaggio assembly

Input/output da file I/O ANSI e I/O UNIX FLUSSI E FILE FLUSSI FLUSSI di TESTO FLUSSI BINARI FILE

Lezione 9: Puntatori a funzioni. Tipi enumerativi e orientati ai bit

Lecture 2: Prime Istruzioni

Linguaggio Assembler MIPS

Assembler MIPS R2000/3000

I puntatori. Un puntatore è una variabile che contiene l indirizzo di un altra variabile. puntatore

Interazione con il DOS e il BIOS

C: panoramica. Violetta Lonati

Assemblatori, linker ed il simulatore SPIM. Università di Bergamo - corso di Calcolatori Elettronici

Introduzione. Indice. Linguaggio macchina. Linguaggio assembler

Programmazione modulare

Linguaggio C: introduzione

Architettura degli Elaboratori II Laboratorio

Processore Danilo Dessì. Architettura degli Elaboratori.

ESERCIZIO 1 Si consideri la seguente funzione f (A, B, C, D) non completamente specificata definita attraverso il suo ON-SET e DC-SET:

Calcolatori Elettronici

Il linguaggio Assembly del MIPS

Accesso a memoria. Accesso a memoria. Accesso a memoria. Modalità di indirizzamento. Lezione 5 e 6. Architettura degli Elaboratori A.

Lezione 20. Assembly MIPS: Il set istruzioni, strutture di controllo in Assembly

1 Esercizio. 2 Esercizio

Istruzioni MIPS per floating point

Laboratorio di Architettura degli Elaboratori LabArch 2007 Terzo Quadimestre, a.a Docente: H. Muccini

Stack-based buffer overflow

Uso avanzato dei puntatori Allocazione dinamica della memoria

La gestione della memoria dinamica Heap

Le etichette nei programmi. Istruzioni di branch: beq. Istruzioni di branch: bne. Istruzioni di jump: j

Lezione 6 Introduzione al C++ Mauro Piccolo

9 - Array. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo


System call per la gestione di processi

Funzioni, Stack e Visibilità delle Variabili in C

Funzioni. Il modello console. Interfaccia in modalità console

Lezione 20. Assembly MIPS: Il set istruzioni, strutture di controllo in Assembly

Lezione4: MIPS e Istruzioni (1 Parte)

HOMEWORKS. in modo che il programma stampi N ripetizioni della stringa HelloWorld (su righe diverse), con N inserito dall utente.

ARCHITETTURA DI UN SISTEMA DI ELABORAZIONE

Università di Roma Tor Vergata Corso di Laurea triennale in Informatica Sistemi operativi e reti A.A Pietro Frasca.

Struttura di programmi MAL Elementi lessicali

ARM esempi di programmi ASM

La programmazione in linguaggio C

Array in Fortran 90. Ing. Luca De Santis. Anno accademico 2006/2007. DIS - Dipartimento di informatica e sistemistica

Транскрипт:

Architettura degli Elaboratori e delle Reti Lezione 14 L ambiente di simulazione SPIM Proff. A. Borghese, F. Pedersini Dipartimento di Scienze dell Informazione Università degli Studi di Milano L 14 1/20 Il simulatore SPIM! SPIM: A MIPS R2000/R3000 Simulator: " http://www.cs.wisc.edu/~larus/spim.html " Version 7.2 Unix or Linux system Microsoft Windows (Windows 95, 98, NT, 2000) Microsoft DOS Mac OS/X L 14 2/20

Sommario! Direttive! Chiamate di sistema (system call)! Esempi L 14 3/20 Direttive! Le direttive (data layout directives) danno delle indicazioni all assemblatore sul contenuto di un file (istruzioni, strutture dati, ecc.)! Sintatticamente le direttive iniziano tutte con il carattere. L 14 4/20

Direttive! Segmento dati.data <addr> " Gli elementi successivi sono memorizzati nel segmento dati a partire dall indirizzo addr, facoltativo..asciiz str " Memorizza la stringa str terminandola con il carattere Null(0x00) ".ascii str ha lo stesso effetto, ma non aggiunge alla fine il carattere Null.byte b1,,bn " Memorizza gli n valori b1,.., bn in byte consecutivi di memoria.word w1,..,wn " Memorizza gli n valori su 32-bit w1,.., wn in parole consecutive di memoria..half h1,..,hn " Memorizza gli n valori su 16-bit h1,.., hn in halfword (mezze parole) consecutive di memoria.space n " Alloca uno spazio pari ad n byte nel segmento dati L 14 5/20 Direttive.align n " Allinea il dato successivo a blocchi di 2n byte: ad esempio.align 2 =.word allinea alla parola il valore successivo.align 1 =.half allinea alla mezza parola il valore successivo.align 0 elimina l allineamento automatico delle direttive.half,.word,.float, e.double fino a quando compare la successiva direttiva.data! Segmento testo.text <addr> " Memorizza gli elementi successivi nel segmento testo dell utente a partire dall indirizzo addr. (Questi elementi possono essere solo istruzioni o parole)..globl sym " Dichiara sym come etichetta globale (ad essa è possibile fare riferimento da altri file) L 14 6/20

Allineamento: esempio.word 1, 6, 0, 8, 2, 3, 8 1 6 0 8 2 3 8 1 word Successivo inserimento.half 1, 6, 0, 8, 2, 3, 8 1 6 0 8 2 3 8 1 word Successivo inserimento L 14 7/20.word + etichetta: esempio array:.word 1, 6, 0, 8, 2, 3, 8 1 word 1 6 0 8 2 3 8! array rappresenta l indirizzo del primo elemento L 14 8/20

Sommario! Introduzione a SPIM! Direttive! Chiamate di sistema (system call)! Esempi L 14 9/20 System call! Sono disponibili delle chiamate di sistema (system call) predefinite che implementano particolari servizi (ad esempio: stampa a video)! Ogni system call ha: " un codice " degli argomenti (opzionali) " dei valori di ritorno (opzionali) L 14 10/20

System call: output 1: print_int: " stampa sulla console il numero intero che le viene passato come argomento; 2: print_float: " stampa sulla console il numero in virgola mobile con singola precisione che le viene passato come argomento; 3: print_double: " stampa sulla console il numero in virgola mobile con doppia precisione che le viene passato come argomento; 4: print_string: " stampa sulla console la stringa che le è stata passata come argomento terminandola con il carattere Null (0); L 14 11/20 System call: input 5: read_int: " legge una linea in ingresso fino al carattere a capo incluso (i caratteri che seguono il numero sono ignorati); 6: read_float: " leggono una linea in ingresso fino al carattere a capo incluso (i caratteri che seguono il numero sono ignorati); 7: read_double: " leggono una linea in ingresso fino al carattere a capo incluso (i caratteri che seguono il numero sono ignorati); 8: read_string: " legge una stringa di caratteri di lunghezza $a1 da una linea in ingresso scrivendoli in un buffer ($a0) e terminando la stringa con il carattere Null (se ci sono meno caratteri sulla linea corrente, li legge fino al carattere a capo incluso e termina la stringa con il carattere Null); L 14 12/20

System call 9: sbrk " restituisce il puntatore (indirizzo) ad un blocco di memoria; 10: exit " interrompe l esecuzione di un programma; L 14 13/20 System call Nome Codice ($v0) Argomenti Risultato print_int 1 $a0 print_float 2 $f12 print_double 3 $f12 print_string 4 $a0 read_int 5 $v0 read_float 6 $f0 read_double 7 $f0 read_string 8 $a0,$a1 sbrk 9 $a0 $v0 exit 10 L 14 14/20

System call! Per richiedere un servizio ad una chiamata di sistema () occorre: " Caricare il codice della nel registro $v0 " Caricare gli argomenti nei registri $a0 - $a3 (oppure nei registri $f12 - $f15 nel caso di valori in virgola mobile) " Eseguire " L eventuale valore di ritorno è caricato nel registro $v0 ($f0) L 14 15/20 Uso dei registri: convenzioni Nome Numero Utilizzo $zero 0 costante zero $at 1 riservato per l assemblatore $v0-$v1 2-3 valori di ritorno di una procedura $a0-$a3 4-7 argomenti di una procedura $t0-$t7 8-15 registri temporanei (non salvati) $s0-$s7 16-23 registri salvati $t8-$t9 24-25 registri temporanei (non salvati) $k0-$k1 26-27 gestione delle eccezioni $gp 28 puntatore alla global area (dati) $sp 29 stack pointer $s8 30 registro salvato (fp) $ra 31 indirizzo di ritorno Registri general purpose Registri usati per le operazioni floating point Nome $f0-$f3 $f4-$f11 $f12-$f15 $f16-$f19 $f20-$f31 Utilizzo valori di ritorno di una procedura registri temporanei (non salvati) argomenti di una procedura registri temporanei (non salvati) registri salvati L 14 16/20

Esempio! Calcolo somma dei quadrati da 1 a N:! Codice C: int main(int argc, char* argv[]) { int i,n,t = 0; for (i=0;i<n;i++) t += i*i; return(0); } L 14 17/20 Esempio: codice Assembly # Programma che somma i quadrati dei primi N numeri # N e' memorizzato in t1.data.align 2 str:.asciiz "La somma da 0 a N vale ".text.globl main main: li $t1, 2 # N interi di cui calcolare la somma quadrati li $t6, 0 # t6 e' indice di ciclo indice di ciclo li $t8, 0 # t8 contiene la somma dei quadrati Loop: mul $t7, $t6 $t6 # t7 = t6 x t6 addu $t8, $t8, $t7 # t8 = t8 + t7 addi $t6, $t6, 1 ble $t6, $t1, Loop # if t6 < N stay in loop la $a0, str li $v0, 4 # print li $v0, 1 # print add $a0, $t8, $zero li $v0, 10 # $v0 codice della exit # esce dal programma L 14 18/20

Esempio # Programma che stampa: la risposta è 5 #.data str:.asciiz la risposta è.text.globl main Main: li $v0, 4 la $a0, str li $v0, 1 li $a0, 5 li $v0, 10 # $v0! codice della print_string # $a0! indirizzo della stringa # stampa della stringa # $v0! codice della print_integer # $a0! intero da stampare # stampa dell intero # $v0! codice della exit # esce dal programma L 14 19/20 Esempio # Programma che stampa Dammi un intero: # e che legge un intero.data prompt:.asciiz Dammi un intero:.text.globl main main: li $v0, 4 # $v0! codice della print_string la $a0, prompt # $a0! indirizzo della stringa # stampa la stringa li $v0, 5 # $v0! codice della read_int # legge un intero e lo carica in $v0 li $v0, 10 # $v0! codice della exit # esce dal programma L 14 20/20