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

Documenti analoghi
Linguaggio macchina: utilizzo di costanti, metodi di indirizzamento

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

Il linguaggio macchina

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

Il linguaggio macchina

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

Istruzioni di trasferimento dati

Architettura degli Elaboratori

Università degli Studi di Cassino

Richiami sull architettura del processore MIPS a 32 bit

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

Istruzioni assembler Istruzione N Registri

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

Richiami sull architettura del processore MIPS a 32 bit

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

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

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

Linguaggio Assembly e linguaggio macchina

Linguaggio Assembly e linguaggio macchina

L'architettura del processore MIPS

Linguaggio Assembly e linguaggio macchina

Architettura degli Elaboratori B Introduzione al corso

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

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

Il linguaggio del calcolatore: linguaggio macchina e linguaggio assembly

ISA (Instruction Set Architecture) della CPU MIPS

ISA e linguaggio macchina

Il processore: unità di elaborazione

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

Calcolatori Elettronici

Il processore: unità di controllo

MIPS! !

Il Linguaggio Assembly: Gestione della memoria e controllo

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

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

Elementi base per la realizzazione dell unità di calcolo

Modi di indirizzamento del processore MC68000 (parte prima)

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

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

Il linguaggio assembly

MIPS Instruction Set 1

L unità di controllo di CPU a singolo ciclo

Laboratorio di Architettura degli Elaboratori LabArch 2007 Terzo Quadimestre, a.a Docente: H. Muccini

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

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

Le costanti Le modalità di indirizzamento L assembly del MIPS

L insieme delle istruzioni

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

Università degli Studi di Roma La Sapienza

Istruzioni MIPS per floating point

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

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

LABORATORIO DI ARCHITETTURA DEI CALCOLATORI lezione n 15

Modi di indirizzamento del processore MC68000 (parte seconda)

5 April LABORATORIO 03 CONTROLLO DEL FLUSSO DI UN PROGRAMMA JUMP ADDRESS TABLE. I. Frosio

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

Lecture 2: Prime Istruzioni

Progetto CPU (ciclo singolo) Salvatore Orlando

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

1. Schema generale di traduzione di un programma. Lo schema generale di un programma puo' essere cosi schematizzato:

Architettura di tipo registro-registro (load/store)

Strutture di controllo del flusso di esecuzione in assembler. MC68000: Status Register

MIPS Instruction Set 1

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

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

Linguaggio Assembler MIPS

Un quadro della situazione. Lezione 13 Il Set di Istruzioni (1) Organizzazione della lezione. Dove siamo nel corso. Cosa abbiamo fatto

Processore: Datapath & Control. Progetto CPU (ciclo singolo) Rivediamo i formati delle istruzioni. ISA di un MIPS-lite

Astrazione dell implementazione. Il processore: unità di elaborazione e unità di controllo (2) Il controllo della ALU.

Calcolatori Elettronici

Laboratorio di Architettura degli Elaboratori

1. Si effettui la divisione di 7/5 utilizzando un efficiente algoritmo e illustrando la corrispondente architettura hardware.

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

Implementazione semplificata

Architettura degli Elaboratori B Introduzione al corso

Esercitazione di Calcolatori Elettronici Ing. Battista Biggio. Corso di Laurea in Ingegneria Elettronica. Capitolo 5 Linguaggio Assembly

Architettura dei calcolatori e sistemi operativi. Set istruzioni e struttura del programma Direttive all Assemblatore.

Il linguaggio del calcolatore: linguaggio macchina e linguaggio assembly

Lezione 15 Il Set di Istruzioni (1)

Calcolatori Elettronici A a.a. 2008/2009

Corso di Calcolatori Elettronici I Istruzioni macchina ing. Alessandro Cilardo

Architettura hardware

L insieme delle istruzioni (6)

Il linguaggio Assembly del MIPS

Elementi di informatica

Linguaggi e moduli. Dott. Franco Liberati

Linguaggio Assembler MIPS

Richiami: v[i] e &v[i] Organizzazione della memoria. Organizzazione della memoria. Esercitazione di Calcolatori Elettronici Ing. Gian Luca Marcialis

Sistemi di Elaborazione delle Informazioni

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

