Calcolatori Elettronici



Documenti analoghi
Architettura di tipo registro-registro (load/store)

Sommario Introduzione al linguaggio Assembly. Calcolatori Elettronici Prof. Gian Luca Marcialis. Le operazioni fondamentali

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

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

Calcolatori Elettronici A a.a. 2008/2009

CALCOLATORI ELETTRONICI 29 giugno 2011

CPU. Maurizio Palesi

L unità di controllo. Il processore: unità di controllo. Le macchine a stati finiti. Struttura della macchina a stati finiti

Il linguaggio del calcolatore: linguaggio macchina e linguaggio assembly

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

Linguaggio Assembler MIPS

Lezione 1: L architettura LC-3 Laboratorio di Elementi di Architettura e Sistemi Operativi 10 Marzo 2014

Linguaggio macchina. Architettura degli Elaboratori e delle Reti. Il linguaggio macchina. Lezione 16. Proff. A. Borghese, F.

Architettura (10/9/2003) Pag. 1/6. Cognome e Nome (in stampatello):

Calcolatori Elettronici

Architettura degli Elaboratori

ARCHITETTURE MICROPROGRAMMATE. 1. Necessità di un architettura microprogrammata 1. Cos è un architettura microprogrammata? 4

CALCOLATORI ELETTRONICI 15 aprile 2014

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

La macchina programmata Instruction Set Architecture (1)

CALCOLATORI ELETTRONICI A cura di Luca Orrù. Lezione n.6. Unità di controllo microprogrammata

Il linguaggio macchina

Hazard sul controllo. Sommario

Architettura della CPU e linguaggio assembly Corso di Abilità Informatiche Laurea in Fisica. prof. ing. Corrado Santoro

L architettura del calcolatore (Prima parte)

CALCOLATORI ELETTRONICI 29 giugno 2010

Architettura degli Elaboratori

Fetch Decode Execute Program Counter controllare esegue prossima

MIPS Instruction Set 2

Architettura hardware

Istruzioni di trasferimento dati

Testi di Esercizi e Quesiti 1

Architettura del calcolatore

Corso di Calcolatori Elettronici I A.A Il processore Lezione 18

La microarchitettura. Didattica della strumentazione digitale e sistemi a microprocessore anno accademico pagina 1

CALCOLATORI ELETTRONICI 31 marzo 2015

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

Il linguaggio macchina

Un circuito integrato è una piastrina di silicio (o chip), quadrata o rettangolare, sulla cui superficie vengono realizzati e collegati

Il Processore: i registri

CALCOLATORI ELETTRONICI A cura di Luca Orrù. Lezione n.7. Il moltiplicatore binario e il ciclo di base di una CPU

Calcolatori Elettronici

AXO Architettura dei Calcolatori e Sistema Operativo. processo di assemblaggio

Architettura del Set di Istruzioni (ISA)

Capitolo Quarto...2 Le direttive di assemblaggio di ASM Premessa Program Location Counter e direttiva ORG

Università degli Studi di Cassino

Esercitazione sulle CPU pipeline

Architettura dei calcolatori e sistemi operativi. Assemblatore e Collegatore (Linker) Capitolo 2 P&H Appendice 2 P&H

slt $t1,$t2,$t3 if ($t2<$t3) $t1=1; Confronto tra registri slti $t1,$t2,100 if ($t2<100)$t1=1; Cfr. registro-costante

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

Von Neumann. John Von Neumann ( )

Autilia Vitiello Dip. di Informatica ed Applicazioni Stecca 7, 2 piano, stanza 12

Calcolatori Elettronici A a.a. 2008/2009

Introduzione. Indice. Linguaggio macchina. Linguaggio assembler

Ing. Paolo Domenici PREFAZIONE

Manualino minimale MIPS

Calcolatori Elettronici. La Pipeline Criticità sui dati Criticità sul controllo Cenni sull unità di controllo

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

Linguaggio Assembler MIPS

Elementi di Informatica e Programmazione. # Memoria di massa. Problema: comprare un PC. Architettura del calcolatore. Architettura di Von Neumann

Istruzioni e linguaggio macchina

Calcolo numerico e programmazione Architettura dei calcolatori

