Anteprima
Vedrai una selezione di 4 pagine su 11
Livello ISA Pag. 1 Livello ISA Pag. 2
Anteprima di 4 pagg. su 11.
Scarica il documento per vederlo tutto.
Livello ISA Pag. 6
Anteprima di 4 pagg. su 11.
Scarica il documento per vederlo tutto.
Livello ISA Pag. 11
1 su 11
D/illustrazione/soddisfatti o rimborsati
Disdici quando
vuoi
Acquista con carta
o PayPal
Scarica i documenti
tutte le volte che vuoi
Estratto del documento

Istruzioni

La caratteristica principale del livello ISA è il suo insieme di istruzioni: «cosa» la macchina è in grado di fare.

• Le istruzioni più comuni includono:

▪ STORE e LOAD per il trasferimento dati dai registri alla memoria e viceversa

▪ MOVE per la copia di dati tra registri

▪ Istruzioni aritmetiche

▪ Istruzioni booleane

▪ Istruzioni di confronto

▪ Istruzioni di salto condizionato

Formato delle istruzioni

Un’istruzione consiste di:

• Un codice operativo (opcode)

• Alcuno, uno, o più operandi riferibili tramite indirizzi

Su alcune macchine le istruzioni hanno tutte la stessa lunghezza:

• Decodifica più semplice

• Spreco di spazio: tutte le istruzioni devono essere lunghe quanto la più lunga

Alcune possibili relazioni fra la lunghezza di una istruzione e la lunghezza della parola:

Criteri progettuali

La scelta dei formati di istruzione deve tenere conto di alcuni criteri:

• Preferire istruzioni corte a quelle lunghe (a fronte di un aumento delle prestazioni dei processori non è

corrisposto un aumento dell’ampiezza di banda della memoria → collo di bottiglia)

• Prevedere spazio sufficiente a esprimere tutte le operazioni volute (la storia è piena di fallimenti di progetti

folli in cui non sono stati previsti abbastanza codici operativi in eccedenza per fronteggiare aggiunte

successive)

Codice operativo espandibile )

