Le tre famiglie fondamentali. Laboratorio di Architettura. 1. Manipolazione di dati. 1.1 Aritmetica di base. Lezione 3

Documenti analoghi
Laboratorio di Architettura

PARTE NOIOSA. Laboratorio di Architettura. Sistemi microprogrammati MA PRIMA... MIPS (R2000/R3000 RISC) MIPS e la rivoluzione RISC.

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

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

Manualino minimale MIPS

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

Architettura degli Elaboratori e Laboratorio

Il linguaggio del calcolatore: linguaggio macchina e linguaggio assembly

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

Il Livello Logico-Digitale. Blocchi funzionali combinatori

La "macchina" da calcolo

Linguaggio Assembly e linguaggio macchina

Architettura degli Elaboratori e Laboratorio. Matteo Manzali Università degli Studi di Ferrara Anno Accademico

Architettura degli Elaboratori

Linguaggio Assembly e linguaggio macchina

Il linguaggio Assembly. Architettura degli Elaboratori e delle Reti Turno I

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

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

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

ARCHITETTURE DEI CALCOLATORI (canale A-I) - Prima prova in itinere del 16/6/2003 Compito tipo A

Per gli esercizi sulla algebra booleana, si consiglia di verificare tramite tabelle di verità le equivalenze logiche proposte sulle dispense.

Istruzioni assembler Istruzione N Registri

Esame di INFORMATICA (*) Operazioni Aritmetiche: Somma. Lezione 3. Operazioni Aritmetiche: Somma. Operazioni Aritmetiche: Somma

Linguaggio Assembly e linguaggio macchina

Il linguaggio macchina

I.4 Rappresentazione dell informazione - Numeri con segno

Pag. 2. Somma binaria. Somma binaria. Somma binaria. Altre operazioni aritmetiche. La somma si può fare colonna per colonna

La codifica dell informazione

Seconda lezione. Rivediamo un po di definizioni principali Proseguiremo con nuovi codici

Architettura degli Elaboratori

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

1. L istruzione li $a0, è un istruzione standard del processore MIPS? Se no, a quali istruzioni corrisponde e come viene eseguita?

Linguaggi. Laboratorio di Architettura INTERPRETI VANTAGGI DEBUG. Lezione 2

Fondamenti di programmazione parte 2. Elementi di informatica IGLP

ARITMETICA BINARIA. La somma viene eseguita secondo le regole per la somma di due bit, di seguito riportate:

Sistemi di Elaborazione delle Informazioni

Interi positivi e negativi

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

CARATTERI SPECIALI. \n Nuova linea \t Tabulazione orizzontale \b Backspace \f Form feed \r Ritorno carrello \ Virgolette \ Apice \\ Backslash

Conversione di base. Conversione decimale binario. Si calcolano i resti delle divisioni per due

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

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

Codifica binaria: - numeri interi relativi -

Rappresentazione dei numeri interi in un calcolatore

Rappresentazione dei numeri interi in un calcolatore. Rappresentazione dei numeri

Rappresentazione dell informazione

Unita aritmetica e logica. Input e output della ALU. Rappresentazione degli interi. Rappresentazione in modulo e segno. Aritmetica del calcolatore

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

Lezione 7 Aritmetica in virgola mobile (1)

Aritmetica dei Calcolatori - Operazioni

Arithmetic and Logic Unit e moltiplicatore

Un ripasso di aritmetica: Rappresentazione decimale - limitazioni

Esercitazioni - Informatica A

Architettura degli elaboratori

Aritmetica dei Calcolatori

INPUT COMPUTER OUTPUT

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

Informazione binaria: - rappresentazione dei numeri naturali e interi relativi -

Architettura degli Elaboratori

Architettura degli Elaboratori I Esercitazione 1 - Rappresentazione dei numeri Roberto Navigli

Virtual CPU Eniac parte 2

Lezione 12. Assembly II. Set di Istruzioni MIPS Strutture di controllo in Assembly

Algebra di Boole e porte logiche

La Rappresentazione dell Informazione

La codifica. dell informazione. Codifica dei numeri. (continua) Codifica dei numeri. Codifica dei numeri: il sistema decimale

Virtual CPU (Eniac): parte 2

Fetch Decode Execute Program Counter controllare esegue prossima

Istruzioni e linguaggio macchina

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

Esercitazione del 05/03/ Soluzioni

Rappresentazione dell informazione

Lezione 3. I numeri relativi

Aritmetica dei Calcolatori Elettronici

Esercitazione del 03/03/ Soluzioni

LA CODIFICA DELLE INFORMAZIONI

L assegnamento. Andrea Marin. a.a. 2011/2012. Università Ca Foscari Venezia Laurea in Informatica Corso di Programmazione part-time

Rappresentazione dell informazione