Rappresentazione dei numeri in un calcolatore

MODELLO DLX IN UNISIM

Aritmetica dei Calcolatori 2

Linguaggio del calcolatore. Algebra di Boole AND, OR, NOT. Notazione. And e or. Circuiti e reti combinatorie. Appendice A + dispense

Il processore. Il processore. Il processore. Il processore. Architettura dell elaboratore

4 3 4 = 4 x x x 10 0 aaa

Architettura hw. La memoria e la cpu

Architettura MIPS (RISC) Architetture dei Calcolatori (Lettere. Principi di Progettazione ISA MIPS MIPS R3000 ISA. Il Set di Istruzioni MIPS

Il linguaggio del calcolatore: linguaggio macchina e linguaggio assembly

Lezione 18 Il Set di Istruzioni (4)

Calcolatori Elettronici A a.a. 2008/2009

Istruzioni assembler Istruzione N Registri

La struttura delle istruzioni elementari: il linguaggio Macchina. Sommario

L Assembler Istruzioni Aritmetiche. M. Rebaudengo - M. Sonza Reorda. Politecnico di Torino Dip. di Automatica e Informatica

Architettura di un calcolatore: introduzione

Lezione n.9. Introduzione al linguaggio macchina

COS È UN LINGUAGGIO? LINGUAGGI DI ALTO LIVELLO LA NOZIONE DI LINGUAGGIO LINGUAGGIO & PROGRAMMA

Linguaggio macchina e register file

Richiami sull architettura del processore MIPS a 32 bit

Parte II Indice. Operazioni aritmetiche tra valori rappresentati in binario puro. Rappresentazione di numeri con segno

Codici a barre. Marco Dell Oro. January 4, 2014

Lezione n.19 Processori RISC e CISC

Tutorato Architettura degli elaboratori

Sistema operativo: Gestione della memoria

PROVA INTRACORSO TRACCIA A Pagina 1 di 6

Informazioni varie. Lezione 18 Il Set di Istruzioni (5) Dove siamo nel corso. Un quadro della situazione

4. Operazioni aritmetiche con i numeri binari

AXO Achitettura dei Calcolatori e Sistema Operativo. Instruction Set Architecture (ISA) e 68000

Lezione 20. della CPU MIPS. Prof. Federico Pedersini Dipartimento di Informatica Università degli Studi di Milano

Istruzioni di controllo del flusso

Corso di Informatica Generale (C. L. Economia e Commercio) Ing. Valerio Lacagnina Rappresentazione in virgola mobile

Richiami sull architettura del processore MIPS a 32 bit

Linguaggio macchina: utilizzo di costanti, metodi di indirizzamento

Corso di Informatica Applicata. Lezione 3. Università degli studi di Cassino

Memorie ROM (Read Only Memory)

Esempio di moltiplicazione come somma e spostamento

Informatica B a.a 2005/06 (Meccanici 4 squadra) PhD. Ing. Michele Folgheraiter

Transcript:

Calcolatori Elettronici ISA di riferimento: MIPS Massimiliano Giacomin 1

DOVE CI TROVIAMO Livello funzionale Livello logico Livello circuitale Livello del layout istruzioni macchina, ISA Reti logiche: registri, ALU, MUX Porte logiche: NOT, AND, Transistor REQUISITI Organizzazione di componenti per implementare ISA Modelli logici: si parla di variabili, valori binari! Modelli elettronici: si parla di tensioni, correnti, ecc. Modelli fisici: si parla di dimensioni fisiche, materiali, ecc. 2

LIVELLI INTERESSATI NELLA LEZIONE LIVELLO APPLICAZIONI LIVELLO LING. ASSEMBLY LIVELLO SIST. OP. LIVELLO FUNZ.LE (RTL) LIVELLO DELLA LOGICA LIVELLO DEI CIRCUITI LIVELLO DEL LAYOUT Programmi applicativi Programmi assembly Programmi assembly Application Binary Interface (ABI) Application Binary Interface (ABI) ISA Instruction Set Architecture (ISA) Componenti: registri, ALU, bus, memorie, Strutture: registri, ALU, bus, memorie, Componenti: porte logiche, flip-flop, Strutture: porte logiche, flip-flop, Componenti: transistor, resistenze, capacità Strutture: transistor, resistenze, capacità Componenti: materiali (Si, AsGa, ) 3

Architettura MIPS Architettura sviluppata da John Hennessy nel 1981 Usata da NEC, Nintendo, Silicon Graphics, Sony Caratteristica fondamentale: semplicità ed eleganza Il processore MIPS è a 32 bit: - tutti i registri sono a 32 bit - gli indirizzi per accedere in memoria sono a 32 bit Il numero di registri visibili al programmatore è 32 (identificati da un numero 0-31: servono 5 bit) 4

I registri del MIPS visibili al programmatore Nome Codifica $zero 0 $at 1 $v0-$v1 2-3 $a0-$a3 4-7 $t0-$t7 8-15 $s0-$s7 16-23 $t8-$t9 24-25 $k0-$k1 26-27 $gp 28 $sp 29 $fp 30 $ra 31 vale sempre 0 utilizzato dalla jal NB: ad eccezione di $zero e $ra, i nomi riflettono pure convenzioni sull utilizzo Tutti i registri possono essere usati indifferentemente come operandi 5

Tipologie di istruzioni Istruzioni aritmetiche e logiche Istruzioni di trasferimento: - lw - sw Istruzioni di controllo: - salti condizionati - salti incondizionati (includono la chiamata a una procedura e l istruzione di ritorno) 6

Istruzioni aritmetiche e logiche DUE VARIANTI A) 3 operandi registro add $s0, $t1, $t2 # $s0 = $t1 + $t2 B) 2 operandi registro e 1 immediato addi $s0, $t1, -4 # $s0 = $t1 + (-4) NB: necessaria estensione di segno a 32 bit della costante 7