Struttura CPU. Struttura e Funzione del Processore. Capitolo 12. Compiti CPU:

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

Somma di numeri floating point. Algoritmi di moltiplicazione e divisione per numeri interi

LINGUAGGIO MACCHINA e ASSEMBLER. Una CPU MINIMA Il linguaggio macchina di MINIMA Il linguaggio Assembler per MINIMA

Architettura degli Elaboratori Lez. 2 Le istruzioni della CPU. Prof. Andrea Sterbini

Materiale didattico. Materiale didattico. Architettura MIPS. Il linguaggio Assembly parte I. Architettura degli Elaboratori e delle Reti

Assembly (3): le procedure

CPU a ciclo multiplo

Architettura degli Elaboratori Modulo 2

Il linguaggio Assembly

Transcript:

Un altro tipo di indirizzamento L insieme delle istruzioni (3) Architetture dei Calcolatori (lettere A-I) Tipi di indirizzamento visti finora Indirizzamento di un registro Indirizzamento con registro base in memoria Ponendo lo spiazzamento a zero, è possibile effettuare l indirizzamento indiretto Cosa altro è necessario? Possibilità di specificare costanti, ad esempio da usare nelle istruzioni aritmetiche o nelle istruzioni di salto Indirizzamento immediato Vogliamo avere istruzioni del tipo Somma la costante 4 al registro $t1 Setta il registro $t1 se il valore del registro $s0 è minore di 12 Valeria Cardellini 1 Istruzioni di somma e scelta con operando Istruzione addi (add immediate) addi $t1, $t1, 4 Somma la costante 4 al valore contenuto in $t1 e pone il risultato in $t1 Istruzione slti (set on less than immediate) slti $t0, $s0, 12 Se il valore del registro $s0 è minore di 12 allora pone a 1 il registro $t0, altrimenti pone a 0 il registro $t0 Formato delle istruzioni addi e slti Seguono il formato di istruzione di tipo I (immediate), usato anche dalle istruzioni lw e sw op rs rt address 6 bit 5 bit 5 bit 16 bit La costante è contenuta nel campo address (16 bit) Istruz. di somma e scelta con operando (2) Formato istruzione addi Codice MIPS: Formato istruzione slti Codice MIPS: addi $t0, $t1, 4 8 9 8 4 slti $t0, $s0, 12 10 16 8 12 Anche le istruzioni andi e ori seguono il formato di tipo I Istruzioni per utilizzare un valore costante nell operazione di AND e OR Valeria Cardellini 2 Valeria Cardellini 3

Dimensione delle costanti Le istruzioni di tipo I consentono di rappresentare nel campo address costanti esprimibili in 16 bit (valore massimo 65535 unsigned) I valori immediati sono rappresentati in assembler secondo la rappresentazione decimale, ma possono anche essere esadecimali o binari Un problema: come fare se 16 bit non sono sufficienti a rappresentare una costante? Osservazione: nella pratica le costanti sono piccole Esiste una soluzione costosa in due passi per i casi meno frequenti 1) Caricare una costante (16 bit) nei 16 bit più significativi di un registro (bit 31-16) utilizzando l istruzione lui (load upper immediate) 2) Aggiungere i 16 bit meno significativi (bit 15-0) utilizzando l istruzione ori Valeria Cardellini 4 Istruzione lui Istruzione lui (load upper immediate) lui rt, imm Carica i 16 bit del valore imm nei 16 bit più significativi del registro rt; i rimanenti 16 bit del registro rt sono posti a 0 Segue il formato di istruzione di tipo I Codice MIPS: lui $t2, 127 15 0 10 127 001111 00000 01010 0000000001111111 Carica la costante 127 nei 16 bit più significativi del registro $t2 registro $t2 0000000001111111 0000000000000000 31 16 15 0 Valeria Cardellini 5 Caricamento di costanti a 32 bit Supponiamo di voler caricare il valore 4000000 10 nel registro $s0 In binario 0000 0000 0011 1101 0000 1001 0000 0000 Separiamo il valore in binario in 2 valori a 16 bit Il valore 61 10 per i 16 bit più significativi In binario 0000 0000 0011 1101 Il valore 2304 10 per i 16 bit meno significativi Pari a 0000 1001 0000 0000 lui $s0, 61 # 0000 0000 0011 1101 nei bit 31-16 di $s0 ori $s0, $s0, 2304 # 0000 1001 0000 0000 nei bit 15-0 di $s0 Valeria Cardellini 6 Esercizi Scrivere un programma in assembler MIPS che, dato l array di interi A di 100 elementi, effettua la somma solamente degli elementi di A minori di 10 sum = 0; for (i=0; i<100; i++) if (A[i] < 10) sum = sum + A[i]; Scrivere un programma in assembler MIPS che, dato l array di interi A di 100 elementi, effettua la somma solamente degli elementi di A minori di 10 e maggiori di 5 sum = 0; for (i=0; i<100; i++) if ((A[i] > 5) && (A[i] < 10)) sum = sum + A[i]; Valeria Cardellini 7

