Estratto del documento

Calcolatori elettronici

Architettura set di istruzioni

Un tema comune nella descrizioni del software e dell’hardware è il fatto che man mano che si

scava in profondità nelle specifiche si trovano sempre maggiori informazioni e, viceversa,

dettagli di livello inferiori sono nascosti al fine di offrire un modello più semplice ai livelli

superiori. L’uso di tali livelli, o astrazioni, è la principale tecnica utilizzata nel progetto di sistemi

di calcolo estremamente sofisticati. Uno dei livelli di astrazione più importanti corrisponde

all’interfaccia tra hardware e software di più basso livello, a cui viene associato il nome di:

Architettura Del Set Di Istruzioni. Include tutto ciò che i programmatori devono conoscere per

creare un programma in linguaggio macchina correttamente funzionante e quindi: le istruzioni, i

dispositivi I/O, ecc…Questa interfaccia standard permette ai progettisti di parlare di funzioni

indipendentemente dall’hardware.

Istruzioni nel linguaggio dei calcolatori

Qualsiasi calcolatore deve conoscere le operazioni aritmetiche. La notazione del linguaggio

MIPS è:

add a, b, c # a = b + c

Questa notazione è rigida, ovvero, ogni istruzione aritmetica MIPS esegue una sola operazione

e contiene esattamente tre variabili. Il numero di operandi più naturale per un’operazione come

Calcolatori elettronici 1

la somma è pari a tre: i 2 numeri da sommare ed il riferimento alla locazione in cui memorizzare

il risultato. Il fatto di richiedere che tutte le istruzioni abbiano esattamente tre operandi è

conforme alla filosofia di mantenere l’hardware semplice; ciò ricade nel primo principio per la

progettazione hardware:

Semplicità e regolarità sono strettamente collegate.

A differenza di altri linguaggi, le variabili utilizzate in MIPS sono registri. Nell’architettura MIPS i

registri occupano 32 bit, gruppi da 32 bit formano una word. I registri all’interno di un

calcolatore con questa architettura sono 32. La ragione per la limitazione ai 32 registri è

conforme al secondo principio:

Minori sono le dimensioni, maggiore è la velocità.

Un numero elevato di registri comporterebbe una durata maggiore del ciclo di clock a causa

dell’elettronica montata sui calcolatori. Questo però non è sempre vero; difatti 31 registri

potrebbero non essere meglio di 32; per questo i progettisti devono cercare dei compromessi

tra possibilità di avere più registri a discapito della velocità del ciclo di clock.

Le strutture dati vengono allocate in memoria, per questo esistono istruzioni di trasferimento

dati che permettono di passare dati da registro a memoria o viceversa.

lw $t0, offset($t1) # carica in t0 il contenuto della cella corrisponde

nte a # indirizzo puntato da $t1 + offs

et(in byte)

VINCOLO DI ALLINEAMENTO

Dal momento che i byte (8 bit) sono usati in molti programmi, la maggior parte delle

architetture indirizza il singolo byte, quindi l’indirizzo di una word corrisponde all’indirizzo

di uno dei 4 byte che la compongono. L’indirizzo di word consecutive differisce quindi di 4

byte. In MIPS le parole iniziano sempre a multipli di 4, questo requisito si chiama “vincolo di

allineamento”. I calcolatori con indirizzamento relativo al singolo byte si dividono tra quelli

che utilizzano il byte più a destra e quelli che utilizzano il byte più a sinistra. Il MIPS fa parte

della prima categoria detta anche big-end.

L’indirizzamento a byte influisce anche gli indici dei vettori: per ottenere l’indirizzo corretto

in byte se si vuole accedere all’indice 2 di un vettore sarà: 4 * 2 = 8.

lw $t0, 8($t1)

L’istruzione per salvare in memoria è chiamata store e funziona dualmente alla load world.

SPILLING

Calcolatori elettronici 2

Molti programmi contengono più variabili dei registri a disposizione; di conseguenza il

compilatore cerca di mantenere nei registri le variabili usate più frequentemente e pone le

restanti in memoria, utilizzando istruzioni di trasferimento dati per spostare le variabili fra

registri e memoria. Il processo di allocare in memoriale variabili usate meno

frequentemente o usate in fasi successive si chiama “spilling” dei registri.

Campi delle istruzioni

A ciascuno dei campi delle istruzioni MIPS viene associato un nome:

NOMI CAMPI

OP: indica il codice operativo.

RS: primo registro sorgente.

RT: secondo registro sorgente.

RD: registro destinazione.

SHAMT: shift amount per istruzioni logiche.

FUNCT: variante op.

R-type:

OP (6bit) RS (5bit) RT (5bit) RD (5bit) SHAMT (5bit) FUNCT (5bit)

Può nascere un problema quando un’istruzione necessita di campi di dimensioni maggiori

rispetto a quelle sopra indicate. Le istruzioni di trasferimento dati devono specificare due

registri e una costante; se la costante dovesse essere messa in un campo a 5 bit avrebbe come

dimensione massima . Spesso però deve assumere valori maggiori, quindi si sfrutta un altro

5

2

principio della progettazione per adattare questo tipo di istruzioni:

Un buon progetto richiede buoni compromessi.

Il compromesso scelto è quello di predisporre un altro formato per questo tipo di istruzioni:

I-type:

OP (6bit) RS (5bit) RT (5bit) ADDRESS (16bit)

Il campo ADDRESS consente di avere uno spostamento con range byte, o word

15 13

