Primo modulo Tecniche della programmazionemarte/homepage/didattica/complementi... · 2013-10-30 ·...

Post on 01-Aug-2020

1 views 0 download

Transcript of Primo modulo Tecniche della programmazionemarte/homepage/didattica/complementi... · 2013-10-30 ·...

Architettura di un calcolatore e linguaggio macchina

Primo modulo

Tecniche della programmazione

CPU

Central Processing Unit, processoreUnita’ logica/aritmetica: elaborazione datiUnita’ di controllo: coordina le attivita’Registri: memoria temporanea, simili a celle di

memoria principale Generici: per gli operandi di un’operazione

logica/aritmetica, e il risultato Speciali: per operazioni particolari

CPU e memoria principale

Trasferimento dati in entrambe le direzioni (lettura e scrittura): bus

Somma di due dati in memoria

Prendere primo operando da RAM e metterlo in un registro

Prendere l’altro operando da RAM e metterlo in un registro

Attivare i circuiti per la somma usando i due registri come ingressi e un altro registro come uscita

Trasferire il risultato in RAM Stop

Sia dati che programmi in RAM

Non solo operandi o risultati sono memorizzati nella RAM

Anche le istruzioni dei programmi La CPU esegue cose diverse (somma,

sottrazione, divisione, operazioni logiche, ...) a seconda dell’istruzione che legge in RAM

Ogni istruzione: sequenza di bit contenuta in una cella di RAM

Linguaggio macchina

Insieme di istruzioni molto semplici Approccio RISC (Reduced Instruction Set

Computer): poche istruzioni semplici Approccio CISC (Complex ...): molte

istruzioni complesse Pentium sono CISC, POwerPC (Apple,

IBM, Motorola) sono RISC

Istruzioni per trasferimento dati

In realta’, non e’ un trasferimento ma una copia

Load: da memoria a registro Store: da registro a memoria Anche input/output

Istruzioni logico/aritmetiche

Operazioni aritmetiche: somma, ... Operazioni logiche: and, or, xor, anche

shift e rotate

Istruzioni di controllo

Regolano l’esecuzione del programma Es.: stop Anche istruzioni di salto: se l’istruzione da

eseguire non e’ la successiva nella lista Salto condizionato o no Es.: salta al passo 5, o salta al pass 5 se il

valore ottenuto e’ 0

Divisione di due valori in memoria

1. Carica in un registro un valore in memoria (LOAD)2. Carica in un altro registro un altro valore in memoria

(LOAD)3. Se questo secondo valore e’ 0, salta al passo 6 (salto

condizionato)4. Dividi il contenuto del primo registro per quello del

secondo registro e metti il risultato in un terzo registro (op. aritmetica)

5. Archivia il contenuto del terzo registro in memoria (STORE)

6. STOP

Esempio di architettura

• 16 registri, 256 celle di memoria• Program counter: indirizzo della prossima istruzione da eseguire• Instruction register: istruzione da eseguire

Istruzione macchina

Due parti (campi): Campo codice operativo: quale

operazione eseguire Campo operando: diverso a seconda

dell’operazione

Istruzioni di trasferimento: registri ⇔ RAM

012345ALU

R0

R1

R2

LOAD

STORE

Formato:in binario!

codice-op n. registro indirizzo parola RAM

8 bit 4 bit 20 bit

1 parola

LOAD 00000000STORE 00000001Codici:

ARITMETICHEeseguono somma, differenza, moltiplicazione e divisione usando i registri come operandi

ADD 00000010 FADD 00000011

SUB 00000100 FSUB 00000101

MULT 00000110 FMULT 00000111

DIV 00001000 FDIV 00001001

MOD 00001010

Ri

RjCOp

FORMATO:

codice-op reg 1 reg 2

8 bit 4 bit 4 bit inutile

1 parola

Istruzioni di input/output: unità I/O ⇔ RAM

012345

READ

WRITE

Formato:in binario!

codice-op n. unità indirizzo parola RAM

8 bit 4 bit 20 bit

1 parola

READ 00010000WRITE 00010001

Codici: Unità:STINP 0000 (tastiera)STOUT 0001 (video)

Confronto paragona il contenuto di 2 registri Ri ed Rj e:•se Ri < Rj mette -1 nel registro RC

•se Ri = Rj mette 0 in RC•se Ri > Rj mette 1 in RC

Ri

RjCCf

RC

COMP 00100000FCOMP 00100001

Codici:

FORMATO:

codice-op reg 1 reg 2

8 bit 4 bit 4 bit inutile

1 parola

Saltoistruzioni che permettono di saltare ad un’altra istruzione del programma a seconda del contenuto di RC (cioè a seconda del risultato di un confronto)

BRLT 01000001 BRNE 01000100

BRLE 01000010 BRGE 01000110

BREQ 01000011 BRGT 01000101

BRANCH 10000000

Anche salto incondizionato!

FORMATO:

codice-op indirizzo RAM

8 bits inutile 20 bit

1 parola

STOP

termina il programma

STOP 10000001Codice:

FORMATO:

codice-op

8 bits inutile

1 parola

