La programmazione dei calcolatori. L insieme delle istruzioni. Vantaggi e svantaggi dell assembler. Benefici dei linguaggi ad alto livello

Documenti analoghi
L insieme delle istruzioni

Corso di Architettura (Prof. Scarano) 09/04/2002

Assembly. Linguaggio di programmazione corrispondente al linguaggio macchina P.H. Cap. 2.1, 2.2 e App. A. Linguaggio assembly (App.

Linguaggio Assembly e linguaggio macchina

Richiami sull architettura del processore MIPS a 32 bit

Il linguaggio assembly

Linguaggio Assembly e linguaggio macchina

Richiami sull architettura del processore MIPS a 32 bit

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

Calcolatori Elettronici

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

Un altro tipo di indirizzamento. L insieme delle istruzioni (3) Istruz. di somma e scelta con operando (2) Istruzioni di somma e scelta con operando

Architettura degli Elaboratori

Laboratorio di Architettura degli Elaboratori

Linguaggio assembler e linguaggio macchina (caso di studio: processore MIPS)

ISA (Instruction Set Architecture) della CPU MIPS

L insieme delle istruzioni (6)

Linguaggi, compilatori e interpreti

DAGLI ALGORITMI AI LINGUAGGI. Linguaggi di Programmazione

Il linguaggio del calcolatore: linguaggio macchina e linguaggio assembly

Linguaggi di Programmazione

Calcolatori Elettronici A a.a. 2008/2009

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

Progettazione dell unità di elaborazioni dati e prestazioni. Il processore: unità di elaborazione. I passi per progettare un processore

Il linguaggio macchina

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

Linguaggi di programmazione

Università degli Studi di Cassino

Il Linguaggio Assembly: Gestione della memoria e controllo

Linguaggi di alto livello, compilatori e interpreti

Lecture 2: Prime Istruzioni

Corso di Calcolatori Elettronici MIPS: Istruzioni di confronto Istruzioni di controllo Formato delle istruzioni in L.M.

Il processore: unità di elaborazione

Macchina di Riferimento: argomenti

Calcolatori Elettronici Parte VIII: linguaggi assemblativi

INFORMATICA. L informatica comprende:

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

Traduzione e interpretazione

Il calcolatore. È un sistema complesso costituito da un numero elevato di componenti. è strutturato in forma gerarchica

La programmazione dei calcolatori. Architetture dei Calcolatori (Lettere. Benefici dei linguaggi ad alto livello. Vantaggi e svantaggi dell assembler

Architettura dei calcolatori e sistemi operativi. Il processore Capitolo 4 P&H

21 March : ESERCITAZIONE 01 GESTIONE DELLA MEMORIA VETTORI CONTROLLOO O DI FLUSSO DI UN PROGRAMMA. I. Frosio

Architettura hardware

Istruzioni macchina. Dove sono gli operandi? Ciclo della CPU. Elementi di un istruzione macchina. Rappresentazione delle istruzioni

Istruzioni assembler Istruzione N Registri

Linguaggi di programmazione. Parte VII. Traduzione e collegamento. Interpretazione. Traduzione

Algoritmi, Strutture Dati e Programmi. UD 1.d: Dati e Tipi di Dato

LINGUAGGI DI ALTO LIVELLO

Il processore: unità di controllo

Dal sorgente all eseguibile I programmi Assembly. Prof. Alberto Borghese Dipartimento di Scienze dell Informazione

MIPS & SPIM. Modulo del Corso di Architettura degli Elaboratori. Nicola Paoletti. Università di Camerino Scuola di Scienze e Tecnologie

Il Software programmabili programma algoritmo

Il linguaggio macchina

Linguaggi, Traduttori e le Basi della Programmazione

Linguaggi e moduli. Dott. Franco Liberati

; programma MOV AX, DATO_1. ; somma al contenuto dell' accumulatore il contenuto del registro B

Appunti del corso di Informatica 1 (IN110 Fondamenti) 5 Rappresentazione delle informazioni

Linguaggi di Programmazione

Riassunto. Riassunto. Ciclo fetch&execute. Concetto di programma memorizzato. Istruzioni aritmetiche add, sub, mult, div

Architettura degli Elaboratori Lez. 8 CPU MIPS a 1 colpo di clock. Prof. Andrea Sterbini

Capitolo 5 Elementi architetturali di base

Il processore. Istituzionii di Informatica -- Rossano Gaeta

AXO - Architettura dei Calcolatori e Sistema Operativo. organizzazione strutturata dei calcolatori

Architettura dei calcolatori. Architettura dei calcolatori. Cos'è un computer?

SOLUZIONI DELLA PROVA SCRITTA DEL CORSO DI. NUOVO E VECCHIO ORDINAMENTO DIDATTICO 28 Settembre 2006

Architettura hardware

Esercitazione 1 Codifica e Rappresentazione dell Informazione Istruzioni Assembly MIPS

Laboratorio di Calcolo Linguaggi di programmazione

Architettura di un calcolatore e linguaggio macchina. Primo modulo Tecniche della programmazione

Concetti di Base sulla Programmazione. Prof.Ing.S.Cavalieri

Processore. Memoria I/O. Control (Parte di controllo) Datapath (Parte operativa)

Lezione4: MIPS e Istruzioni (1 Parte)

Lezione 16. Il Software di base

Lezione 15. L elaboratore Elettronico

Introduzione. Indice. Linguaggio macchina. Linguaggio assembler

Architettura dei calcolatori

Primi passi col linguaggio C

C++ Barriera di astrazione. Barriera di astrazione. Basic. Basic. Lisp. Lisp. Pascal. Prolog. Pascal. Prolog. Cobol. Fortran IMPERATIVI FUNZIONALI

I Linguaggi di Programmazione

Architettura di tipo registro-registro (load/store)

Università degli Studi di Cassino

Le procedure. L insieme delle istruzioni (4) Prima della chiamata di una procedura. Le procedure (2) Architetture dei Calcolatori (lettere A-I)

Linguaggio macchina. 3 tipi di istruzioni macchina. Istruzioni per trasferimento dati. Istruzioni logico/aritmetiche

Arithmetic and Logic Unit e moltiplicatore

Elaborazione dell informazione

Algoritmo. La programmazione. Algoritmo. Programmare. Procedimento di risoluzione di un problema

Laboratorio di Architettura lezione 5. Massimo Marchiori W3C/MIT/UNIVE

Somma di numeri binari

Università degli Studi di Roma La Sapienza

Macchine Astratte. Nicola Fanizzi Dipartimento di Informatica Università degli Studi di Bari. Linguaggi di Programmazione feb, 2016

Analogico vs. Digitale. LEZIONE II La codifica binaria. Analogico vs digitale. Analogico. Digitale

I formati delle istruzioni

Cos è un algoritmo. Si dice algoritmo la descrizione di un metodo di soluzione di un problema che sia

Calcolo numerico e programmazione Rappresentazione dei numeri

Programma del corso. Introduzione Rappresentazione delle Informazioni Calcolo proposizionale Architettura del calcolatore Reti di calcolatori

Linguaggi di programmazione

Valutazione delle prestazioni

Valutazione delle prestazioni. Valutazione delle prestazioni. Tempo di risposta e throughput. Prestazioni e tempo di esecuzione

LINGUAGGI DI ALTO LIVELLO. Si basano su una macchina virtuale le cui mosse non sono quelle della macchina hardware

Transcript:

La programmazione dei calcolatori L insieme delle istruzioni Architetture dei Calcolatori (lettere A-I) Linguaggio macchina (codifica con numeri binari) Linguaggio direttamente comprensibile dal calcolatore Attività di programmazione lunga e noiosa Facile commettere errori Linguaggio assembler (o assembly) Rappresentazione simbolica del linguaggio macchina Più comprensibile del linguaggio macchina (simboli anziché sequenze di bit) Tradotto dall assemblatore in linguaggio macchina Dalla forma simbolica dell istruzione macchina al corrispondente formato binario Linguaggi ad alto livello Tradotti dal compilatore in assembler Valeria Cardellini 1 Benefici dei linguaggi ad alto livello Notazione vicina al linguaggio corrente ed alla notazione algebrica (maggiore espressività e leggibilità) Incremento di produttività Facilitano la programmazione, svincolandola dalla conoscenza dei dettagli architetturali della macchina utilizzata Indipendenza dalle caratteristiche peculiari dell architettura (processore) su cui il programma va eseguito (portabilità) Ideati non per essere compresi direttamente da macchine reali, ma da macchine astratte, in grado di effettuare operazioni più di alto livello rispetto alle operazioni elementari dei processori reali Permettono l uso di librerie di funzionalità già scritte (riusabilità del codice) Valeria Cardellini 2 Vantaggi e svantaggi dell assembler Vantaggio: la dipendenza dall architettura del calcolatore permette Ottimizzazione delle prestazioni (maggiore efficienza) Programmi (potenzialmente) più compatti Massimo sfruttamento delle potenzialità dell hardware sottostante Importante per Programmare controller di processi e macchinari (anche real-time) Programmazione di apparati limitati (embedded computer, dispositivi portatili, telefonini cellulari, ) Principali svantaggi della programmazione Strutture di controllo in forme limitate (minore espressività) Necessario conoscere i dettagli dell architettura Mancanza di portabilità su architetture diverse Difficoltà di comprensione, possibile lunghezza maggiore, facilità di errore rispetto a programmi scritti in linguaggio ad alto livello (minore produttività del programmatore) Valeria Cardellini 3

Compilazione Nella prima fase, il programma ad alto livello viene tradotto nel linguaggio assembler utilizzando un apposito programma detto compilatore Dopo la fase di compilazione, il programma scritto il linguaggio assembler viene tradotto in linguaggio macchina utilizzando un apposito programma detto assemblatore (assembler) Spesso con il termine compilazione si indica l intero processo di traduzione da linguaggio ad alto livello a linguaggio macchina (essendo l assemblatore spesso integrato con il compilatore) Il processo di compilazione Programma sorgente compilatore hello.c Programma in linguaggio assembler hello.s assemblatore Programma in linguaggio macchina (codice oggetto) caricatore hello.out Il programma sorgente è scritto in un linguaggio ad alto livello (ad es., C) Il codice oggetto, scritto in linguaggio macchina, viene memorizzato su disco Il caricatore (loader) carica il programma in memoria principale per l esecuzione Programma in memoria Valeria Cardellini 4 Valeria Cardellini 5 Il linker Il linker (link editor o collegatore) ha il compito di collegare tra loro vari moduli che compongono lo stesso programma Programma sorgente suddiviso in più file che vengono compilati separatamente creando diversi file oggetto Utilizzo di funzioni di libreria Il processo di compilazione (2) Programma sorgente compilatore Programma in linguaggio assembler Il linker collega tra loro i file contenenti il codice oggetto dei vari moduli che costituiscono il programma, unendovi anche il codice delle funzioni di libreria utilizzate, producendo un file contenente il codice eseguibile, memorizzato su disco assemblatore Oggetto: modulo in linguaggio macchina linker Oggetto: libreria di funzioni caricatore Valeria Cardellini 6 Eseguibile: programma in linguaggio macchina Programma in memoria Valeria Cardellini 7

Alcuni principi progettuali Le istruzioni sono codificate in forma binaria I programmi vengono immagazzinati in memoria insieme ai dati Concetto di programma memorizzato In memoria istruzioni e operandi, che devono essere entrambi trasferiti dalla memoria al processore Le istruzioni non sono di per sé distinguibili rispetto agli altri tipi di informazione in memoria Solo l interpretazione da parte del processore stabilisce se una data configurazione di bit è da considerarsi come un dato o un istruzione Storicamente Architettura introdotta nel 1946 da Von Neumann Opposta alla architettura Hardware, in cui lo spazio di memoria è separato per dati e programmi (impiegata in calcolatori destinati a specifici campi applicativi, ad es. elaborazione dei segnali) Valeria Cardellini 8 I principi della progettazione L obiettivo è avere un set di istruzioni che Faciliti la costruzione della macchina Semplicità per il progettista Faciliti la costruzione dei compilatori Ottimizzi i costi di produzione Permetta prestazioni elevate Competitività sul mercato Principio della semplicità della realizzazione: semplice significa economico (semplicità = regolarità) affidabile di facile apprendimento ed uso (per i programmatori) di facile traduzione (per i compilatori) Valeria Cardellini 9 Architettura MIPS Sviluppata e progettata a Stanford (USA) Progettata nei primi anni 80 Prodotta e sviluppata da MIPS Technologies negli anni 90 (http://www.mips.com) Tecnologia attualmente utilizzata da Sony (Playstation, Playstation 2, AIBO) Nintendo 64 Router CISCO Stampanti, macchine fotografiche digitali, palmtop Set-top box, DVD TV al plasma Rappresenta un buon modello architetturale per la didattica, perché è un architettura semplice da comprendere Valeria Cardellini 10 Operazioni aritmetiche Le informazioni sono codificate in dati I dati sono rappresentati da numeri Esempio Per effettuare a=b+c e a=b-c add a, b, c sub a, b, c Ogni istruzioni aritmetica in MIPS esegue solo una operazione e deve avere sempre 3 operandi Principio progettuale: la semplicità favorisce la regolarità Il prezzo della semplicità Per effettuare f = (g+h)-(i+j) add t0, g, h add t1, i, j sub f, t0, t1 # calcolo t0=g+h # calcolo t1=i+j # calcolo f=t0-t1 NB: gli operandi non sono ancora quelli reali Commento su ogni linea preceduto da # Valeria Cardellini 11

Gli operandi A differenza dei linguaggi ad alto livello, gli operandi devono provenire da speciali locazioni di memoria all interno del processore, dette registri Nei linguaggi ad alto livello non ci si preoccupa di dover portare i dati dalla memoria ai registri e dai registri alla memoria E compito del compilatore inserire le istruzioni necessarie Caratteristiche dei registri Elevata velocità di accesso In numero limitato Altro principio progettuale: piccolo = veloce Usando i registri Si riduce il traffico con la memoria L esecuzione del programma è più veloce Migliora la densità del codice I registri Il livello ISA dell architettura MIPS richiede che Gli operandi delle istruzioni provengano dai registri Architettura di tipo load-store (o registro-registro) Il processore possiede un numero limitato di registri Il processore MIPS possiede 32 registri di tipo general-purpose (GPR), ciascuno dei quali è composto da 32 bit (parola) Il processore MIPS possiede ulteriori 32 registri da 32 bit per le operazioni in virgola mobile (floating point), detti FPR Per convenzione, per denotare i registri si usano nomi simbolici preceduti da $ Convenzione MIPS per rappresentare i registri: $s0, $s1, per i registri che contengono variabili $t0, $t1, per i registri di uso temporaneo I registri possono anche essere indicati direttamente mediante il loro numero (0,, 31) preceduto da $ (quindi $0,, $31) Valeria Cardellini 12 Valeria Cardellini 13 Il ruolo del compilatore Consideriamo il seguente segmento di programma C che utilizza 5 variabili f = (g+h)-(i+j) Il compilatore associa alle variabili presenti nel programma i registri presenti nel processore Ad esempio, alle variabili f, g, h, i e j sono associati i registri $s0, $s1, $s2, $s3 e $s4 Il compilatore introduce due variabili temporanee (t0 e t1) che associa a due registri temporanei $t0 e $t1 add $t0, $s1, $s2 add $t1, $s3, $s4 sub $s0, $t0, $t1 # g+h # i+j # f = (g+h)-(i+j) Le operazioni e gli operandi Le istruzioni MIPS consentono operazioni di tipo diverso classificabili nelle quattro categorie Istruzioni aritmetiche-logiche (es., somma, moltiplicazione, AND) Istruzioni di trasferimento da/verso memoria Istruzioni per il controllo del flusso del programma Istruzioni di supporto alle procedure Gli operandi Accesso ai registri del processore Accesso alla memoria Necessarie due modalità di trasferimento tra memoria e registri del processore Load (caricamento) o read (lettura) Store (memorizzazione) o write (scrittura) Uso di costanti Valeria Cardellini 14 Valeria Cardellini 15

Istruzioni aritmetiche-logiche In MIPS un istruzione aritmetico-logica possiede tre operandi: i due registri contenenti i valori da elaborare (registri sorgente) ed il registro contenente il risultato (registro destinazione) L ordine degli operandi è fisso: prima il registro contenente il risultato dell operazione e poi i due operandi Esempio: istruzione add Serve per sommare il contenuto di due registri sorgente rs e rt e porre in rd la somma del contenuto di rs e rt add rd, rs, rt Esempio: istruzione sub Serve per sottrarre il contenuto di due registri sorgente rs e rt e porre in rd la differenza del contenuto di rs e rt sub rd, rs, rt Valeria Cardellini 16. 12 8 4 0 Indirizzamento della memoria nel MIPS. Memoria $0 $1 $31. Processore Memoria come un array monodimensionale, le cui locazioni sono indicizzate tramite indirizzi Dimensione della parola pari a 32 bit (4 byte) L indirizzamento di una parola è legato a 4 byte (vincolo dell allineamento) Quindi gli indirizzi delle parole differiscono di 4 Memoria formata da 2 30 parole Per motivi di efficienza, è possibile l indirizzamento a livello dei singoli byte che compongono una parola Valeria Cardellini 17 Ordinamento dei byte L accesso è generalmente con indirizzamento del byte L indirizzo di una parola corrisponde all indirizzo di uno dei byte all interno della parola Esistono due convenzioni per ordinare i byte all interno di una parola (endianess) Big Endian: il byte il cui indirizzo è x 00 è nella posizione più significativa della parola (big end) Little Endian: il byte il cui indirizzo è x 00 è nella posizione meno significativa della parola (little end) Esempio: parola di 32 bit Little Endian 3 7 2 6 1 5 0 4 Indirizzo Byte Byte Word Word Intel 80x06 è Little Endian, MIPS può essere sia Big Endian sia Little Endian in dipendenza del valore logico su di un pin Big Endian Valeria Cardellini 18 0 4 0 4 1 5 2 6 3 7 Allineamento dei byte e terminologia L allineamento richiede che la parola inizi ad un indirizzo multiplo della sua dimensione Allineato 0 1 2 3 In MIPS, allineamento della parola ad un indirizzo multiplo di 4 (equivale a indirizzo mod 4 = 0) Half word (16 bit) allineata ai multipli di 2 Non allineato La mancanza di allineamento causa un incremento della complessità dell hardware ed un numero maggiore di accessi in memoria Terminologia delle sequenze di bit di particolare lunghezza 4 bit: nibble 8 bit: byte 16 bit: half-word 32 bit: word 64 bit: double-word Valeria Cardellini 19

Istruzione di trasferimento dati MIPS fornisce due istruzioni di base per il trasferimento di dati tra registri del processore e memoria lw (load word): per trasferire una parola di memoria in un registro del processore sw (store word): per trasferire il contenuto di un registro del processore in una parola di memoria Le istruzioni lw e sw richiedono come argomento l indirizzo della locazione di memoria sulla quale devono operare Valeria Cardellini 20 Istruzioni load e store L istruzione di load trasferisce una copia dei dati contenuti in una specifica locazione di memoria ai registri del processore, lasciando inalterata la parola di memoria Il processore invia l indirizzo della locazione desiderata alla memoria e richiede un operazione di lettura del suo contenuto La memoria effettua la lettura dei dati memorizzati all indirizzo specificato e li invia al processore L istruzione di store trasferisce il contenuto di un registro del processore in una specifica locazione di memoria, sovrascrivendo il contenuto precedente di quella locazione Il processore invia l indirizzo della locazione desiderata alla memoria insieme ai dati che vi devono essere scritti, e richiede un operazione di scrittura La memoria effettua la scrittura dei dati all indirizzo specificato Valeria Cardellini 21 Istruzione lw In MIPS, l istruzione lw ha tre argomenti Il registro destinazione in cui caricare la parola letta dalla memoria Una costante o spiazzamento (offset) Un registro base (base register) che contiene il valore dell indirizzo base (base address) da sommare all offset Indirizzamento registro base (o con spiazzamento) L indirizzo della parola di memoria da caricare nel registro è ottenuto sommando il contenuto del registro base alla costante Esempio lw $s1, 100($s2) # $s1 = M[$s2+100] Al registro destinazione $s1 è assegnato il valore contenuto all indirizzo di memoria ($s2+100) Istruzione sw In MIPS, l istruzione sw ha tre argomenti, analogamente all istruzione lw Il registro sorgente, il cui contenuto deve essere scritto in memoria Una costante o spiazzamento (offset) Un registro base (base register) che contiene il valore dell indirizzo base (base address) da sommare all offset Indirizzamento registro base (o con spiazzamento) L indirizzo della parola di memoria da sovrascrivere è ottenuto sommando il contenuto del registro base alla costante Esempio sw $s1, 100($s2) # M[$s2+100] = $s1 Alla locazione di memoria di indirizzo ($s2+100) è assegnato il valore contenuto nel registro sorgente $s1 Valeria Cardellini 22 Valeria Cardellini 23

Istruzioni lw e sw: esempio di compilazione Codice C: A[12] = h+a[8]; Supponiamo che: La variabile h è associata al registro $s2 L indirizzo del primo elemento dell array (base address) è contenuto nel registro $s3 Strutture dati (ad es. array) sono allocate in memoria Codice MIPS: lw $t0, 32($s3) add $t0, $s2, $t0 sw $t0, 48($s3) # $t0=m[$s3+32] # $t0=$s2+$t0 # M[$s3+48]=$t0 Valeria Cardellini 24 Array: esempio Codice C: g = h+a[i]; Supponiamo che: A è un array di 100 word Le variabili g, h e i sono associate rispettivamente ai registri $s1, $s2 e $s4 L indirizzo del primo elemento dell array (base address) è contenuto nel registro $s3 L elemento i-esimo dell array sarà nella locazione di memoria di indirizzo ($s3 + 4*i) i è l indice dell array ad alto livello Il fattore 4 dipende dall indirizzamento della memoria nel MIPS A[0] $s3 A[1] $s3+4 A[2] $s3+8. Valeria Cardellini 25 Array: esempio (2) Codice MIPS: Caricamento dell indirizzo di A[i] nel registro temporaneo $t1 add $t1, $s4, $s4 add $t1, $t1, $t1 add $t1, $t1, $s3 Trasferimento di A[i] nel registro temporaneo $t0 lw $t0, 0($t1) # $t0=a[i] Somma tra h e A[i] e risultato in g add $s1, $s2, $t0 # $t1=2*i # $t1=4*i # $t1=ind di A[i] # g=h+a[i] Register spilling In genere i programmi usano più variabili di quanti sono i registri del processore Il compilatore cerca di mantenere le variabili usate più frequentemente nei registri e le altre variabili in memoria, usando istruzioni di load/store per trasferire le variabili tra registri e memoria Il tempo di accesso ai registri è minore del tempo di accesso alla memoria La tecnica di mettere le variabili meno usate (o usate successivamente) in memoria viene detta register spilling Valeria Cardellini 26 Valeria Cardellini 27

Rappresentazione dei registri Una convenzione per assegnare nomi dei registri e numeri corrispondenti I registri $s0, $s1,, $s7 (detti registri saved) Corrispondono ai registri $16, $17,, $23 I registri $t0, $t1,, $t7 (detti registri temporaries) Corrispondono ai registri $8, $9,, $15 Il registro $zero Corrisponde al registro $0 Contiene sempre il valore 0 Valeria Cardellini 28 Formato istruzioni aritmetiche La rappresentazione binaria di un istruzione assembler è composta da 32 bit (stessa dimensione della parola di memoria) Essa segue il formato di tipo R (istruzione register) per un istruzione logico-aritmetica tra registri Formato istruzioni di tipo R op rs rt rd shamt funct 6 bit 5 bit 5 bit 5 bit 5 bit 6 bit Ai vari campi sono assegnati dei nomi mnemonici op: opcode (codice operativo), indica il tipo di istruzione rs: registro contenente il primo operando sorgente rt: registro contenente il secondo operando sorgente rd: registro destinazione contenente il risultato shamt: shift amount (scorrimento) funct: function, la variante specifica dell operazione indicata nel campo op Valeria Cardellini 29 Istruzioni di tipo R: esempio op rs rt rd shamt funct 6 bit 5 bit 5 bit 5 bit 5 bit 6 bit add $t0, $s1, $s2 non usato 0 17 18 8 0 32 6 bit 5 bit 5 bit 5 bit 5 bit 6 bit 000000 10001 10010 01000 00000 100000 6 bit 5 bit 5 bit 5 bit 5 bit 6 bit Valeria Cardellini 30 Formato istruzioni di tipo I Il formato di tipo R non è adatto a rappresentare istruzioni di tipo load/store All offset sarebbe riservato un campo di 5 bit (al massimo costanti di dimensione pari a 32) Si usa un formato diverso, detto di tipo I (istruzione immediate), sempre di 32 bit Formato istruzioni di tipo I op rs rt address 6 bit 5 bit 5 bit 16 bit Significato dei campi op: opcode, indica il tipo di istruzione rs: registro base rt: registro destinazione (load) o sorgente (store) address: spiazzamento (±2 15 byte o 2 13 parole rispetto all indirizzo indicato dal registro base) Valeria Cardellini 31

Istruzioni di tipo I: esempio op rs rt address 6 bit 5 bit 5 bit 16 bit lw $t0, 1000($s3) 35 19 8 1000 6 bit 5 bit 5 bit 16 bit 100011 10011 01000 0000001111101000 6 bit 5 bit 5 bit 16 bit La memorizzazione del programma: esempio Codice C: A[300] = h+a[300]; Codice MIPS: lw $t0, 1200($t1) add $t0, $s2, $t0 sw $t0, 1200($t1) Assumendo che: $t1 è il registro base $s2 corrisponde a h 35 9 8 1200 0 18 8 8 0 32 43 9 8 1200 Valeria Cardellini 32 Traducendo da decimale a binario si ottiene la rappresentazione binaria del programma Valeria Cardellini 33 Uso alternativo dell indirizzamento con spiazzamento L indirizzamento con spiazzamento prevede l uso di Indirizzo base contenuto nel registro base Spiazzamento specificato nell istruzione tramite una costante Esempio: lw $t0, 16($s0) Se $s0=100, in $t0 viene caricata la parola di memoria di indirizzo 116 In alternativa, si può invertire l uso del registro e della costante Indirizzo base specificato nell istruzione tramite una costante Spiazzamento contenuto nel registro indice (detto in precedenza registro base) Detto indirizzamento indicizzato o indicizzazione Esempio: lw $t0, 100($s0) Se $s0=16, in $t0 viene caricata la parola di memoria di indirizzo 116 I due usi dell indirizzamento con spiazzamento sono equivalenti? Valeria Cardellini 34 Uso alternativo dell indirizzamento con spiazzamento (2) La scelta di porre l indirizzo base nel registro (anziché nella costante) Permette di utilizzare 32 bit per indicare la locazione di inizio Quindi di accedere a tutta la memoria Viceversa, ponendo l indirizzo base nella costante Si possono utilizzare solo 16 bit per indicare la locazione di inizio (vedi formato delle istruzioni di tipo I) La scelta di porre lo spiazzamento nel registro Permette di scorrere l array incrementando l indice Da qui il nome di indirizzamento indicizzato e registro indice Valeria Cardellini 35