LA TRASMISSIONE DELLE INFORMAZIONI SECONDA PARTE 1

Sistemi di Numerazione

Il linguaggio macchina

CALCOLATORI ELETTRONICI II

CORSO DI ARCHITETTURA DEGLI ELABORATORI Introduzione Sistemi di Numerazione

Esercitazione del 09/03/ Soluzioni

Circuti AND, OR, NOT Porte logiche AND

CPU. ALU e Registri della CPU. Elementi della CPU. CPU e programmazione (Parte 1) Central Processing Unit, processore

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

Il linguaggio del calcolatore: linguaggio macchina e linguaggio assembly

Rappresentazione in virgola fissa (fixed-point) Rappresentazione di Numeri Reali. Conversione decimale-binario di numeri non interi

Rappresentazione della informazione

Rappresentazione dei numeri interi in un calcolatore

Transcript:

Le tre famiglie fondamentali Laboratorio di Architettura Lezione 3 Andrea Torsello Dipartimento di Informatica Università Ca Foscari di Venezia Ci sono tre famiglie fondamentali di istruzioni, per: 1. Manipolazione di dati 2. Movimento di dati 3. Flusso di dati p.1/65 1. Manipolazione di dati p.2/65 1.1 Aritmetica di base 1.1 Aritmetica di base: +, -, *, /, < 1.2 Operazioni logiche Ovviamente, si possono eseguire le quattro operazioni fondamentali: +, -, *, / Più un test di diseguaglianza ( < ) p.3/65 p.4/65

ADDIZIONE SOTTRAZIONE add dest, reg1, reg2 In linguaggio macchina dunque: sub dest, reg1, reg2 In linguaggio macchina dunque: 0 reg1 reg2 dest 0 variant=20 hex Istruzione di tipo R 0 reg1 reg2 dest 0 variant=22 hex p.5/65 MOLTIPLICAZIONE p.6/65 MOLTIPLICAZIONE Mult reg1,reg2 In linguaggio macchina: 0 reg1 reg2 0 0 variant=18 hex NON C È IL DESTINATARIO Non c è il registro destinatario perché stiamo moltiplicando due registri (reg1 e reg2) Ogni registro è grande 32 bits, quindi il risultato è di 64 bits: servono DUE registri per tenere il risultato, non ne basta uno La scelta fatta è stata dunque quella di FISSARE i due registri dove andrà il risultato il risultato va nei due registri $Hi e $Lo (i primi 32 bits in $Hi, gli altri 32 in $Lo) p.7/65 p.8/65

DIVISIONE DIVISIONE div reg1, reg2 In linguaggio macchina: 0 reg1 reg2 0 0 variant=1a hex NEANCHE QUI C È IL DESTINATARIO Questa volta, il risultato STAREBBE in un registro (dividiamo un registro per qualcosa, quindi il risultato starebbe comodamente in un registro) MA... anche qui, per parallellismo con la moltiplicazione, si fissa il registro risultato il risultato va nel registro $Lo BONUS: viene anche calcolato il RESTO della divisione, che va nel registro $Hi < (minore) p.9/65 p.10/65 Variante immediata slt dest,reg1,reg2 slt = set less than Pone dest = 1 se reg1 < reg2, e 0 altrimenti In linguaggio macchina dunque: Per tutte queste operazioni, è possibile specificare direttamente un numero (di 16 bits) al posto di uno dei due registri: dest = registro1 operazione numero La corrispondente istruzione immediata si ottiene in assembly aggiungendo una i al nome: addi,... 0 reg1 reg2 dest 0 variant=2a hex p.11/65 p.12/65

ESEMPI delle varianti immediate 1.2 Operazioni Logiche Addizione classica add dest, reg1, reg2 Addizione immediata addi dest, reg1, numero In linguaggio macchina si possono effettuare: Spostamenti (shifts) AND, OR, XOR, NOR Non esite subi, perché? p.13/65 Operazioni logiche (cont.) Ma prima... p.14/65 A cosa servono? Servono a manipolare i bit Rivediamo la rappresentazione binaria... p.15/65 p.16/65

Numero binario E i negativi? Una word è composta da 32 cifre binarie b 31 b 30 b 29... b 2 b 1 b 0 il suo valore è : b 31 2 31 + b 30 2 30 +... + b 2 2 2 + b 1 2 + b 0 = 31 i=0 b i2 i Come facciamo a rappresentare i numeri negativi? Un modo è quello di mantenere un bit per il segno (bit 31), per cui 3 = 00000000000000000000000000000011-3 = 10000000000000000000000000000011 Sempre positivo p.17/65 Complemento a 1 p.18/65 Complemento a 2 Questa rappresentazione dei numeri negativi si chiama complemento a 1 è semplice da comprendere e le operazioni aritmetiche sono relativamente semplici da implementare...ma ha due rappresentazioni per 0: 0 = 00000000000000000000000000000000-0 = 10000000000000000000000000000000 il complemento a 1 è utilizzato per i numeri con la virgola (verdemo più avanti), ma per gli interi si usa un atra rappresentazione Il bit 31, invece di corrispondere a 2 31 lo faccimao corrispondere a 2 31 così b 31 b 30 b 29... b 2 b 1 b 0 vale 2 31 b 31 + 30 i=0 b i2 i per cui: 3 = 00000000000000000000000000000011-3 = 11111111111111111111111111111101 p.19/65 p.20/65