Ciclo della CPU

La CPU esegue un programma memorizzato in RAM copiando ad una ad una le istruzioni nell’unita’ di controllo

Ordine: quello in cui sono memorizzato, a meno di istruzioni di salto

Registri speciali: contatore di programma (program counter) Istruzione (instruction register)

Ciclo della CPU

Reperimento dell’istruzione (fetch): lettura della cella di RAM il cui indirizzo e’ contenuto

nel contatore di programma caricamento del registro istruzione con l’istruzione Incremento del contatore programma

Decodifica dell’istruzione: Trova gli operandi a seconda del codice operativo Modifica contatore programma se istruzione di salto

Esecuzione dell’istruzione: Attiva i circuiti necessari

Ciclo della CPU

Esempio

Scriviamo un programma macchina che:

•trasferisce il contenuto di 2 parole di indirizzo 64 e 68 della RAM nei registri R0 ed R1

•li somma

•trasferisce la somma nella parola di indirizzo 60 della RAM

Codici delle operazioni

•trasferimento RAM → CPU: 00000000

•trasferimento CPU → RAM: 00000001

•somma : 00000010

388

606468

Porta 68 in R1Somma R0 e R1

Porta 64 in R01024102810321036 Porta R0 in 60

..0100110..01000

11110010000001000100

000000000001..0100010000001000000001....

000000000000..01000010000000000100000001001000000100010000001100000000010000..001111

Svantaggi del linguaggio macchina:

•programmi in binario sono difficili da scrivere, capire e cambiare

•il programmatore deve occuparsi di gestire la RAM: difficile ed inefficiente

primo passo → Assembler

Novità dell’Assembler

•codici mnemonici per le operazioni

•nomi mnemonici (identificatori) al posto degli indirizzi RAM per i dati (e indirizzi RAM delle istruzioni usate nei salti)

•tipi dei dati INT e FLOAT

Codice-op mnemonici:•trasferimento: LOAD (RAM → CPU) e STORE (CPU → RAM)•aritmetiche: ADD,SUB,DIV,MULT,MOD,FADD,FSUB,FDIV,FMULT•input/output: READ (U-INP → CPU), WRITE (CPU → U-OUT)•test: COMP, FCOMP •salto: BREQ,BRGT,BRLT,BRGE,BRLE, BRANCH •terminazione: STOP

Stesso esempio del linguaggio macchina

Z : INT ; X : INT 38;Y : INT 8;LOAD R0 X;LOAD R1 Y;ADD R0 R1;STORE R0 Z;

dichiarazioni degli identificatori dei dati

istruzioni assembler

Esempio

carica due valori dalla RAM, li somma e mette il risultato al posto del maggiore dei 2 numeri sommati (nel caso siano uguali, non importa in quale dei due si mette la somma)

X: INT 38;Y: INT 8; LOAD R0 X; LOAD R1 Y; LOAD R2 X; ADD R2 R1; COMP R0 R1; BRGE pippo; STORE R2 Y; STOP;pippo: STORE R2 X; STOP;

Flowchart

LOAD R0 X;LOAD R1 Y;LOAD R2 X;ADD R2 R1;

R0 � R1?

STORE R2 X; STOP;

STORE R2 Y; STOP;

SI NO

test

Esempio

calcolare il resto della divisione di due numeri usando solo la sottrazione

X: int 356; Y: int 23; RESTO: int ; LOAD R0 X; LOAD R1 Y; ciclo: COMP R0 R1; BRLT fine; SUB R0 R1; BRANCH ciclo; fine: STORE R0 RESTO; STOP;

LOAD R0 X; LOAD R1 Y;

R0<R1?

SUB R0 R1;

NO

STORE R0 RESTO; STOP;

ciclo o iterazione

SI

Esempio potenza

Leggere un reale x ed un intero positivo n e calcolare la potenza xn

Esempio

X: FLOAT ;N: INT ;Ris: FLOAT ;Uno : INT 1;Unofl: FLOAT 1.0;READ STINP X;READ STINP N;LOAD R0 Uno; SUB R0 R0;LOAD R1 Uno;LOAD R2 X;LOAD R3 N;LOAD R4 Unofl;

R0 = 0 interoR1 = 1 intero

R4 = 1 reale

R2 = X realeR3 = N intero

Ciclo: COMP R3 R0; BREQ Esci; FMULT R4 R2; SUB R3 R1; BRANCH Ciclo;Esci: STORE R4 Ris; WRITE STOUT Ris; STOP;

R0 = 0 interoR1 = 1 intero

R4 = 1 realeR2 = X reale

R3 = N intero

R4 = XN-R3

R4 = XN

FMULT R4 R2;SUB R3 R1;

NO

ciclo o iterazione

SIR3 = R0?

Domande:

•quali sono le novità principali dell’Assembler rispetto al linguaggio macchina?

•in un programma assembler, perchè si attaccano etichette a certe istruzioni?

•come si chiama in Assembler l’istruzione che trasferisce una parola dalla RAM ad un registro della CPU? E quella che compie il trasferimento inverso?

•In assembler a cosa servono gli identificatori o variabili?