• Si consideri un’istruzione lunga ( + bit, composta da un opcode di k bit e da un solo indirizzo di n bit:

▪ 2 operazioni diverse

▪ 2 celle di memoria indirizzabili

Si potrebbe spezzare gli stessi indirizzi (k+n) in (k-1) bit di opcode e (n+1) bit di indirizzo: si dimezza il numero di

istruzioni ma si raddoppia la dimensione della memoria raggiungibile.

Si può quindi prevedere un codice operativo espandibile, in cui il numero di bit per l’opcode e per gli indirizzi può

variare.

Esempio: si consideri una macchina in cui le istruzioni sono a 16 bit e gli indirizzi a 4 bit.

Codice operativo espandibile che consente di avere:

• 15 istruzioni con 3 indirizzi

• 14 istruzioni con 2 indirizzi

• 31 istruzioni con 1 indirizzo

• 16 istruzioni senza indirizzo

La capacità di usare opcode di dimensione variabile può essere sfruttata in due modi:

• Assegnando gli opcode più corti alle istruzioni che hanno bisogno di più bit

• Scegliendo opcode più corti per le istruzioni comuni e lasciando più bit alle istruzioni di uso più raro

Indirizzamento

L’indirizzamento si riferisce alla modalità con cui sono specificate le posizioni degli operandi.

Esistono diverse modalità di indirizzamento:

• Immediato

• Diretto

• A registro

• A registro indiretto

• Indicizzato

• Indicizzato esteso

• A stack

Indirizzamento immediato

È il metodo più semplice: l’istruzione contiene già, nel campo riservato all’indirizzo dell’operando, l’operando stesso.

Tale modalità si dice immediata perché l’operando viene immediatamente utilizzato nel momento stesso in cui

avviene la fetch dell’istruzione; in altre parole, è già pronto per l’uso.

Svantaggi:

• Un solo operando per volta

• L’entità del valore è limitata alla dimensione del campo: spesso si utilizza per piccole costanti intere

Indirizzamento diretto

Consiste nel fornire l’indirizzo completo dell’operando.

Svantaggi:

• L’istruzione accederà sempre alla stessa locazione di memoria:

o Per questo motivo viene spesso usato per accedere a variabili globali il cui indirizzo è noto in fase di

compilazione

Indirizzamento a registro

E’ analogo all’indirizzamento diretto, ma viene specificato un registro piuttosto che un indirizzo di memoria.

• È la modalità di indirizzamento più diffusa poiché i registri sono veloci in accesso e hanno indirizzi brevi

• Molti compilatori cercano di prevedere quali variabili saranno richiamate più spesso per destinarle ai registri

Indirizzamento a registro indiretto

Questa modalità di indirizzamento è ibrida rispetto alle precedenti:

• L’operando è contenuto in un indirizzo di memoria (indirizzamento diretto)

• Tale indirizzo è contenuto in un registro (indirizzamento a registro)

Un indirizzo utilizzato in questa maniera prende il nome di puntatore.

Vantaggi:

• è possibile referenziare la memoria senza dover incorporare un intero indirizzo nell’istruzione

• è possibile usare diverse parole di memoria in occasione di esecuzioni diverse della stessa istruzione

Indirizzamento indicizzato

Questa modalità referenzia un indirizzo di memoria che si ottiene specificando un registro più uno spiazzamento

(offset) costante.

L’istruzione 4 effettua la fetch di A con modalità indicizzata: il registro R2 è sommato all’indirizzo A e la somma è

i

usata come riferimento in memoria.

Indirizzamento indicizzato esteso

L’indirizzo di memoria è calcolato sommando il contenuto di due registri più uno spiazzamento.

• Un registro funge da base

• L’altro da indice MOV R4, (R2 + R5)

Notazione polacca inversa

Tradizionalmente, si è soliti indicare l’operatore in mezzo agli operandi cui si applica, come in + (notazione

infissa)

La notazione polacca inversa prevede di applicare l’operatore ai due operandi che lo precedono, come in +.

Vantaggi:

▪ Qualunque formula può essere espressa senza parentesi

▪ La valutazione delle formule beneficia dell’uso dello stack.

Algoritmo per la valutazione

1. Scandisci l’operazione da sinistra verso destra

2. Se leggi un operando, impilalo nella pila degli operandi

3. Se leggi un operatore, rimuovi i due operandi in cima alla pila, applica l’operatore, e impila il risultato

dell’operazione nella pila degli operandi

4. Al termine della scansione, l’elemento in cima alla pila conterrà il risultato finale

Indirizzamento a Stack

Ortogonalità e quasi-ortogonalità •

Le istruzioni, in linguaggio macchina, sono caratterizzate dai seguenti tre insiemi finiti:

▪ è l’insieme dei codici operativi

▪ è l’insieme di tutti i registri

▪ è l’insieme di tutti i possibili modi di indirizzamento ammessi

Il prodotto cartesiano di tali insiemi × × è uno spazio tridimensionale finito e discreto, i cui punti individuano

una specifica potenziale istruzione eseguibile da un processore.

Un processore è definito:

▪ Ortogonale se il formato delle sue istruzioni è in grado di codificare tutti i punti del sotto-spazio → maggiore

flessibilità (architetture RISC più recenti)

▪ Quasi-ortogonale altrimenti.

Da wikipedia: Una caratteristica importante dell'insieme (set) delle istruzioni di una CPU è la sua ortogonalità: vale a dire, il fatto che ogni

istruzione che usi i registri possa usarli tutti indifferentemente (tranne quelli "speciali" come l'IP) e che nessun registro sia in qualche modo

privilegiato rispetto agli altri perché su di esso si possono compiere operazioni particolari: è stato dimostrato che un set di istruzioni ortogonali, a

parità di tempo di esecuzione delle istruzioni e di numero dei registri, è più efficiente di uno non ortogonale.

Modalità di indirizzamento a confronto

Una macchina dovrebbe offrire ogni scelta possibile, oppure una sola: ogni via di mezzo costringe il compilatore a

fare scelte per cui potrebbe non essere abbastanza preparato.

Tipi di istruzioni

Anche se possono differire nei dettagli, alcune istruzioni del livello ISA sono rintracciabili in tutte le macchine.

Oltre a queste, ciascuna macchina dispone di poche istruzioni insolite (ad esempio per retrocompatibilità).

Istruzioni principali:

▪Trasferimento dati

▪ Operazioni binarie

▪ Unarie

▪ Confronti e salti condizionati

▪ Invocazioni di procedura

▪ Input/output

Trasferimento dati

In informatica, il trasferimento indica la copia di un dato in una nuova posizione, mentre il dato originale si trova

indisturbato in una locazione di memoria.

Ci sono due ragioni fondamentali per copiare dati da una locazione di memoria a un’altra:

▪ Assegnamento di valori a variabili A = B (A <- B)

▪ Preparare i dati a diversi tipi di accesso LOAD, STORE, MOVE

Operazioni binarie

Sono le operazioni che producono un risultato dalla combinazione di due operandi

▪ Operazioni booleane

▪ Operazioni aritmetiche

L’AND è spesso usato per estrarre bit da una parola.

Tale estrazione avviene applicando l’AND fra la parola e una costante detta maschera.

Operazioni unarie

Prendono in input un operando e restituiscono un risultato

Sono esempi di operazioni unarie lo scorrimento (shift) e la rotazione del contenuto di una parola

Le operazioni di scorrimento possono spostare i bit verso destra o verso sinistra, e i bit che «fuoriescono» vengono

perduti

▪ Sono usate per semplificare operazioni aritmetiche (es.: se un intero positivo viene fatto scorrere di k bit verso

sinistra, allora il risultato è l’intero moltiplicato per 2 )

k

Le rotazioni sono scorrimenti in cui i bit che escono da un’estremità riappaiono all’altra estremità

▪ Sono usate per esaminare parole bit per bit (ripristinandole al termine)

Confronti e salti condizionati

Quasi tutti i programmi hanno bisogno della capacità di esaminare il contenuto dei dati e alterare il flusso di

esecuzione delle istruzioni in base al risultato del confronto

Un metodo comune consiste nell’uso dell’istruzione di salto condizionato che:

▪ Verifica una certa condizione

▪ Salta a un particolare indirizzo di memoria se la condizione è soddisfatta

Un salto non-condizionato trasferisce il controllo a un punto qualunque del programma senza aver prima valutato

una condizione.

Pro:

▪ Estrema flessibilità (qualunque algoritmo può essere scritto usando solo sequenza e goto!)

▪ Estrema potenza

Contro:

▪ Scarsa leggibilità del programma

▪ Alti costi di manutenzione

Invocazioni di procedura

Una procedura è un insieme di istruzioni che svolge un certo compito e può essere invocato in diversi punti del

programma

▪ In C prende il nome di funzione (anche se non è propriamente una funzione nel senso matematico)

▪ In Java prende il nome di metodo

Quando una p

Dettagli
Publisher
A.A. 2021-2022
11 pagine
SSD Scienze matematiche e informatiche INF/01 Informatica

I contenuti di questa pagina costituiscono rielaborazioni personali del Publisher gian_fri99 di informazioni apprese con la frequenza delle lezioni di Architettura degli elaboratori e sistemi operativi 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 Bari o del prof Pirlo Giuseppe.