1.24k likes | 1.49k Views
Struttura del Computer. Unità Logico- Aritmetica (ALU). Unità di Input. Memoria. Unità di Output. Unità di Controllo. I/O. CPU o Processore. L’ Unità di Input accetta informazioni codificate dall’Operatore. Tale informazione può essere memorizzata o elaborata dall’ ALU.
E N D
Struttura del Computer Unità Logico- Aritmetica (ALU) Unità di Input Memoria Unità di Output Unità di Controllo I/O CPU o Processore L’Unità di Input accetta informazioni codificate dall’Operatore Tale informazione può essere memorizzata o elaborata dall’ALU La sequenza di passi necessaria ad elaborare l’informazione Viene determinata da un programma residente in memoria I risultati sono presentati all’esterno tramite le unità di Output Tutte queste operazioni sono coordinate dall’unitàdi controllo
Istruzioni e Dati Istruzioni ( o istruzioni macchina) Sono comandi che: Governano il trasferimento di Informazioni sia all’interno del computer sia tra computer e dispositivi di I/O Specificano le operazioni Aritmetico-Logiche da effettuare Un’insieme di istruzioni che svolgono un determinato compito è un PROGRAMMA
Istruzioni e Dati (cont.) I DATI sono numeri o caratteri codificati (estesa) Ogni numero, carattere o istruzione è codificata con una Una stringa di cifre binarie dette BIT (BInary digiT) Ognuno dei quali può assumere il valore 0 oppure 1 0 = 0000 0*23+ 0*22+ 0*21+ 0*20 1 = 0001 0*23+ 0*22+ 0*21+ 1*20 2 = 0010 0*23+ 0*22+ 1*21+ 0*20 6 = 0110 0*23+ 1*22+ 1*21+ 0*20
Programma Alto Livello main() { int a,b,i; int c[100]; char *p; a=100; b=200; a=a+b; for (i=0;i<100;i++) { c[i]=a+i; } b=0; } load a,r1 load b,r2 add r1,r2 store r2,a I1 PC PC MAR UC (Read: Load a,r1) MDR MDR IR a MAR UC (Read: a) MDR MDR R1
Programma Alto Livello Memoria Istruz. 1 i1 i+1 Istruz. 2 Progr. ……… i+n Istruz. n 100 a 200 b i Dati ** c ** c+1 …. …. c+100 ** main() { int a,b,i; int c[100]; char *p; a=100; b=200; a=a+b; for (i=0;i<100;i++) { c[i]=a+i; } b=0; }
Sommario • Quali sono le istruzioni definite (Instruction Set) • Come si definiscono i dati • Come si accede ai dati da programma (Indirizzamento) • Come si cambia in flusso di esecuzione di un programma • in base a risultati di operazioni aritmetico-logiche (salti, condizioni)
Memoria Principale Composta di Celle di 1 BIT Accesso a gruppi di n BIT (word) Ogni Operazione elementare legge o scrive 1 word n = Lunghezza della word ([16-64]) n=32 Ogni word ha associato un indirizzo che è un numero binario a k BIT k bit 2k numeri nell’intervallo 0 – (2k –1) 2k = Spazio di indirizzamento Es: k=24 S.I. = 224 word 16 Mword k=32 S.I. = 232 word 4 Gword
Memoria (cont.) Unità di controllo ALU M E M O R I A M D R ….. R0 R1 Rn-1 M A R P C I R CPU MDR = Memory Data Register MAR = Memory Address Register PC = Program Counter IR = Instruction Register
Memoria Principale (cont.) n bit Word 0 0 1 Word 1 2 Word 2 3 2 1 0 Byte n n-1 3 2 1 0 i • • • • • • • Word i 2k-1 Word 2k-1 Ogni word può contenere DATI (numeri, caratteri) o ISTRUZIONI
31 30 2 1 0 Numeri Modulo e Segno Modulo Bit di segno 0 = Positivo 1 = Negativo Modulo è espresso in notazione binaria posizionale Modulo = b30* 230+ b29* 229+…….+ b1* 21+ b0* 20 [-2.147.483.647,+2.147.483.647]
0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 Numeri (cont.) Es: 35 = 0* 230+ 0* 229+……+ 1* 25+ 0* 24+ 0* 23+ 0* 22+ 1* 21+ 1* 20 +35 = 0 0 0 1 0 0 0 1 1 -35 = 1 0 0 1 0 0 0 1 1 +0 = ? -0 = AMBIGUITA’
0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 Numeri (cont.) Complemento a 1: Numeri Positivi = come modulo e segno Numeri Negativi = si invertono i bit del corrispondente positivo +35 = 0 0 0 1 0 0 0 1 1 -35 = 1 1 1 0 1 1 1 0 0 +0 = ? -0 = AMBIGUITA’
-02 = +0 = -01 = 0 1 0 0 0 1 0 0 1 1 0 0 0 1 0 1 0 0 1 0 0 0 0 1 1 0 0 Numeri (cont.) Complemento a 2: Numeri Positivi = come modulo e segno Numeri Negativi = Complemento a 1 + 1 +35 = 0 0 0 1 0 0 0 1 1 -351 = 1 1 1 0 1 1 1 0 0 -352 = 1 1 1 0 1 1 1 0 1
Caratteri ASCII (7 bit) 32 bit 8 bit 8 bit 8 bit 8 bit Carattere ASCII Carattere ASCII Carattere ASCII Carattere ASCII Es: “ALBA” 3 2 1 0 A B L A
Istruzioni Load a , r1 Add r1 , r2 Store r2 , b Opcode Operandi 32 bit 8 bit 24 bit OpCode Indirizzo Operando 28 = 256 istruzioni
Problema 1 ? 0100111000011010101011110000100 Da una configurazione binaria contenuta in una locazione di memoria, è possibile dire se si tratta di numero,carattere o istruzione ? NO Risposta?:
Convenzioni 31 0 30 1 2 29 1 30 31 0 0 0 3 0 2 1 1 2 3 0 7 4 6 5 6 5 4 7 4 4 2k-4 2k-4 2k-1 2k-4 2k-3 2k-2 2k-2 2k-3 2k-4 2k-1 Minima unità indirizzabile è il Byte Big-Endian Little-Endian
0 … 1000 I N F O 1004 R M A T 1008 I C A 2k-4 Problema 2 ? Un calcolatore con memoria indirizzabile a Byte, Organizzato con word di 32 bit secondo lo schema Big-Endian. Se un programma legge da tastiera la parola “INFORMATICA” e la memorizza in byte consecutivi a partire dalla locazione 1000. Quale sarà il contenuto Della memoria?
Accesso alla Memoria Fetch (Lettura) Copia il contenuto della memoria CPU Store (Scrittura) CPU Memoria
00100010 0000000110001000010000 Linguaggi di Programmazione Linguaggi ad Alto Livello (Fortran, Cobol, C, C++, ecc.) Compilatore Assemblatore Linguaggio Macchina Assembler LOAD R0,R1
Istruzioni Istruzioni ( o istruzioni macchina) Sono comandi che: Governano il trasferimento di Informazioni sia all’interno del computer sia tra computer e dispositivi di I/O Specificano le operazioni Aritmetico-Logiche da effettuare Un’insieme di istruzioni che svolgono un determinato compito è un PROGRAMMA
Istruzioni • Trasferimento dati tra Memoria e CPU • Operazioni Aritmetiche e Logiche sui dati • Controllo del flusso del programma • Operazioni di I/O
Istruzioni (cont.) Indirizzi in memoria A, B, LOC, VAR Registri R0, R1, ACCUM, IOSTAT, IOREAD Trasferimento dati R0 [LOC] Operazioni C = A + B C [A] + [B]
ADD A B C Istruzioni (cont.) C [A] + [B] Istruzione a 3 Indirizzi ADD A,B,C OpCode Source1,Source2,Destination
ADD A B Istruzioni (cont.) C [A] + [B] Istruzione a 2 Indirizzi OpCode Source1,Destination ADD A,B B [A] + [B]
MOVE B C ADD A C Istruzioni (cont.) C [A] + [B] MOVE B,C C [B] ADD A,C C [A] + [C]
ADD A B C MOVE B C ADD A C Istruzioni (cont.) C [A] + [B] ADD A,B,C MOVE B,C C [B] ADD A,C C [A] + [C]
ADD R0 R1 R2 Istruzioni (cont.) Registri Ogni CPU ne ha da 8 a 64 8 registri 3 bit per indirizzarli 64 registri 6 bit per indirizzarli • Sono più veloci • Indirizzamento con numero minore di bit ADD R0, R1, R2 Compilatore deve ottimizzare l’uso dei registri
MOVE B ADD A STORE C Istruzioni (cont.) Istruzioni ad 1 Operando OpCode Source OpCode Destination L’altro operando è implicito. E’ un registro fissato della CPU (ACCUMULATORE) MOVE B ACC [B] ADD A ACC [A] + [ACC] STORE C C [ACC] C [A] + [B]
Problema 3 ? Scrivere un Programma che valuti l’espressione: A*B + C*D In un processore con Accumulatore, ipotizzando che esistano le istruzioni: Load, Store, Add, Multiply
n bit i MOVE A, R0 i+1 ADD B, R0 i+2 MOVE R0, C A B Dati C Esecuzione di Istruzioni C [A] +[B] MOVE A, R0 ADD B, R0 MOVE R0, C Programma Esecuzione in 2 Fasi: Fetch dell’Istruzione Esecuzione dell’Istruzione
Sequenze Lineari i MOVE NUM1, R0 i+1 ADD NUM2, R0 i+2 ADD NUM3, R0 • • • i+n-1 ADD NUMn, R0 i+n MOVE R0, C C NUM1 NUM2
Controllo di Flusso: Salto i MOVE N, R1 i+1 CLEAR R0 LOOP Determino l’indirizzo del NUM successivo ed Eseguo ADD NUM,R0 DEC R1 Branch > 0 LOOP MOVE R0, C N K C NUM1 NUM2 • • NUMK
Controllo di Flusso: Condizioni Registro di Stato C V Z N N = 1 L’operazione corrente produce un risultato negativo Z = 1 L’operazione corrente produce un risultato zero V = 1 L’operazione corrente produce un overflow C = 1 L’operazione corrente produce un riporto
Modalità di indirizzamento Indirizzamento a Registro Operando contenuto in un registro della CPU. Il nome del registro è specificato nell’istruzione ADD A, R0 Indirizzamento Assoluto Operando è una locazione di memoria. L’indirizzo della locazione è specificato nell’istruzione ADD A, R0
Modalità di indirizzamento (cont.) Indirizzamento immediato Operando definito esplicitamente nell’istruzione. ADD #200, R0 Indirizzamento indiretto Indirizzo dell’operando è contenuto in un registro o una locazione di memoria (puntatori). ADD (A), R0
Modalità di Indirizzamento (cont.) Indirizzamento indiretto (cont.) i MOVE (A), R0 • • • A C C Operando
Modalità di Indirizzamento (cont.) i MOVE N, R1 i+1 CLEAR R0 LOOP Determino l’indirizzo del NUM successivo ed Eseguo ADD NUM,R0 Move N, R1 Clear R0 Move #NUM1, R2 LOOP: Add (R2), R0 Inc R2 Dec R1 Branch > 0 LOOP Move R0,C DEC R1 Branch > 0 LOOP MOVE R0, C N K C NUM1 NUM2 • • NUMK
Problema 4 ? • Scrivere un programma per eseguire il calcolo • C = A1*B1 + A2*B2 + A3*B3 • Programma che esegue una sequenza lineare • Scrivere un programma con ciclo • Calcolare il numero di accessi alla memoria • richiesti sia per a) che b).
Problema 5 ? Scrivere un programma per eseguire il calcolo Il valore n è memorizzato alla locazione N. Calcolare i valori di k1 e k2nella formula k1+k2n Che rappresenta il numero di accessi alla memoria Per il programma scritto.
Verifica R1 200 R2 500 100 ADD #200, R2 ADD A, R2 • • 1000 100 MOV #A,R1 ADD (R1), R2 A=1200 1500 C=1500 1000 ADD (C), R2
Problema 6 ? Avere un gran numero di registri riduce Gli accessi alla memoria? Suggerire un semplice problema computazionale Che evidenzi ciò e mostrare la validità su una Macchina con 2 registri ed una con 4. “ Dati due array di k numeri A e B trovare il massimo di A ed il massimo di B e sommare i due massimi. “
CONT = K MAX=0 SI MAX < A(CONT) ? MAX=A(CONT) NO CONT = CONT-1 SI CONT > 0 ? NO MAX_A=MAX Soluzione Problema 6 START Trovare il MAX di A Trovare il MAX di B Sommare i due MAX END
Soluzione Problema 6 CONT = K START MAX=0 SI Trovare il MAX di A MAX < B(CONT) ? MAX=B(CONT) NO Trovare il MAX di B CONT = CONT-1 Sommare i due MAX SI CONT > 0 ? NO END MAX_B=MAX
R0 #K CONT = K R1 #0 MAX=0 R2 #A SI MAX < A(CONT) ? R3 R1-[(R2)] SI MAX=A(CONT) NO R3 < 0 ? R1 [(R2)] NO CONT = CONT-1 R2 [R2] + 1 SI CONT > 0 ? R0 [R0] - 1 NO SI R0 > 0 ? MAX_A=MAX NO MAX_A [R1]
MOV #K, R0 R0 #K R1 #0 MOV #0, R1 R2 #A MOV #A, R2 R3 [(R2)] – R1 LOOP_A: SUB (R2), R1, R3 NO BRANCH < 0 STEP_A R3 < 0 ? R1 [(R2)] MOV (R2), R1 SI STEP_A: INC R2 R2 [R2] + 1 DEC R0 R0 [R0] - 1 SI BRANCH > 0 LOOP_A R0 > 0 ? NO MOV R1,MAX_A MAX_A [R1]
MOV #K, R0 MOV #K, R0 MOV #0, R1 MOV #0, R1 MOV #A, R2 MOV #A, R2 LOOP_A: SUB (R2), R1, R3 LOOP_A: MOV R1,R3 SUB (R2), R3 BRANCH < 0 STEP_A BRANCH < 0 STEP_A MOV (R2), R1 MOV (R2), R1 STEP_A: INC R2 STEP_A: INC R2 DEC R0 DEC R0 BRANCH > 0 LOOP_A BRANCH > 0 LOOP_A MOV R1,MAX_A MOV R1,MAX_A
MOV #K, R0 MOV #0, R1 MOV #A, R2 LOOP_A: MOV R1,R3 SUB (R2), R3 BRANCH < 0 STEP_A MOV (R2), R1 STEP_A: INC R2 DEC R0 BRANCH > 0 LOOP_A MOV R1,MAX_A MOV #K, R0 MOV #0, R1 MOV #B, R2 LOOP_B: MOV R1,R3 SUB (R2), R3 BRANCH < 0 STEP_B MOV (R2), R1 STEP_B: INC R2 DEC R0 BRANCH > 0 LOOP_B ADD MAX_A, R1 MOV R1,SOMMA
R0 #K CONT #K MAX_A #0 R1 #0 R0 #A R2 #A R1 [MAX_A] R3 [(R2)] – R1 R1 [(R0)] – R1 NO R3 < 0 ? NO R1 < 0 ? R1 [(R2)] SI R1 [(R0)] SI R2 [R2] + 1 MAX_A [R1] R0 [R0] + 1 R0 [R0] - 1 R1 [CONT] SI R0 > 0 ? R1 [R1] - 1 NO NO SI MAX_A [R1] R1 > 0 ? CONT [R1]
CONT #K MAX_A #0 R0 #A R1 [MAX_A] MOV #K,CONT MOV #0,MAX_A MOV #A,R0 LOOP_A: MOV MAX_A,R1 SUB (R0),R1 BRANCH < 0 STEP_A MOV (R0),R1 MOV R1,MAX_A STEP_A: INC R0 MOV CONT,R1 DEC R1 BRANCH = 0 OUT_A MOV R1,CONT BRANCH LOOP_A OUT_A: R1 [(R0)] – R1 NO R1 < 0 ? R1 [(R0)] SI MAX_A [R1] R0 [R0] + 1 R1 [CONT] R1 [R1] - 1 NO SI R1 > 0 ? CONT [R1]