Esercitazione 3 Introduzione allo SPIM Pseudo-Istruzioni

Slides:



Advertisements
Presentazioni simili
Linguaggio C e C++.
Advertisements

Introduzione al linguaggio C
MODULO 3 – ELABORAZIONE TESTI
Modulo 1 – Ambiente di lavoro Windows 7
Programmazione assembler
in un programma Assembler
Dalla scrittura all’esecuzione
Organizzazione della memoria
PHP.
GLUT & OpenGL Ing. Tommaso Coviello Politecnico di Bari
Chiamate a Procedure. Per lesecuzione di una procedura, un programma deve eseguire i seguenti sei passi: mettere i parametri in un posto dove la procedura.
SPIM Esercizi. Esercizio 7 – load/store Il codice deve: Inserire in memoria la word 0x a Leggere questo dato e inserirlo in s0 Sommarci 5 Salvare.
Indirizzi delle variabili A ogni variabile sono associati tre concetti fondamentali: il valore memorizzato; il tipo dati di appartenenza; lindirizzo. Il.
Fondamenti di Informatica II Ingegneria Informatica / Automatica (A-I) Meccanica Prof. M.T. PAZIENZA a.a – 3° ciclo.
Funzioni definite dall’utente
Laboratorio di informatica: ASSEMBLER
Università degli Studi di Roma La Sapienza Architettura degli elaboratori II Funzioni.
File.
CALCOLATORI ELETTRONICI Gestione delle subroutine.
Gestione delle subroutine
Struttura dei sistemi operativi (panoramica)
Il Linguaggio Macchina
1 Generazione codice Daniela Briola Lorena Bellino.
memoria gestita staticamente:
Organizzazione della Memoria (Unix) Text contiene le istruzioni in linguaggio macchina del codice eseguibile, può essere condiviso in caso di processi.
Espressioni condizionali
Corso di PHP.
Per costruire unapplicazione occorre compilare il file (o i file se più duno) che contengono il testo del programma (file sorgente) Il risultato sono uno.
Programmazione in Java
Inserire il CDROM CygWin nel lettore, aprite la directory cyg e lanciare in esecuzione (con un doppio click del pulsante sinistro del mouse sulla relativa.
Ll Questionario Introduzione al software SAS (Parte 2) Metodi Quantitativi per Economia, Finanza e Management Esercitazione n°2.
Modulo 1 - Hardware u.d. 3 (syllabus – 1.3.5)
Architettura degli Elaboratori II (canale P-Z) Linguaggi e moduli
PROGRAMMARE IN C Un ambiente di sviluppo `e un software che serve per scrivere ed eseguire programmi. Generalmente integra almeno 3 funzionalita’: Editor:
Introduzione al linguaggio assembly del microprocessore a parte
Introduzione al linguaggio assemby del microprocessore a parte
Simulatore Breve riassunto dei comandi più importanti del simulatore MPLAB.
Architettura degli Elaboratori II (canale P-Z) Istruzioni di controllo Dott. Franco Liberati.
Lo sviluppo del software e i linguaggi di programmazione
INTERFACCIAMENTO ASSEMBLY - C++
Architettura degli Elaboratori II (canale P-Z) Modi di Indirizzamento Dott. Franco Liberati.
BIOINFO3 - Lezione 201 Come in ogni corso di introduzione ad un linguaggio di programmazione, proviamo a scrivere lormai celebre primo programma di prova.
BIOINFO3 - Lezione 331 SUBROUTINE IN PERL Una subroutine (funzione, metodo, procedura o sottoprogramma), e` una prozione di codice all`interno di un programma.
File e Funzioni Si possono distinguere tre tipi di file che vengono utilizzati in MATLAB: M-file: hanno estensione .m e in essi vengono memorizzati i.
1 Università di Pavia - corso di Calcolatori Elettronici PROGETTO DI UN SISTEMA BASATO SU  P PROBLEMA REALE SVILUPPO HARDWARESVILUPPO SOFTWARE INTEGRAZIONE.
Calcolatori Elettronici Assemblatore, Linker e Loader
Elettronica Digitale (II Parte) 10-11_5 1 ELETTRONICA DIGITALE II (5) 6/12 Il processo di assemblaggio.
Introduzione a Javascript
Calcolatori Elettronici Il Processore
Corso di Algoritmi e Strutture Dati APPUNTI SUL LINGUAGGIO C
1 M. Rebaudengo, M. Sonza Reorda Politecnico di Torino Dip. di Automatica e Informatica M. Rebaudengo - M. Sonza Reorda L’Assembler 8086 Istruzioni per.
Fondamenti di Informatica 2 Ingegneria Informatica Docente: Giovanni Macchia a.a
Fondamenti di Informatica II Ingegneria Informatica (A-I) Prof. M.T. PAZIENZA a.a – 3° ciclo.
Programmazione Assembly
Corso di Laurea in Informatica Architettura degli elaboratori a.a La macchina programmata Instruction Set Architecture (2) Istruzioni I-type Indirizzamento.
1 M. Rebaudengo, M. Sonza Reorda Politecnico di Torino Dip. di Automatica e Informatica M. Rebaudengo - M. Sonza Reorda L’Assembler 8086 Istruzioni per.
Architettura di un calcolatore e linguaggio macchina.
L’esecuzione dei programmi
SPIM Esercizi. Esercizio 1 – il comando ‘li’ Il codice deve eseguire una singola operazione: mettere il valore immediato 1023 nel registro s3.
1 Strutture dati. 2 Astrazione Non vogliamo sapere l’organizzazione fisica dei dati  indirizzi e celle di memoria Ci interessa solo la loro organizzazione.
Esercitazione 4 Chiamate di procedure Claudia Raibulet
Esercizi.
1 Laboratorio di Programmazione di Sistema - C Susanna Pelagatti Ricevimento: Me ,
Esempio scriviamo un programma in linguaggio macchina che: trasferisce il contenuto delle 2 parole della RAM di indirizzi 64 e 68 nei registri R 0 ed R.
Corso di Laurea in Informatica Architettura degli elaboratori a.a Programmazione Assembly: procedure (1) Supporto hardware alle procedure Passaggio.
Il Processore Il processore è la componente dell’unità centrale che elabora le informazioni contenute nella memoria principale L’elaborazione avviene eseguedo.
Corso di Laurea in Informatica Architettura degli elaboratori a.a La macchina programmata (3) Istruzioni J-type Istruzioni di salto Istruzioni.
Il C `e un linguaggio di programmazione di uso generale, originariamente sviluppato per la scrittura del sistema operativo Unix, ed oggi disponibile su.
Planet HT – Genova - Elisa Delvai
Corso di Laurea in Informatica Architettura degli elaboratori a.a ISA e Asm: esempi e suggerimenti.
Transcript della presentazione:

Esercitazione 3 Introduzione allo SPIM Pseudo-Istruzioni Claudia Raibulet raibulet@disco.unimib.it

Introduzione a SPIM

SPIM SPIM è un software per simulare programmi scritti per MIPS R2000/R3000 Nome: SPIM è MIPS letto all’incontrario Può leggere ed eseguire file in linguaggio assembler È un sistema autosufficiente per eseguire programmi MIPS Contiene un debugger e fornisce alcuni servizi system like (syscall)

SPIM Versione 6.5 Per Windows: pcspim Per Unix: xspim Editore: notepad o winedit Per Unix: xspim Editore vi, emacs …. Il sorgente generato deve avere l’estensione .s (assembler)

Processo che porta al file ESEGUIBILE

Il linker Il linker svolge tre tipi di compiti: cerca nelle librerie le procedure usate dal programma determina le locazioni di memoria che ciascun modulo occuperà e riloca le istruzioni aggiornando i riferimenti assoluti risolve i riferimenti fra i file

Schema del processore MIPS R2000

Memoria Sistemi basati sul processore MIPS dividono la memoria in tre parti: text segment: inizia all’indirizzo 0x00400000 e contiene le istruzioni del programma data segment: inizia all’indirizzo 0x10000000 e contiene i dati del programma stack segment: inizia all’indirizzo 0x7FFFFFFF

Direttive del MIPS .ascii str - mette in memoria la stringa str e non aggiunge alla fine in carattere NULL .asciiz str - mette in memoria la stringa str terminata dal carattere NULL .data <addr> - gli elementi successivi sono memorizzati nel segmento di dato (a partire dall’indirizzo addr se specificato) .space n - alloca n byte di spazio nel segmento di dato .text <addr> - gli elementi successivi sono memorizzati nel segmento di testo dell’utente (a partire dall’indirizzo addr se sepecificato) .word w1, ..., wn – memorizza gli n valori su 32 bit in parole consecutive della memoria …

Struttura di un programma Area dati: contiene i dati utilizzati dal programma nella memoria fisica si trova a partire dall’indirizzo 0x10000000 nel sorgente assembly viene identificata dalla direttiva “.data” Area codice: contiene il codice assembly (le istruzioni) nella memoria fisica si trova a partire dall’indirizzo 0x00400000 nel sorgente assembly viene identificata dalla direttiva “.text” Un punto di inizio del programma: nel caso si opera senza trap.handler è identificato dalla etichetta “__start” nel caso si operi con il trap.handler è identificato dalla etichetta “main”

Registri MIPS

Chiamate di sistema: SYSCALLs Modellano servizi analoghi a quelli di un sistema operativo – l’istruzione syscall $v0 – contiene il codice della chiamata di sistema $a0 - $a3 – contengono gli argomenti della chiamata di sistema (o $fl2 – valori in virgola mobile) $v0 ($f0) – contiene il risultato della chiamata di sistema

Chiamate di sistema - codici

Esempio chiamate di sistema Si chiede di leggere un numero intero e di scrivere come risposta: “Valore inserito = “ e il numero. .data str: .asciiz “Valore inserito = “ .text li $v0, 5 # codice chimata di sistema per read_int syscall # legge numero add $t0, $v0, $zero # salva numero letto in $t0 la $a0, str # indirizzo della stringa da stampare li $v0, 4 # codice chimata di sistema per print_string syscall # stampa stringa add $a0, $t0, $zero # numero da stampare li $v0, 1 # codice chimata di sistema per print_int syscall # stampa intero

Pseudo-istruzione: move move registroDestinazione, registroSource add $t0, $v0, $zero <=> move $t0, $v0

SPIM – menù File File -> Open legge un sorgente assembly e lo ASSEMBLA per mezzo dell’assembler interno dello SPIM se il sorgente è corretto sintatticamente lo carica in memoria a partire da un certo indirizzo definito dalle convenzioni di uso della memoria

SPIM – menù Simulator Simulator -> Clear Register azzera tutti i registri interni del processore il programma caricato in memoria resta invariato Simulator -> Reinitialize inizializza il simulatore, azzera i registri e la memoria il programma caricato in memoria viene cancellato Simulator -> Reload ricarica da file e assembla l’ultimo programma caricato in precedenza utile dopo correzioni e modifiche o dopo una re-inizializzazione del simulatore Simulator -> Go esegue un programma a partire da un indirizzo specificato (default 0x00400000) Simulator -> Continue/Break sospendo o prosegue l’esecuzione di un programma (utile nei cicli infiniti)

SPIM – menù Simulator Simulator -> Single Step esegue una sola istruzione e si ferma Simulator -> Multiple Steps esegue un certo numero di istruzioni e si ferma Simulator -> Breakpoints imposta una locazione del programma nella quale l’esecuzione si arresta Simulator -> Set Value imposta un registro interno o una locazione di memoria ad un valore Simulator -> Display Symbol Table stampa nella Message Window il valore numerico assunto dalle etichette simboliche utilizzate e dichiarate visibili a livello globale (direttiva .globl) nel programma assembly Simulator -> Settings apre il pannello di impostazioni dello SPIM

SPIM – menù Window Le sue voci permettono di visualizzare le varie viste se aperte in finestre differenti, aprire o cancellare la Console e scegliere se visualizzare la barra con le icone

SPIM – menù Help Aiuto in linea delle funzionalità principali di SPIM

Esercizio 1 Si chiede di impostare il valore del registro $t0 a 3, e il valore del registro $t1 a 2. Si chiede di inserire la rappresentazione esadecimale dell’istruzione add $t2, $t0, $t1 all’indirizzo 0x00400000 dell’area di testo. Si chiede si eseguire l’istruzione e di verificare che nel registro $t2 è memorizzata la somma dei valori contenuti nei registri $t0 e $t1.

Esercizio 2 Esempio di espansione di pseudo-isytruzione “lw” .globl __start # il punto di partenza del programma deve # essere dichiarato globale .data 0x10010004 # dichiarazione di inizio area dati utente loc_dato: # etichetta inizio dato .word 0x12345678 # dato da caricare .text # dichiarazione di inizio area programma # utente __start: # punto di partenza programma utente lw $s0, loc_dato # carica il dato nel registro $s0

Esercizio 3 Esempio di uso delle modalità di indirizzamento MIPS e della differenza tra istruzioni la e lw .globl __start .data par_0: .word 0xAA55AA55 par_1: .word 0x12345678 par_2: .word 0xABCDEF01 .text __start: li $t0, 4 li $s0, 0x10010000 la $t1, 0x1001004 lw $s1, 0x1001004 la $t2, ($s0) lw $s2, ($s0) la $t3, 4($s0) lw $s3, 4($s0) la $t4, par_1 lw $s4, par_1 la $t5, par_0+4 lw $s5, par_0+4 la $t6, par_0+4($t0) lw $s6, par_0+4($t0)

Esercizio 4 la $t0, pippo addi $t0, $t0, 1 move $a0, $t0 li $v0, 4 .globl __start .data pippo: .ascii "topolino" .byte 0 minni: .asciiz "to" buffer: .space 10 eol: .asciiz "\n" .text __start: # stampa la stringa identificata dall'etichetta pippo la $a0, pippo li $v0, 4 syscall # stampa a capo: stampa la stringa dall'etichetta eol la $a0, eol la $t0, pippo addi $t0, $t0, 1 move $a0, $t0 li $v0, 4 syscall # stampa a capo # stampa la stringa dall'etichetta eol la $a0, eol # leggi una stringa li $a1, 10 la $a0, buffer li $v0, 8

Esercizio 5 .globl __start .data #array inputImage di 50 elementi InputImage[i] i=0,49 inputImage: .word 163, 165, 165, 165, 165, 163, 163, 164, 165, 167, .word 154, 157, 155, 153, 151, 146, 146, 151, 156, 159, .word 145, 144, 135, 126, 123, 132, 142, 147, 151, 151, .word 133, 115, 81, 59, 61, 78, 103, 120, 136, 147, .word 128, 91, 44, 18, 22, 46, 74, 94, 120, 148, .text __start: la $t0,inputImage # stampa l'undicesimo elemento dell'array lw $a0,40($t0) li $v0, 1 syscall

Esercizio 6 Si consideri un array di 20 elementi. Si chiede di stampare ogni valore dell’array su una riga partendo dall’ultimo elemento. ciclo: # stampa i-esimo elemento lw $a0, 0($t0) li $v0, 1 syscall # stampa a capo li $v0, 4 la $a0, eol # ricalcola offset addi $t0, $t0, -4 # decrementa di 1 l'indice addi $t1, $t1, -1 # se $t1 e zero, il ciclo e' finito beq $t1, $zero, exit # torna a ciclo: j ciclo exit: .globl __start .data A: .word 1,2,3,4,5,6,7,8,9,10, .word 11,12,13,14,15,16,17,18,19,20 # stringa eol - a capo eol: .asciiz "\n" .text __start: # in $t0 l'indirizzo dell'array A la $t0, A # inizializzare l'offset addi $t0, $t0, 76 # inizializzare l'indice dell'array li $t1, 20 # indice di controllo