Specchio riassuntivo Tutte le istruzioni hanno 3 operandi: - un operando destinazione - due operandi sorgente Gli operandi possono essere: - tutti registri (es: istruzione add) - un operando sorgente costante a 16 bit + due registri: istruzione indicata con suffisso i (es: istruzione addi) In assembly, l operando destinazione appare come primo operando NB: Alcune istruzioni aritmetiche hanno anche la versione senza segno ( unsigned ) 8

Istruzioni aritmetiche add rd, rs, rt # rd = rs + rt addi rt, rs, const # rt = rs + const sub rd, rs, rt # rd = rs - rt NB: subi non presente (non serve!) 9

Esercizio Effettuare $s1 + $s2 $s3 + $s4 e porre il risultato in $s0 10

Esercizio Effettuare $s1 + $s2 $s3 + $s4 e porre il risultato in $s0 add $s0, $s1, $s2 # $s0 = $s1 + $s2 sub $s0, $s0, $s3 # $s0 = $s1 + $s2 $s3 add $s0, $s0, $s4 # $s0 = $s1 + $s2 $s3 + $s4 11

Istruzioni logiche And bit a bit and rd, rs, rt # rd = rs & rt NB: utile per applicare andi rt, rs, const # rt = rs & const una maschera Or bit a bit or rd, rs, rt # rd = rs rt NB: utile per porre a 1 ori rt, rs, const # rt = rs const determinati bit Nor bit a bit nor rd, rs, rt # rd = ~(rs rt) NB: NOT si ottiene con (NB: nori non disponibile, utilizzo raro) nor rd, rt, rt nor rd, rt, $zero NB: per le istruzioni immediate, la costante viene estesa aggiungendo degli zeri (non estendendo il segno) 12

Istruzioni di shift Shift left logical sll rd, rt, const # rd = rt<<const NB: inseriti zeri a destra, utile per moltiplicare per 2 const Shift right logical srl rd, rt, const # rd = rt>>const NB: inseriti zeri a sinistra, utile per dividere numeri positivi per 2 const Shift right arithmetic sra rd, rt, const # rd = rt>>const NB: inserite a sinistra copie del bit di segno, utile per dividere numeri positivi e negativi per 2 const (in realtà numeri negativi dispari divisi e arrotondati per difetto) 13