Vantaggi Addizione Il bit 31 ci dice comunque il segno Ogni numero è rappresentato in un unico modo Un po più complicato da capire, ma meno di quel che sembra Le operazioni sono semplici. vediamo come funziona l addizione tra due numeri con segno. Se i numeri sono entrambi positivi numeri positivi l operazione è invariata. NOTA: C è errore se c è un riporto alla 32-esima cifra (overflow) Se i numeri sono uno positivo e uno negativo l addizione funziona come se i due numeri non avessero segno! p.21/65 p.22/65 Addizione MIPS Se i numeri sono entrambi negativi è come una addizione senza segno delle prime 31 cifre. Il risultato è corretto solo se c è un riporto alla 32-esima cifra (overflow) Esempio (a 4 bit): -1 + -2 = (-8+4+2+1) + (-8+4+2) = -3 1111 + 1110 = (1) 111+110 =(1) 1101= (1) 101 = 1101 Le operazioni aritmetiche viste sin ora agivano su numeri con il segno Esistono varianti delle operazioni aritmetiche che considerano le words come cifre a 32 bit senza segno Le varianti senza segno si identificano perché finiscono per u: addu, addiu, subu, subiu,... p.23/65 p.24/65

Operazioni logiche AND, OR, XOR Torniamo alle operazioni sui bit... Codificano le corrispettive operazioni logiche Interpretazione logica sui bits: 0 falso 1 vero p.25/65 AND, OR, XOR (cont.) AND p.26/65 Tutte queste operazioni, eseguite su numeri più grandi di un singolo bit, vengono eseguito bit a bit Esempio: 1011 and 0110 = 0010 Tabella della AND ( e ): 0 0 0 1 0 0 0 1 0 1 1 1 p.27/65 p.28/65

OR XOR Tabella della OR ( o ): 0 0 0 1 0 1 0 1 1 1 1 1 Tabella della XOR ( o esclusivo ): 0 0 0 1 0 1 0 1 1 1 1 0 p.29/65 Perché proprio queste? p.30/65 Perché (cont.) Al di là della interpretazione logica, ci sono tantissime altre funzioni possibili Esempio: 0 0 1 1 0 0 0 1 1 1 1 1 Perché tramite queste tre operazioni, possiamo ottenere qualsiasi altra operazione sui bit Questo spiega perché bastano queste tre Non sono le uniche con questa proprietà, ma sono anche tra le più utili in pratica p.31/65 p.32/65

Numero minimo NAND Qual è il numero minimo di operazioni con cui possiamo ottenere ogni altra operazione sui bit? Ne basta una! per esempio... NAND (not and) Tabella della NAND: 0 0 1 1 0 1 0 1 1 1 1 0 p.33/65 Cosa fanno? AND 0 p.34/65 Interpretazione funzionale Tramite AND, OR e XOR possiamo modificare un bit a seconda se il secondo operando è 0 o 1 and 0, oppure and 1 and 0 : 0 and 0 = 0 [copia] 1 and 0 = 0 [metti 0 (spegni)] Cioè: 0 and 0 = 0 [spegni] 1 and 0 = 0 [spegni] and 0 serve a SPEGNERE p.35/65 p.36/65

AND 1 AND and 1 : 0 and 1 = 0 [copia] 1 and 1 = 1 [copia] and 1 serve a COPIARE Due operazioni: and 0 : SPEGNERE and 1 : COPIARE p.37/65 In Assembler p.38/65 AND in Assembler and agisce su words, il che significa che possiamo agire contemporaneamente sui 16 bits di una word, con le due operazioni sopra dette (CANCELLA o COPIA) Esempio: andi $t0, $t1, 127 andi $t0, $t1, 0000000011111111 prendi t1, cancella gli 8 bits piu a sinistra, copia gli 8 bits più a destra, e metti il risultato in t0 Se t1= 1010101010101010 allora con la and t0= 0000000010101010 p.39/65 p.40/65