Indirizzamento nei salti Conosciamo diverse istruzioni che permettono di eseguire salti Istruzioni di salto condizionato (beq, bne) Istruzioni di salto incondizionato (j) Queste istruzioni hanno formati diversi Formato I per beq e bne op rs rt address 6 bit 5 bit 5 bit 16 bit Formato J per j op address 6 bit 26 bit Istruzioni di salto incondizionato (tipo J) Il campo address del formato J è di 26 bit Una parte (26 bit su 32) dell indirizzo assoluto di destinazione del salto Il registro Program Counter (PC), che nel MIPS contiene l indirizzo della prossima istruzione da eseguire, è grande 32 bit Ma l istruzione di tipo J ha un campo di 26 bit e dovrebbe indirizzare tutta la memoria Si adotta l indirizzamento pseudo-diretto; in effetti si usano due tecniche: Indirizzamento alla parola Concatenazione Valeria Cardellini 8 Valeria Cardellini 9 Istruzioni di salto incondizionato (2) Indirizzamento alla parola L indirizzo nel formato J indirizza le parole (word): quindi l indirizzo a cui saltare si ottiene moltiplicando per 4 il valore memorizzato nei 26 bit La moltiplicazione per 4 equivale a far scorrere la parola di 2 bit a sinistra E come se si esprimesse un indirizzo (a byte) di 28 bit Concatenazione I restanti 4 bit vengono presi dai 4 bit più significativi del PC (lasciandoli quindi inalterati) Quindi, l istruzione j rimpiazza solo i 28 bit più significativi del PC, lasciando inalterati i rimanenti 4 bit più significativi Sono possibili programmi di dimensione pari a 2 28 = 2 8 2 20 = 256 MB Per saltare ad indirizzi maggiori di 256 MB: usare l istruzione jr che compie un salto a indirizzo di 32 bit (spazio di 2 32 byte ovvero 2 30 word) Valeria Cardellini 10 Esempio di indirizzamento per tipo J Per l istruzione di formato J j 10000 L indirizzo 10000 si riferisce al byte Si memorizza l indirizzo alla parola (ossia 10000/4 = 2500) 2 2500 000010 00000000000000100111000100 00000000000000100111000100 Dal PC 0000000000000010011100010000 PC 31 PC 30 PC 29 PC 28 0000000000000010011100010000 26 bit 28 bit 32 bit Valeria Cardellini 11