Istruzioni di trasferimento dati load word (lw) Permette di trasferire una parola di memoria (32 bit, 4 byte) in un registro Sintassi: lw rt, const(rs) # rt = M[rs+const] rs e rt sono due registri const è una costante a 16 bit specificata dall istruzione store word (sw) Permette di trasferire il valore di un registro in una parola di memoria Sintassi: sw rt, const(rs) # M[rs+const] = rt rs e rt sono due registri const è una costante specificata dall istruzione 14

Esercizio con array di interi (allocato in memoria) Indirizzo base del vettore A contenuto in un registro base A+4*i A+4 A h 11110000 00000000 ES: l indirizzo di h sia $s2 e il registro base del vettore A sia $s3 Traduzione di A[12] = h + A[8] 15

Esercizio con array di interi (allocato in memoria) Indirizzo base del vettore A contenuto in un registro base A+4*i A+4 A h 11110000 00000000 ES: l indirizzo di h sia $s2 e il registro base del vettore A sia $s3 Traduzione di A[12] = h + A[8] lw $t0, 32($s3) # carica in $t0 il valore A[8] lw $t1, 0($s2) # carica in $t1 il valore di h add $t0, $t1, $t0 # somma h + A[8] sw $t0, 48($s3) # memorizza la somma in A[12] 16

Istruzioni di controllo: salti incondizionati (j, jr e jal) j L1 Vai incondizionatamente all istruzione etichettata con L1 (j = jump) jr rs Vai incondizionatamente all istruzione di indirizzo contenuto nel registro rs (jr = jump register) jal L1 Vai incondizionatamente all istruzione etichettata con L1 e salva l indirizzo dell istruzione successiva in $ra - cfr. procedure (jal = jump and link) 17

Chiamata di una procedura jal Procedura $ra add $s0, $s1, $s2 Procedura: add $t0, $t1, $t2 jr $ra CHIAMANTE CHIAMATO 18

e ritorno jal Procedura add $s0, $s1, $s2 Procedura: add $t0, $t1, $t2 jr $ra CHIAMANTE CHIAMATO 19

Chiamata di una procedura Istruzione jal (jump-and-link): è l istruzione apposita per le procedure, che salta a un indirizzo e contemporaneamente salva l indirizzo di ritorno nel registro $ra jal IndirizzoProcedura In pratica jal salva il valore di PC+4 nel registro $ra, che contiene l indirizzo della prossima istruzione: questo crea un collegamento all indirizzo di ritorno dalla procedura L indirizzo di ritorno è necessario perché la stessa procedura può essere richiamata in più parti del programma Ritorno da una procedura chiamata L istruzione per effettuare il salto di ritorno è jr $ra In questo modo il chiamato restituisce il controllo al chiamante 20

Istruzioni di controllo: salti condizionati (beq, bne) beq rs, rt, L1 Vai all istruzione etichettata con L1 se il valore contenuto nel registro rs è uguale al valore contenuto nel registro rt (beq = branch if equal) bne rs, rt, L1 Vai all istruzione etichettata con L1 se il valore contenuto nel registro rs è diverso dal valore contenuto nel registro rt (bne = branch if not equal) 21

Esercizio: if-else Frammento di codice C: if (i = = j) f = g + h; else f = g - h ; Supponendo che f, g, h, i, j siano mantenute nei registri $s0, $s1, $s2, $s3, $s4, scrivere la versione assembly 22

Esercizio: if-else Frammento di codice C: if (i = = j) f = g + h; else f = g - h ; Supponendo che f, g, h, i, j siano mantenute nei registri $s0, $s1, $s2, $s3, $s4, la versione assembly è: bne $s3, $s4, Else add $s0, $s1, $s2 j Esci Else: sub $s0, $s1, $s2 Esci: 23

Versione alternativa equivalente Frammento di codice C: if (i = = j) f = g + h; else f = g - h ; Supponendo che f, g, h, i, j siano mantenute nei registri $s0, $s1, $s2, $s3, $s4, la traduzione è la seguente beq $s3, $s4, If sub $s0, $s1, $s2 j Esci If: add $s0, $s1, $s2 Esci: 24