AND A cosa serve? and dest, reg1, reg2 In linguaggio macchina dunque: 0 reg1 reg2 dest 0 variant=24 hex verificare quali bit siano accesi t1 andi 000000000100000 è diverso da 0 se e solo se dice se il sesto bit di t1 è acceso. in grafica...per animazione e rilevamento delle collisioni p.41/65 p.42/65 OR 0 OR 1 or 0 : 0 or 0 = 0 [copia] 1 or 0 = 1 [copia] or 0 serve a COPIARE or 1 : 0 or 1 = 1 [accendi] 1 or 1 = 1 [copia] Cioè: 0 or 1 = 1 [accendi] 1 or 1 = 1 [accendi] or 1 serve ad ACCENDERE p.43/65 p.44/65

OR A cosa serve or dest, reg1, reg2 In linguaggio macchina dunque: In grafica... per accendere selettivamente (disegnare solo la figura) (Il mouse pointer) 0 reg1 reg2 dest 0 variant=25 hex p.45/65 p.46/65 XOR 0 XOR 1 xor 0 : 0 xor 0 = 0 [copia] 1 xor 0 = 1 [copia] xor 0 serve a COPIARE xor 1 : 0 xor 1 = 1 [accendi] 1 xor 1 = 0 [spegni] Cioè: 0 xor 1 = 1 [inverti] 1 xor 1 = 0 [inverti] or 1 serve ad INVERTIRE p.47/65 p.48/65

XOR XOR Due operazioni: xor 0 : COPIARE xor 1 : INVERTIRE xor dest, reg1, reg2 In linguaggio macchina dunque: 0 reg1 reg2 dest 0 variant=26 hex p.49/65 p.50/65 Utilità Esempi INVERTIRE è una operazione che è reversibile (INVERTI(INVERTI)) = COPIA non necessita di memoria ulteriore... Giochi (trasparenza, refresh, sprites) Grafica e suono... p.51/65 p.52/65

Il miracolo... Soluzione classica Volete implementare la funzione SCAMBIA (SWAP), che scambia il contenuto di due registri (o variabili) R1 e R2 Ad esempio, se t0=5 e t1=12, dopo SCAMBIA (t0,t1) avremo t0=12 e t1=5 Quanti registri servono come minimo...? Servono tre registri I due registri, più un registro temporaneo TEMP TEMP := R1 R1 := R2 R2 := TEMP p.53/65 Il miracolo di XOR LE SHIFT s p.54/65 Miracolosamente, invece, usando XOR servono SOLO DUE REGISTRI Paradossale!!!! esercizio (basta usare solo la xor e nessun altra istruzione) capite come si sposta l informazione... Shift right (sposta a destra) 1011111111111111 0101111111111111 Shift left (sposta a sinistra) 1011111111111111 1011111111111110 Sono istruzioni ibride, nel senso che agiscono sia a livello di bit che a livello di word p.55/65 p.56/65

Shift s Spostamenti (shifts) Cosa fanno le shifts? A livello di bit, spostano appunto a destra o a sinistra A livello di WORD: Uno shift a sinistra MOLTIPLICA per DUE Uno shift a destra DIVIDE per DUE ATTENZIONE ai numeri negativi... Lo shift (spostamento) di un numero avviene a destra o a sinistra: SHIFT A DESTRA: si cancella la cifra più a destra, e si mette uno zero a sinistra SHIFT A SINISTRA: si cancella la cifra più a sinistra, e si mette uno zero a destra ATTENZIONE: lo shift è SEMPRE inteso per numeri binari (la cifra è un bit) ESEMPI p.57/65 p.58/65 SHIFT MULTIPLO Shift a destra di 10111011 è 01011101 Shift a sinistra di 10111011 è 01110110 Lo shift classico è di una posizione Ovviamente, può essere di più posizioni: Lo shift a destra di n posizioni si ottiene facendo lo shift a destra n volte Lo shift a sinistra di n posizioni si ottiene facendo lo shift a sinistra n volte p.59/65 p.60/65

ESEMPI Spostamenti (cont.) Shift di tre posizioni a destra di 10111011 è 00010111 Shift di tre posizioni a sinistra di 10111011 è 11011000 Tornando al linguaggio macchina, si possono effettuare: Shifts a destra di n posizioni Shifts a sinistra di n posizioni p.61/65 SHIFT A DESTRA p.62/65 SHIFT A SINISTRA srl dest, reg2, spost srl = shift right logical, e spost è il numero di shifts che si devono fare In linguaggio macchina dunque: sll dest,reg2,spost sll = shift left logical, e spost è il numero di shifts che si devono fare In linguaggio macchina dunque: 0 0 reg2 dest spost variant=2 hex 0 0 reg2 dest spost variant=4 hex p.63/65 p.64/65

Cosa vedremo Tutti gli effetti collaterali di queste istruzioni Le loro varianti Come da queste operazioni basilari se ne derivano altre più potenti (soprattutto) a cosa servono veramente p.65/65