Istruzioni di salto condizionato (tipo I) Il campo address del formato I è di 16 bit Usando le stesse tecniche viste per il formato J non potremmo saltare ad indirizzi più grandi di 2 18 Usando l indirizzamento alla parola (da 16 a 18 bit) e la concatenazione con i 14 bit più significativi di PC I programmi non potrebbero essere più grandi di 2 18 = 2 8 2 10 = 256 KB: non è accettabile! Si adotta l indirizzamento relativo al Program Counter Il valore dei 16 bit è usato come un valore relativo alla posizione corrente L etichetta fornisce la distanza (in numero di parole) tra l istruzione corrente e l istruzione da eseguire se il test ha successo (indirizzamento alla parola) Viene sommato il valore del campo address al valore del registro PC Valeria Cardellini 12 Esempio di indirizzamento per tipo I Per l istruzione di formato I 1000 bne $t0, $t1, L1 L istruzione bne è memorizzata all indirizzo 1000 Il valore corrente del PC è quindi 1004 (1000 + 4) Supponiamo che l istruzione etichettata da L1 sia all indirizzo 1400 Quale è il valore dell etichetta L1 nel formato I? Occorre saltare di 99 parole, essendo (1400 1004)/4 = 99 Si memorizza il numero 99 nei 16 bit 000101 01000 01001 0000000001100011 0000000001100011 16 bit 000000000110001100 18 bit 396 10 0000000000000000000000000110001100 + PC = 1004 10 0000000000000000000000001111101100 Valeria Cardellini 13 Istruzioni di salto condizionato (2) La tecnica di indirizzamento utilizzata per il salto condizionato limita i salti a ± 2 15 parole (ovvero ± 2 17 byte) In pratica non è una grande limitazione I salti sono spesso di piccola entità Tipicamente i branch servono nei cicli, che normalmente non sono di grandi dimensioni Il limite è comunque superabile mediante l uso combinato di istruzioni di branch ed una istruzione di jump Esempio: l assemblatore può tradurre un salto che richiede 18 bit beq $t0, $t1, L1 bne $t0, $t1, L2 j L1 132072 L2: Valeria Cardellini 14 Codice C Esempio while (A[i] ==k) i += 1; Codice MIPS Loop: sll $t1, $s3, 2 # $t1 = i * 4 add $t1, $t1, $s6 # $ti = indirizzo di A[i] lw $t0, 0($t1) bne $t0, $s5, Exit addi $s3, $s3, 1 # i = i + 1 j Loop Exit: Assumiamo che la prima istruzione sia memorizzata alla locazione di indirizzo 80000 Valeria Cardellini 15

Esempio (2) Codice in linguaggio macchina 80000 0 0 19 9 80004 0 9 22 9 80008 35 9 8 2 0 0 0 32 Modalità di indirizzamento: riepilogo MIPS ha solo 5 modalità di indirizzamento A registro (register addressing) Immediato (immediate addressing) Con registro base o spiazzamento (base or displacement addressing) Relativo al Program Counter (PC-relative addressing) Pseudo-diretto (pseudodirect addressing) 80012 80016 80020 80024 5 8 2 8 19 21 19 20000 2 1 Una singola istruzione può usare più di un indirizzamento Modalità di indirizzamento semplificate rispetto ad altre architetture Valeria Cardellini 16 Valeria Cardellini 17 Indirizzamento a registro L operando è il contenuto di un registro della CPU: il nome del registro è specificato nell istruzione op rs rt rd shamt funct register Le istruzioni che usano questo tipo di indirizzamento hanno formato di tipo R (esempio: istruzioni logicoaritmetiche) Indirizzamento immediato L operando è una costante, il cui valore è contenuto nell istruzione L indirizzamento immediato si usa per specificare il valore di un operando sorgente, non ha senso usarlo come destinazione op rs rt operando Le istruzioni che usano questo tipo di indirizzamento hanno formato di tipo I La costante è memorizzata nel campo a 16 bit Esempio: istruzione logico-aritmetica con operando immediato, operazione di confronto con operando immediato Valeria Cardellini 18 Valeria Cardellini 19