±2 ±2

rispetto all’indirizzo di base RS.

Istruzioni per prendere decisioni

Calcolatori elettronici 3

Sono presenti istruzioni di salto condizionato, e sono rappresentate con:

beq $t0, $t1, L1 # salta all'etichetta L1 se t0 = t1

bne $t0, $t1, L1 # salta all'etichetta L1 se t0 != t1

I test per verificare l’uguaglianza o la diseguaglianza fra due variabili sono gestiti da una

istruzione che confronta due registri e pone un terzo registro pari a 1 se il primo è minore del

secondo, 0 se è maggiore.

slt $t0, $t1, $t2

Il costrutto Switch si basa sulla creazione di una tabella contenente gli indirizzi di salto ed è

creato in due modi:

#Programma che prova il funzionamento

#del costrutto case switch.

#1^ soluzione per costruire la tabella

#degli indirizzi di salto con le

#istruzioni, quindi in fase di esecuzione

.data 0x10010000

tab_ind: .space 8 # allocazione spazio per 2 word

.text 0x400000

c0: nop

nop

j c0

c1: nop

nop

j c1

.text 0x400100

la $t0, tab_ind # carico indirizzo area dati per la tabella degli i

ndirizzi

Calcolatori elettronici 4

la $t1, c0 # carico l'indirizzo di c0 in t1

sw $t1, ($t0) # carico nella prima riga della tabella degli indiriz

zi l'indirizzo di c0

la $t2, c1 # come sopra per c1

sw $t2, 4($t0)

.text 0x400200

li $s0, 1 # carico il numero del case a cui voglio accedere

sll $s0, $s0, 2 # moliplico per 4 il numero per il vincolo di allin

eamento

add $t0, $t0, $s0 # sommo all'indirizzo della tabella degli indiriz

zi il numero così da ottenere

la posizione del case a cui voglio accedere

lw $s1, ($t0) # carico il case in un registro

jr $s1 # accedo al case tramite salto al registro

#Programma che prova il funzionamento

#del costrutto case switch.

#2^ soluzione per costruire la tabella

#degli indirizzi di salto con la

#direttiva .word.

#Inoltre usa la direttiva .globl per

#impostare in automatico in SPIM il PC

#e facilitare l'inserimento dei break point

.data 0x10010000

tab_ind: .word c0, c1 # scrittura tabella indirizzi dall' indirizzo

Calcolatori elettronici 5

0x10010000

.text 0x400000

# definizioni globl per permettere a tutto il programma di vedere i

case .globl __start

.globl c0

.globl c1

c0: nop

nop

j c0

c1: nop

nop

j c1

.text 0x400100

__start:

la $t0, tab_ind # carico indirizzo area dati per la tabella degli i

ndirizzi

li $s0, 1 # carico il numero del case a cui voglio accedere

sll $s0, $s0, 2 # moliplico per 4 il numero per il vincolo di allin

eamento

add $t0, $t0, $s0 # sommo all'indirizzo della tabella degli indiriz

zi il numero così da ottenere

la posizione del case a cui voglio accedere

lw $s1, ($t0) # carico il case in un registro

jr $s1 # accedo al case tramite salto al registro

Il formato utilizzato da queste istruzioni è I-type.

Calcolatori elettronici 6

Gestione delle procedure

Una procedura è uno strumento che i programmatori usano per strutturare i programmi per

renderli più leggibili e per riutilizzare il codice. MIPS alloca i seguenti registri per le procedure:

$a0, …, $a3: passaggio parametri.

$v0, $v1: restituzione risultati.

$ra: ritorno al chiamante.

Viene introdotta una nuova istruzione per le procedure:

jal indirizzoProcedura

Jal alla sua chiamata, salva in $ra l’indirizzo di ritorno identificato dal valore: PC+4.

Supponendo che si necessitino più registri in una procedura di quanti ne siano rimasti, si

ricorre all’utilizzo dello stack per riversare e ripristinare i registri una volta terminato il loro

utilizzo nella procedura. Lo stack

Anteprima
Vedrai una selezione di 6 pagine su 22
Appunti Calcolatori elettronici Pag. 1 Appunti Calcolatori elettronici Pag. 2
Anteprima di 6 pagg. su 22.
Scarica il documento per vederlo tutto.
Appunti Calcolatori elettronici Pag. 6
Anteprima di 6 pagg. su 22.
Scarica il documento per vederlo tutto.
Appunti Calcolatori elettronici Pag. 11
Anteprima di 6 pagg. su 22.
Scarica il documento per vederlo tutto.
Appunti Calcolatori elettronici Pag. 16
Anteprima di 6 pagg. su 22.
Scarica il documento per vederlo tutto.
Appunti Calcolatori elettronici Pag. 21
1 su 22
D/illustrazione/soddisfatti o rimborsati
Acquista con carta o PayPal
Scarica i documenti tutte le volte che vuoi
Dettagli
SSD
Ingegneria industriale e dell'informazione ING-INF/01 Elettronica

I contenuti di questa pagina costituiscono rielaborazioni personali del Publisher giggys di informazioni apprese con la frequenza delle lezioni di Calcolatori elettronici e studio autonomo di eventuali libri di riferimento in preparazione dell'esame finale o della tesi. Non devono intendersi come materiale ufficiale dell'università Università degli Studi di Pavia o del prof Danese Giovanni.
Appunti correlati Invia appunti e guadagna

Domande e risposte

Hai bisogno di aiuto?
Chiedi alla community