Istruzioni di controllo: l istruzione set on less than (slt) Oltre a testare uguaglianza o diseguaglianza, talvolta è necessario effettuare un confronto di maggioranza e beq, bne non bastano! E prevista un altra istruzione per confrontare due variabili: slt slt rd, rs, rt poni a 1 il valore del registro rd se il valore del registro rs è minore del valore del registro rt, altrimenti rd è posto a 1 (slt = set on less than) Esiste anche la versione immediate: slti rt, rs, immediate Esempio (salta a Minore se $s0<$s1): slt $t0, $s0, $s1 # $t0 diventa 1 se $s0 < $s1 bne $t0, $zero, Minore # vai a Minore se $t0 0 25

Esercizio: ciclo for Frammento di programma C: for (i=0; i<k; i++) f = f + A[i]; siano i, k, f mantenute nei registri $s1, $s2, $s3, supponendo che l indirizzo base di A in $s4. Scrivere la versione assembly 26

Esercizio: ciclo for Frammento di programma C: for (i=0; i<k; i++) f = f + A[i]; siano i, k, f mantenute nei registri $s1, $s2, $s3, supponendo che l indirizzo base di A in $s4. La versione assembly è: add $s1, $zero, $zero #i=0 Ciclo: slt $t0, $s1, $s2 # poni $t0 a 1 se i < k beq $t0, $zero, Esci # se $t0 = 0 vai a Esci sll $t0, $s1, 2 # $t0 = i * 4 add $t0, $t0, $s4 # $t0 = indirizzo di A[i] lw $t0, 0($t0) # $t0 = A[i] add $s3, $s3, $t0 # f = f + A[i] addi $s1, $s1, 1 # i = i + 1 j Ciclo Esci: 27

Caratteristiche dell architettura LOAD-STORE Istruzioni load-store: le uniche che accedono alla memoria Istruzioni aritmetiche: - operandi registro e/o immediato (no accessi in memoria) - consentono di rappresentare due sorgenti e una destinazione (usare i registri è più efficiente rispetto alla memoria; spilling dei compilatori) REGISTRI GENERAL PURPOSE Registri general-purpose (le istruzioni lavorano indifferentemente su tutti i registri) - fa eccezione $zero, che si può usare ma rimane comunque al valore nullo - $ra impostato con indirizzo di ritorno dall istruzione jal (ma può essere usato normalmente dalle istruzioni) 28

RISC Evitare la proliferazione delle istruzioni (sono possibili compromessi). P.es. - subi non presente (si può usare addi) - NOT non presente (si può usare NOR + registro $zero) - NORI non presente (poco utilizzato, si può comunque usare or e not con nor ) Per le istruzioni di controllo, abbiamo visto che: - si sono mantenute al minimo le istruzioni di salto condizionato (beq e bne) - per effettuare salti basati su confronto, è necessario decomporre il salto in più istruzioni, utilizzando slt > Questo non pesa nelle architetture che utilizzano il parallelismo > Permette però una semplificazione che porta in generale a maggiore efficienza ad es. ad una diminuzione di T clock 29

Linguaggio macchina: i formati delle istruzioni del MIPS Istruzioni a lunghezza costante: 32 bit (una parola di memoria, un registro) Suddivisione in diversi campi per definire il formato delle istruzioni rispettando il principio della regolarità Da quanto visto, le istruzioni esaminate si possono suddividere in 3 categorie: istruzioni che devono indicare 3 registri (add, sub, and, slt, ecc.) istruzioni che devono indicare due registri e una costante, in particolare: - lw e sw - istruzioni che riferiscono un operando immediato (addi, andi, ori, ecc.) - salti condizionati (due registri per il confronto + costante per il salto) istruzioni di salto incondizionato, che non riferiscono alcun registro ma (presumibilmente) indicano una costante con molti bit Le tre categorie danno luogo a tre (semplici) formati, con cui si riescono a rappresentare tutte le istruzioni! 30

I 3 formati delle istruzioni MIPS op rs rt rd shamt funct 6 bit 5 bit 5 bit 5 bit 5 bit 6 bit TIPO-R op rs rt 6 bit 5 bit 5 bit const o address 16 bit TIPO-I 31 26 25 0 Op address 6 bit 26 bit TIPO-J 31