Indirizzamento con base L operando è in una locazione di memoria, il cui indirizzo si ottiene sommando il contenuto di un registro base ad un valore costante (offset o spiazzamento) contenuto nell istruzione Indirizzamento relativo al PC L operando (istruzione) è in una locazione di memoria, il cui indirizzo si ottiene sommando il contenuto del Program Counter ad un valore costante (offset o spiazzamento) contenuto nell istruzione op rs rt offset indirizzo registro Le istruzioni che usano questo tipo di indirizzamento hanno formato di tipo I Esempio: istruzioni di load/store parola memoria Valeria Cardellini 20 + op rs rt offset indirizzo PC Le istruzioni che usano questo tipo di indirizzamento hanno formato di tipo I Esempio: istruzioni di salto condizionato parola memoria Valeria Cardellini 21 + Indirizzamento pseudo-diretto Una parte dell indirizzo è presente come valore costante (offset o spiazzamento) nell istruzione ma deve essere completato L indirizzo di salto si ottiene facendo uno shift a sinistra di 2 bit dei 26 bit di offset contenuti nell istruzione e concatenando i 28 bit con i 4 bit più significativi del PC op offset indirizzo parola PC Le istruzioni che usano questo tipo di indirizzamento hanno formato di tipo J Esempio: istruzioni di salto incondizionato memoria Valeria Cardellini 22 Altre modalità di indirizzamento Esistono anche altre modalità di indirizzamento in memoria usate in architetture diverse da MIPS (ad es. Intel 80x86) Tali modalità consentono ad esempio di avere gli operandi in memoria. Esempio: Diretto o assoluto (direct) L indirizzo di memoria assoluto è indicato direttamente nell istruzione Istruzione di esempio: add R1, (1001) Significato: Reg[R1] Reg[R1] + Mem[1001] L indirizzamento diretto si può simulare anche nel MIPS mediante l indirizzamento con base ed usando $zero come base register (range di memoria limitato) Indiretto con registro (register indirect) L indirizzo di memoria è in un registro Istruzione di esempio: add R4, (R1) Significato: Reg[R4] Reg[R4] + Mem[Reg[R1]] L indirizzamento indiretto si può simulare anche nel MIPS mediante l indirizzamento con base ed usando 0 come displacement Valeria Cardellini 23

Altre modalità di indirizzamento (2) Indiciato (indexed) L indirizzo di memoria è dato dalla somma di due registri Istruzione di esempio: add R3, (R1+R2) Significato: Reg[R3] Reg[R3] + Mem[Reg[R1]+Reg[R2]] Memoria indiretto (memory indirect) L indirizzo di memoria è dato dal contenuto di una locazione di memoria indicata da un registro Istruzione di esempio: add R1, @(R3) Significato: Reg[R1] Reg[R1] + Mem[Mem[Reg[R3]] Scalato (scaled) L indirizzo di memoria è dato da: offset + base + (d indice) Istruzione di esempio: add R1, 100(R2)[R3] Significato: Reg[R1] Reg[R1] + Mem[100+[Reg[R2]+d [Reg[R3]] In Intel 80386 e successivi processori 80x86: d=2 s (s=0,1,2,3) Valeria Cardellini 24 Pseudoistruzioni Il linguaggio assembler rappresenta una interfaccia verso il software di livello più alto Per semplificare la programmazione, è possibile che siano aggiunte un insieme di pseudoistruzioni Le pseudoistruzioni sono un modo compatto ed intuitivo per specificare un insieme di istruzioni Non hanno una corrispondenza uno-a-uno con le istruzioni presenti nel linguaggio macchina Non sono implementate in hardware Ma sono abbastanza semplici da tradurre in linguaggio macchina e rappresentano un aiuto per il programmatore, in quanto arricchiscono il set di istruzioni assembler La traduzione della pseudoistruzione nelle istruzioni equivalenti è attuata automaticamente dall assemblatore Valeria Cardellini 25 Le pseudoistruzioni MIPS La pseudoistruzione move permette di copiare il valore di un registro in un altro registro move $t0, $t1 Il registro $t0 prende il valore del registro $t1 Come viene tradotta move in istruzioni MIPS? Ricordiamo che il registro $zero è mantenuto sempre a zero move $t0, $t1 viene quindi tradotta in add $t0, $zero, $t1 Si possono caricare costanti a 32 bit in un registro tramite la pseudoistruzione li (load immediate) Vengono tradotte usando le istruzioni lui e ori E possibile specificare anche costanti in base esadecimale Valeria Cardellini 26 Le pseudoistruzioni MIPS (2) Le istruzioni di branch con slt possono essere complesse L assembler MIPS mette a disposizione alcune pseudoistruzioni di branch che vengono aggiunte a beq e bne Serve un registro riservato per l assemblatore ($at) Esempio: la pseudoistruzione blt (branch-on-less-than) viene implementata con slt e bne slt $at, $t0, $t1 blt $t0, $t1, 1000 bne $at, $zero, 1000 Esistono anche bgt (branch-on-greater-than) bge (branch-on-greater-than-or-equal) ble (branch-on-less-than-or-equal) Per esercizio, determinare come sono implementate in MIPS Valeria Cardellini 27