Perché i due campi sorgente nel TIPO-R precedono il campo destinazione? Si aumenta la similarità con il Formato-I, garantendo che i registri sorgente (se presenti) siano sempre rappresentati negli stessi campi Perché si utilizza un formato che divide il codice operativo in due campi? Le istruzioni che hanno lo stesso codice operativo sono molto simili: p.es. per add, sub, and, or, slt l implementazione può prevedere - prelievo dei due operandi rs e rt - operazione ALU determinata dal campo funct - memorizzazione risultato in rd l unità di controllo fa la stessa cosa se funct è in ingresso alla ALU In questo modo si riesce a rendere il Formato-R quanto più simile ai due successivi 32

Formato-R (register) [per istruzioni aritmetiche e logiche] ES. add rd, rs, rt op rs rt rd shamt funct 6 bit 5 bit 5 bit 5 bit 5 bit 6 bit op: codice operativo rs: primo operando sorgente (registro) rt: secondo operando sorgente (registro) rd: registro destinazione shamt: shift amount (per operazioni di scalamento) funct: seleziona una variante specifica dell operazione base definita nel campo op Per esempio: campo funct per le istruzioni add, sub, and, or, slt op = 0 ADD: 100 000 SUB: 100 010 AND: 100 100 OR: 100 101 SLT: 101 010 33

Esempi op rs rt rd shamt funct 6 bit 5 bit 5 bit 5 bit 5 bit 6 bit add $t0, $s1, $s2 0 17 18 8 0 32 sll $t2, $s0, 4 0 0 16 10 4 0 NON USATO 34

Formato-I (immediate) op rs rt const address 6 bit 5 bit 5 bit 16 bit Istruzioni con due operandi registro e una costante. P.es. le istruzioni lw e sw riferiscono: due registri (rs e rt) una costante da sommare a rt per calcolare l indirizzo 35

Codifica delle istruzioni immediate ES. addi rt, rs, const op rs rt const 6 bit 5 bit 5 bit 16 bit rs: registro sorgente rt: registro destinazione const: costante da sommare a 16 bit Esempio addi $t0, $t1, 400 8 9 8 400 36

Indirizzamento immediato L operando è una costante Usato dalle versioni immediate delle istruzioni aritmetiche (ad es. addi) che usano due operandi registro (sorgente e destinazione) e un operando immediato La costante è contenuta nel immediate nel formato-i Essendo un intero a 16 bit, ha valori da 2 15 a +(2 15-1) o, interpretato come unsigned, da 0 a 2 16-1 37

Codifica delle istruzioni di trasferimento lw rt, const(rs) sw rt, const(rs) op rs rt const rs: registro base al cui contenuto va sommato const rt: primo registro che compare nell istruzione (registro destinazione per lw e registro sorgente per sw) const: costante da sommare a 16 bit (-2 15 +2 15-1) Esempi 6 bit 5 bit 5 bit 16 bit lw $t0, 400($t1) 35 9 8 400 sw $t0, 400($t1) 43 9 8 400 38

Indirizzamento tramite base o spiazzamento L operando è in memoria. P.es. lw $t1, 32($t0) - $t0 contiene un indirizzo base - 32 è uno spiazzamento da sommare al contenuto di $t0 NB: lo spiazzamento è espresso come intero con segno a 16 bit, quindi può valere da 2 15 a +(2 15-1) 39

Codifica delle istruzioni di salto condizionato Anche per le istruzioni beq e bne si usa il Formato-I bne $s0, $s1, Esci # vai Esci se $s0 è diverso da $s1 5 16 17 Esci 6 bit 5 bit 5 bit 16 bit (dove 16 e 17 sono i numeri dei registri $s0 e $s1) PROBLEMA: come viene codificata l etichetta? Abbiamo a disposizione 16 bit 40

Indirizzamento a byte e vincolo di allineamento delle istruzioni Il MIPS indirizza il singolo byte 11 11100000 Una parola di memoria = 4 byte Gli indirizzi delle parole sono multipli di 4 (vincolo di allineamento) Ogni istruzione occupa una parola di memoria (4 byte) Gli indirizzi delle istruzioni sono multipli di 4, ovvero hanno gli ultimi due bit a 0 10 9 8 7 6 5 4 3 2 1 11111111 10100011 01010101 11110000 00000000 00101010 11111111 11000000 00101000 11100000 Parola Parola Parola 0 10010001 41

Indirizzamento relativo al Program-Counter (PC-relative) Se si codificasse direttamente l indirizzo con 16 bit nessun programma potrebbe avere dimensioni maggiori di 2 16 idea: specificare un registro da sommare all indirizzo di salto, cioè: Program counter = Registro + Indirizzo di salto Ma quale Registro di partenza usare? - Considerando che normalmente i salti condizionati vengono usati nei cicli e nei costrutti if, i salti sono in genere ad istruzioni vicine usare PC, che ha l indirizzo dell istruzione [successiva a quella] corrente Per sfruttare i 16 bit a disposizione, si può considerare l indirizzo in istruzioni a partire da PC si può saltare fino a una distanza di ±2 15-1 istruzioni (basta moltiplicare per 4 la costante, ovvero concatenarla con 00 ) rispetto all istruzione [successiva a quella] corrente L indirizzamento PC-relative è usato nelle istruzioni di salto condizionato, mentre le istruzioni jump e jump-and-link (chiamata di procedure) utilizzano un altro modo di indirizzamento 42

Esempio di indirizzamento PC-relative Supponiamo che alla locazione 80016 vi sia l istruzione bne $s0, $s1, Esci 80016 5 80020 80052 16 17 8 L indirizzo PC-relative si riferisce al numero di parole che lo separano dalla destinazione, considerando che il PC contiene già l indirizzo dell istruzione successiva (viene infatti incrementato nella fase preliminare dell esecuzione dell istruzione corrente) Quindi l offset è (52-20) / 4 = 8: l istruzione bne somma 8x4=32 byte all indirizzo dell istruzione successiva (80020) 43

Similarità tra i formati op rs rt rd shamt funct 6 bit 5 bit 5 bit 5 bit 5 bit 6 bit op rs rt const address 6 bit 5 bit 5 bit 16 bit Il codice op è nella stessa posizione Il campo per i registri rs e rt è lo stesso: p.es. nel caso un istruzione debba usare il valore di due registri, questi registri sono sempre indicati nei campi rs e rt! 44

Formato-J (jump) [per istruzioni di salto incondizionato j e jal] Queste istruzioni non specificano alcun registro I salti della jump e jal non sono in genere locali : abbiamo bisogno di un formato che permetta di specificare una costante con più di 16 bit! 31 26 25 0 Op address Indirizzamento pseudo-diretto (per i salti incondizionati): j 10000 # vai alla locazione 10000 (espresso come indirizzo di parola) op indirizzo 2 10000 6 bit 26 bit I 26 bit all interno dell istruzione jump contengono un indirizzo in parole, questi 26 bit vengono concatenati con i 4 bit più significativi del PC L indirizzo in byte si ottiene poi moltiplicando per 4 (ovvero, concatenando altri due bit 00) per ottenere un indirizzo a 32 bit 45

Indirizzamento pseudo-diretto (per i salti incondizionati): schema 0010 :00 BLOCCO 2 4 bit PC 0001 0000 BLOCCO 1 Op address 0 BLOCCO 0 46

Schema riassuntivo: i 5 modi di indirizzamento del MIPS (rs) 47

1. Indirizzamento immediato: l operando è una costante specificata in un campo (16 bit) dell istruzione 2. Indirizzamento tramite registro: l operando è un registro specificato in un campo (5 bit) all interno dell istruzione 3. Indirizzamento tramite base o tramite spiazzamento: l operando è in una locazione di memoria individuata dalla somma del contenuto di un registro e di una costante specificata nell istruzione (16 bit) 4. Indirizzamento relativo al program counter (PC-relative addressing): l indirizzo è la somma del contenuto del PC e della costante contenuta nell istruzione (16 bit) moltiplicata per 4 (esprime uno scostamento in parole) 5. Indirizzamento pseudo-diretto: l indirizzo è ottenuto concatenando i 26 bit dell istruzione con i 4 bit più significativi del PC a sinistra e con i bit 00 a destra 48