La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

Struttura del Computer

Presentazioni simili


Presentazione sul tema: "Struttura del Computer"— Transcript della presentazione:

1 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

2 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

3 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 =  0*23+ 0*22+ 0*21+ 0*20 1 =  0*23+ 0*22+ 0*21+ 1*20 2 =  0*23+ 0*22+ 1*21+ 0*20 6 =  0*23+ 1*22+ 1*21+ 0*20

4 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

5 Programma Alto Livello
Memoria i1 i+1 a i+n b c Dati Istruz. 1 ……… Istruz. n Istruz. 2 Progr. 100 200 i ** …. 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;

6 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)

7 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

8 Memoria (cont.) M E O R I A MDR = Memory Data Register
Unità di controllo ALU M E 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

9 Memoria Principale (cont.)
n bit Word 0 1 Word 1 2 Word 2 3 2 1 Byte n n-1 3 2 1 i • • • • • • • Word i 2k-1 Word 2k-1 Ogni word può contenere DATI (numeri, caratteri) o ISTRUZIONI

10 Numeri [-2.147.483.647,+2.147.483.647] Modulo e Segno Modulo
1 2 30 31 Bit di segno 0 = Positivo 1 = Negativo Modulo è espresso in notazione binaria posizionale Modulo = b30* 230+ b29* 229+…….+ b1* 21+ b0* 20 [ , ]

11 ? Numeri (cont.) AMBIGUITA’
Es: = 0* * 229+……+ 1* 25+ 0* 24+ 0* 23+ 0* 22+ 1* 21+ 1* 20 +35 = 1 1 1 -35 = 1 1 1 1 +0 = 1 ? -0 = AMBIGUITA’

12 ? Numeri (cont.) AMBIGUITA’ Complemento a 1:
Numeri Positivi = come modulo e segno Numeri Negativi = si invertono i bit del corrispondente positivo +35 = 1 1 1 -35 = 1 1 1 1 1 1 +0 = 1 ? -0 = AMBIGUITA’

13 Numeri (cont.) Complemento a 2: Numeri Positivi = come modulo e segno
Numeri Negativi = Complemento a 1 + 1 +35 = 1 1 1 -351 = 1 1 1 1 1 1 -352 = 1 1 1 1 1 1 1 +0 = 1 -01 = -02 =

14 Caratteri ASCII (7 bit) 32 bit Es: “ALBA” 3 2 1 8 bit 8 bit 8 bit
Carattere ASCII Carattere ASCII Carattere ASCII Carattere ASCII Es: “ALBA” 3 2 1 A B L A

15 Istruzioni Load a , r1 Add r1 , r2 Store r2 , b Opcode Operandi 32 bit
Indirizzo Operando 28 = 256 istruzioni

16 Problema 1 ? Da una configurazione binaria contenuta in una locazione di memoria, è possibile dire se si tratta di numero,carattere o istruzione ? NO Risposta?:

17 Convenzioni Minima unità indirizzabile è il Byte Big-Endian
1 2 30 31 31 30 29 1 Minima unità indirizzabile è il Byte 1 2 3 5 4 6 7 2k-3 2k-4 2k-2 2k-1 2 3 1 6 7 5 4 2k-2 2k-1 2k-3 2k-4 Big-Endian Little-Endian

18 Un calcolatore con memoria indirizzabile a Byte,
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 Quale sarà il contenuto Della memoria? N I F O M R A T 1004 2k-4 1000 C 1008

19 Accesso alla Memoria Fetch (Lettura) Store (Scrittura)
Copia il contenuto della memoria  CPU Store (Scrittura) CPU  Memoria

20 Linguaggi ad Alto Livello (Fortran, Cobol, C, C++, ecc.)
Linguaggi di Programmazione Linguaggi ad Alto Livello (Fortran, Cobol, C, C++, ecc.) Compilatore Assemblatore Linguaggio Macchina Assembler LOAD R0, R1

21 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

22 Istruzioni Trasferimento dati tra Memoria e CPU
Operazioni Aritmetiche e Logiche sui dati Controllo del flusso del programma Operazioni di I/O

23 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]

24 Istruzioni (cont.) C  [A] + [B] Istruzione a 3 Indirizzi ADD A,B,C
OpCode Source1,Source2,Destination

25 Istruzioni (cont.) C  [A] + [B] Istruzione a 2 Indirizzi
OpCode Source1,Destination ADD A,B  B  [A] + [B] ADD A B

26 Istruzioni (cont.) C  [A] + [B] MOVE B,C  C  [B]
ADD A,C  C  [A] + [C] MOVE B C ADD A

27 Istruzioni (cont.) C  [A] + [B] ADD A,B,C MOVE B,C  C  [B]
ADD A,C  C  [A] + [C] MOVE B C ADD A

28 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 R0 ADD R1 R2 Compilatore deve ottimizzare l’uso dei registri

29 L’altro operando è implicito. E’ un registro fissato della CPU
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] MOVE B ADD A C STORE

30 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

31 Esecuzione di Istruzioni
C  [A] +[B] MOVE A, R0 ADD B, R0 MOVE R0, C n bit i i+1 A i+2 MOVE A, R0 ADD B, R0 MOVE R0, C B C Dati Programma Esecuzione in 2 Fasi: Fetch dell’Istruzione Esecuzione dell’Istruzione

32 Sequenze Lineari • i i+1 i+2 i+n-1 i+n C NUM1 NUM2 MOVE NUM1, R0
ADD NUM2, R0 i+2 ADD NUM3, R0 i+n-1 ADD NUMn, R0 i+n MOVE R0, C C NUM1 NUM2

33 Controllo di Flusso: Salto
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

34 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

35 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

36 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

37 Modalità di Indirizzamento (cont.)
Indirizzamento indiretto (cont.) i MOVE (A), R0 A C C Operando

38 Modalità di Indirizzamento (cont.)
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

39 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).

40 Problema 5 ? Scrivere un programma per eseguire il calcolo Il valore n è memorizzato alla locazione N. Calcolare i valori di k1 e k2 nella formula k1+k2n Che rappresenta il numero di accessi alla memoria Per il programma scritto.

41 Verifica R1 R2 ADD #200, R2 ADD A, R2 MOV #A,R1 ADD (R1), 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

42 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. “

43 Soluzione Problema 6 CONT = K START MAX=0 Trovare il MAX di A
MAX < A(CONT) ? MAX=A(CONT) CONT = CONT-1 CONT > 0 ? SI NO MAX_A=MAX START Trovare il MAX di A Trovare il MAX di B Sommare i due MAX END

44 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

45 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]

46 R0  #K MOV #K, R0 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]

47 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

48 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 #B, R2 LOOP_B: MOV R1,R3 BRANCH < 0 STEP_B STEP_B: INC R2 BRANCH > 0 LOOP_B ADD MAX_A, R1 MOV R1,SOMMA

49 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]

50 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]

51 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: MOV #K,CONT MOV #0,MAX_B MOV #B,R0 LOOP_B: MOV MAX_B,R1 BRANCH < 0 STEP_B MOV R1,MAX_B STEP_B: INC R0 DEC R1 BRANCH = 0 OUT_B MOV R1,CONT BRANCH LOOP_B OUT_B: MOV MAX_A,R1 ADD MAX_B,R1 MOV R1,SOMMA

52 Altre Modalità di indirizzamento
Indirizzamento con autoincremento Indirizzo dell’operando è contenuto nel registro specificato. Dopo l’accesso all’operando, il contenuto del registro è Incrementato di 1 per puntare all’elemento successivo Della lista. ADD (R1)+, R0 Indirizzamento con autodecremento Il contenuto del registro è decrementato. Il nuovo Contenuto è usato come indirizzo dell’operando. ADD -(R1), R0

53 Altre Modalità di Indirizzamento (cont.)
Move #K, R1 Clear R0 Move #NUM1, R2 LOOP: Add (R2), R0 Inc R2 Dec R1 Branch > 0 LOOP Move R0,C Move #N, R1 Clear R0 Move #NUM1, R2 LOOP: Add (R2)+, R0 Dec R1 Branch > 0 LOOP Move R0,C

54 Altre Modalità di indirizzamento
Indirizzamento indicizzato Indirizzo dell’operando è ottenuto sommando un valore Costante (offset) al contenuto di un registro (registro indice) ADD 30(R0), R1 ADD 30(R0), R1 R0 R1 800 200 830 1000 500 Offset = 30

55 Altre Modalità di indirizzamento
Indirizzamento indicizzato Indirizzo dell’operando è ottenuto sommando un valore Costante (offset) al contenuto di un registro (registro indice) ADD 10(R1), R0 ADD (R1, R2) , R0 ADD 10(R1, R2) , R0

56 Una centralina metereologica ha 3 sensori:
Problema 7 ? NUM LISTA N Ora 1 Umidità Temperatura Pressione Ora 2 Ora N Una centralina metereologica ha 3 sensori: Temperatura, Pressione, Umidità. Ogni ora esegue le tre letture e le memorizza in locazioni di memoria consecutive. Il numero di letture effettuate è memorizzato in una locazione NUM. Scrivere un Programma che effettui la media Di tutte le misure relative allo stesso sensore.

57 Problema 7 (Soluzione) Mov #LISTA, R0 Mov NUM, R1 Clear R2 Clear R3 Clear R4 LOOP: Add 1(R0), R2 Add 2(R0), R3 Add 3(R0), R4 Add #4, R0 Dec R1 Branch > 0 LOOP Mov NUM, R1 Div R2, R1 Mov R1, MediaTemp Div R3, R1 Mov R1, MediaPress Div R4, R1 Mov R1, MediaUmid

58 Assemblatore Programma del sistema operativo che traduce la sequenza di istruzioni simboliche dell’utente (programma sorgente) in una sequenza di istruzioni in linguaggio macchina (programma oggetto). Esiste una corrispondenza 1 a 1 tra istruzioni Sorgenti e quelle oggetto. Ad 1 istruzione sorgente corrisponde 1 in linguaggio macchina

59 Assemblatore (cont.) C EQU 200 ORIGIN 201 N DATA 300 NUM1 RESERVE 300
100 MOVE N, R1 C EQU 200 ORIGIN 201 N DATA 300 NUM1 RESERVE 300 ORIGIN 100 START MOVE N,R1 MOVE #NUM1,R2 CLR R0 LOOP ADD (R2),R0 INC R2 DEC R1 BGTZ LOOP MOVE R0,C RETURN END START 101 MOVE #NUM1, R2 102 CLEAR R0 LOOP 103 ADD (R2) , R0 104 INC R2 105 DEC R1 106 Branch > 0 LOOP 107 MOVE R0, C 108 C 200 N 201 300 202 NUM1 203 NUM2 501 NUMK

60 Organizzazione dei dati
NUM LISTA N Ora 1 Umidità Temperatura Pressione Ora 2 Ora N LISTA o ARRAY

61 Organizzazione dei dati (cont.)
STACK o PILA E’ una lista di dati in cui gli elementi possono essere Inseriti o letti solo da una estremità (TOP). L’estremità Opposta è detta BOTTOM. LIFO (Last-In-First-Out)

62 Organizzazione dei dati: STACK
100 PUSH (Inserimento) Dec SP Move LOC,(SP) 101 102 100 Current TOP (Stack Pointer) 103 -38 104 25 105 738 106 15 107 1002 BOTTOM 108 200 POP (Estrazione) Move (SP),LOC Inc SP 200 201 202 203 501

63 Organizzazione dei dati: STACK
100 PUSH (Inserimento) Dec SP Move LOC,(SP) 101 102 100 SP 103 -38 104 25 105 738 106 15 107 1002 BOTTOM 108 200 LOC = 1000 SP= 102 200 201 202 203 501

64 Organizzazione dei dati: STACK
100 PUSH (Inserimento) Dec SP Move LOC,(SP) 101 SP 102 100 103 -38 104 25 105 738 106 15 107 1002 BOTTOM 108 200 LOC = 1000 SP= 101 200 201 202 203 501

65 Organizzazione dei dati: STACK
100 PUSH (Inserimento) Dec SP Move LOC,(SP) 101 1000 SP 102 100 103 -38 104 25 105 738 106 15 107 1002 BOTTOM 108 200 LOC = 1000 SP= 101 200 201 202 203 501

66 Organizzazione dei dati: STACK
100 POP (Estrazione) Move (SP),LOC Inc SP 101 102 100 SP 103 -38 104 25 105 738 106 15 107 1002 BOTTOM 108 200 LOC = 222 SP= 102 200 201 202 203 501

67 Organizzazione dei dati: STACK
100 POP (Estrazione) Move (SP),LOC Inc SP 101 102 100 SP 103 -38 104 25 105 738 106 15 107 1002 BOTTOM 108 200 LOC = 100 SP= 102 200 201 202 203 501

68 Organizzazione dei dati: STACK
100 POP (Estrazione) Move (SP),LOC Inc SP 101 102 100 103 -38 SP 104 25 105 738 106 15 107 1002 BOTTOM 108 200 LOC = 100 SP= 103 200 201 202 203 501

69 Organizzazione dei dati (cont.)
QUEUE o CODA E’ una lista di dati in cui gli elementi sono inseriti da una estremità (START) e letti da quella opposta è detta (END). FIFO (First-In-First-Out)

70 Organizzazione dei dati: QUEUE
100 PUSH (Inserimento) Inc END Move LOC,(END) 101 102 100 START 103 -38 104 25 105 738 106 15 107 1002 END 108 200 POP (Estrazione) Move (START),LOC Inc START 200 201 202 203 501

71 Organizzazione dei dati: QUEUE
100 PUSH (Inserimento) Inc END Move LOC,(END) 101 102 100 START 103 -38 104 25 105 738 106 15 107 1002 END 108 200 LOC = 1000 END = 108 200 201 202 203 501

72 Organizzazione dei dati: QUEUE
100 PUSH (Inserimento) Inc END Move LOC,(END) 101 102 100 START 103 -38 104 25 105 738 106 15 107 1002 108 200 109 END 200 LOC = 1000 END = 109 201 202 203 501

73 Organizzazione dei dati: QUEUE
100 PUSH (Inserimento) Inc END Move LOC,(END) 101 102 100 START 103 -38 104 25 105 738 106 15 107 1002 108 200 109 1000 END 200 LOC = 1000 END = 109 201 202 203 501

74 Organizzazione dei dati: QUEUE
100 POP (Estrazione) Move (START),LOC Inc START 101 102 100 START 103 -38 104 25 105 738 106 15 107 1002 END 108 200 LOC = 1000 START = 102 200 201 202 203 501

75 Organizzazione dei dati: QUEUE
100 POP (Estrazione) Move (START),LOC Inc START 101 102 100 START 103 -38 104 25 105 738 106 15 107 1002 END 108 200 LOC = 100 START = 102 200 201 202 203 501

76 Organizzazione dei dati: QUEUE
100 POP (Estrazione) Move (START),LOC Inc START 101 102 100 103 -38 START 104 25 105 738 106 15 107 1002 END 108 200 LOC = 100 START = 103 200 201 202 203 501

77 Organizzazione dei dati: QUEUE con Buffer Circolare
100 BufStart PUSH (Inserimento) Inc END Cmp END,BufEnd Branch > 0 INIT Move LOC,(END) Return INIT Move #BufStart,END 101 102 100 START 103 -38 104 25 105 738 106 15 107 1002 END 108 200 109 200 201 BufEnd 202 203 501

78 Organizzazione dei dati: QUEUE con Buffer Circolare
100 BufStart 101 102 100 START 103 -38 104 25 105 738 106 15 107 1002 END 108 200 POP (Estrazione) Move START,LOC Inc START Cmp START,BufEnd Branch > 0 INIT Return INIT Move #BufStart,START 109 200 201 BufEnd 202 203 501

79 SUBROUTINE Ordinamento decrescente di numeri positivi
max(int *a,int *ind) { int max; int i; max=a[0]; ind=0; for (i=1;i<5;i++) { if (a[i] > max) { max=a[i]; *ind=i; } return; main() { int lista[5]={5,10,4,7,3}; int ord[5]={0,0,0,0,0}; int pos=0; int posmax; int i; for (i=0;i<5;i++) { max(lista,&posmax); ord[pos]=lista[posmax]; pos++; lista[posmax]=0; }

80 SUBROUTINE PC Link Register 100 101 102 102 103 104 105 106 107 108
PC 101 102 Call MAX 102 103 Istruz. Success. 104 105 106 END 107 108 Link Register 109 200 Sub MAX Istruz. 1 201 202 Istruz. 2 203 Return 501

81 SUBROUTINE PC Link Register 100 101 102 102 103 104 105 106 103 107
PC 101 102 Call MAX 102 103 Istruz. Success. 104 105 106 END 103 107 108 Link Register 109 200 Sub MAX Istruz. 1 201 202 Istruz. 2 203 Return 501

82 SUBROUTINE PC Link Register 100 101 102 200 103 104 105 106 103 107
PC 101 102 Call MAX 200 103 Istruz. Success. 104 105 106 END 103 107 108 Link Register 109 200 Sub MAX Istruz. 1 201 202 Istruz. 2 203 Return 501

83 SUBROUTINE PC Link Register 100 101 102 103 103 104 105 106 103 107
PC 101 102 Call MAX 103 103 Istruz. Success. 104 105 106 END 103 107 108 Link Register 109 200 Sub MAX Istruz. 1 201 202 Istruz. 2 203 Return 501

84 SUBROUTINE 1 - Passaggio dei parametri 2 - Procedure Annidate PC
100 Call MAX 101 102 103 104 105 106 107 108 Return 200 201 202 203 501 109 END Istruz. Success. Sub MAX Call SUB1 Istruz. 2 Sub SUB1 1 - Passaggio dei parametri 2 - Procedure Annidate PC Link Register

85 SUBROUTINE PC 100 200 101 102 Call MAX 103 Istruz. Success. 104 105 STACK 106 END 107 108 109 200 Sub MAX 201 Call SUB1 202 Istruz. 2 203 Return 501 Sub SUB1 103 Bottom

86 SUBROUTINE PC 100 501 101 102 Call MAX 103 Istruz. Success. 104 105 STACK 106 END 107 108 109 200 Sub MAX 201 Call SUB1 202 Istruz. 2 203 Return 202 501 Sub SUB1 103 Bottom

87 SUBROUTINE Passaggio dei parametri main() { int lista[5]={5,10,4,7,3};
int ord[5]={0,0,0,0,0}; int pos=0; int posmax; int i; for (i=0;i<5;i++) { max(lista,&posmax); ord[pos]=lista[posmax]; pos++; lista[posmax]=0; } STACK posmax lista Indirizzo di ritorno Bottom

88 SUBROUTINE Passaggio dei parametri 100 Move #LISTA, -(SP)
101 Move N, -(SP) 102 Call LISTADD 103 Move 1(SP),SOMMA STACK 103 Top K LISTA Bottom

89 SUBROUTINE Passaggio dei parametri 100 Move #LISTA, -(SP)
101 Move N, -(SP) 102 Call LISTADD 103 Move 1(SP),SOMMA LISTADD Move_Mult R0-R2, -(SP) Move 4(SP),R1 Move 5(SP),R2 Clear R0 LOOP Add (R2)+,R0 Dec R1 Branch > 0 LOOP Move R0, 5(SP) Move_Mult (SP)+,R0-R2 Return [R2] Top [R1] [R0] 103 K LISTA Bottom

90 Riepilogo Organizzazione della Memoria e dei Registri
(lunghezza della word, big-endian,ecc.) Struttura delle istruzioni Metodo di Indirizzamento Organizzazione dei dati Controllo di flusso del programma

91 Motorola 68000

92 Motorola 68000:Memoria Lunghezza word = 16 bit
Gestisce anche i byte e le Longword (32 bit) word Byte Il ha 64 bit 16 bit per i dati 24 bit per indirizzi 24 bit per controllo e aliment. 1 2 15 8 2 224-2 Spazio indirizzamento 16 MB Big-Endian

93 Motorola 68000: Registri Longword A0 word Byte A1 D0 A2 D1 A3 D2 A4 D3
31 A0 A1 A2 A3 A4 A5 A6 A7 SP allo stack Utente SP allo Stack Supervisore SR

94 Motorola 68000: Indirizzamento
100 Istruzione 101 102 103 104 105 106 107 108 Array 2 200 201 202 203 501 109 END Istruz. Success. N Data Array 1 Array N Bval Rm PC Immediate #val Short Absolute val (word) Long Absolute val (Longword) Register Rn Indirect Register (An) Autoincrement (An)+ Autodecrement -(An) Indexed Wval(An) Extended Indexed Bval(An,Rm.S) Relative Wval(PC) Extended Relative Bval(PC,Rm.S)

95 Motorola 68000: Formato Istruzioni
ADD #9,D3 15 12 9 7 6 5 dst src opcode size Opcode ADD Registro 3 word Immediate D C D67C 9

96 Motorola 68000: Formato Istruzioni
63910 B=201152 -21510 201200 Opcode word MOVE A, D0 201202 20 201204 1150 201206 Opcode word 201208 20 ADD B, D0 20120A 1152 20120C Opcode word 20 MOVE D0, C 20120E 201210 2200 201212 C=

97 Motorola 68000: Assemblatore
EQU C EQU $ ORG ORG % DC.S A DC.W 639 A DC.L STR DC.L “ALBA” DS.S ARRAY DS.W 200 ARRAY DS.L 200

98 Motorola 68000: Controllo di Flusso
Status Register 0 = C (carry) 1 = V (overflow) 2 = Z (zero) 3 = N (negative) 4 = X (Extension) 8-10 = Interrupt mask 13 = S (Supervisor Mode) 15 = T (Trace Mode – Debugger) C=

99 Motorola 68000: Salti LOOP ADD.W (A2)+,D0 SUBQ.W #1, D1 BGT LOOP
1002 1004 1006 Opcode word Opcode -6 LOOP ADD.W (A2)+,D0 SUBQ.W #1, D1 BGT LOOP DBGT D1,LOOP LOOP ADD.W (A2)+,D0 DBGT D1,LOOP

100 Motorola 68000: Subroutine STACK MOVE.L PARAM1,-(A7)
2010 BSR SUB1 MOVE.L 4(A7),RISULTATO ADDI.L #8,A7 Prima Procedura 2100 SUB1 MOVEM.L D0-D2/A0-A1,-(A7) MOVEA.L 28(A7),A0 ……….. MOVE.L PARAM3,-(A7) BSR SUB2 ADDI.L #4,A7 ………. MOVE.L D2,28(A7) MOVEM.L (A7)+,D0-D2/A0-A1 RTS Seconda Procedura SUB2 MOVE.L D0,-(A7) MOVE.L (A7)+,D0 1046 STACK PARAM1 [D0] da SUB PARAM3 PARAM2 2012 2154 [D0] da SUB1 [D1] da SUB [D2] da SUB [A0] da SUB [A1] da SUB 1042 1038 1034 1030 1026 1022 1018 1014 1010 1006

101 PowerPC 601

102 PowerPC: Architettura
Instruction Management Unit Floating Point ALU Integer ALU CACHE RAM

103 PowerPC:Memoria Lunghezza word = 32 bit
Gestisce anche i byte, Halfword (16 bit), Doubleword (64 bit) Double word word Halfword 1 2 3 4 5 6 7 8 15 31 32 63 232-8 Big-Endian Spazio indirizzamento 4 GB

104 PowerPC: Registri FR0 FR1 • FR31 63 R0 CTR R1 31 R2 CR • 31 XER 31 R31
63 R0 CTR R1 31 R2 CR 31 XER 31 R31 LINK 31 31

105 PowerPC: Istruzioni Istruzioni che trasferiscono dati tra memoria e registri (Load e Store) Istruzioni Aritmetico-Logiche tra i registri R0-R31 (2 o 3 operandi) Istruzioni per il controllo di flusso Istruzioni in floating-point Istruzioni per il controllo del processore (Cache,I/O,ecc.)

106 PowerPC: Indirizzamento
Indexed HWval(Rn) Register Indexed (Rn,Rm)

107 PowerPC: Controllo di Flusso
31 CR 31 XER CR XER 0 = LT (1 se risultato < 0) 1 = GT (1 se risultato > 0) 2 = EQ (1 se risultato = 0) 3 = SO (Summary Overflow) 0 = SO (Summary Overflow) 1 = OV (Overflow) 2 = CA (Carry) C=

108 PowerPC: Salti B Salto Incondizionato all’indirizzo specificato
BC Salto all’indirizzo specificato se verificata la condizione (BGT, BLT, BEQ, BNE, ecc.) Indirizzamento nel salto Relativo offset con l’istruzione destinaz. Specificata Assoluto destinazione Specificata Indiretto a Registro destinaz. Specificata in registro

109 PowerPC: Subroutine Non esiste una istruzione specifica di chiamata a subroutine. Esiste una istruzione di ritorno (BLR) Ogni istruzione di salto memorizza l’indirizzo di ritorno nel LINK Register Per le procedure annidate e passaggio dei parametri, ad ogni procedura È riservata un area sullo stack (stack frame) a gestione della procedura

110 IA-32

111 IA-32: Evoluzione 8086-8088 (1978): 16 bit , segmentation
80286 (1982): 24 bit, protected mode, virtual memory 80386 (1985): 32 bit, parallelism 80486 (1989): more parallelism, cache, FPU Pentium (1993): two pipeline, more cache, data paths da 128 e 256 bits, dual processor Pentium P6 ( ): (Pro, II, Celeron, III, III Xeon): two cache, more pipeline, MMX, SIMD Pentium 4 ( ) (4, Xeon, M): Netburst, Hyperthreading

112 IA-32:Memoria Lunghezza word = 32 bit
Gestisce anche i byte, Halfword (16 bit), doubleword (64 bit), Fpword (80-bit) word Halfword Spazio indirizzamento 4 GB 3 2 1 4 31 15 Memoria Segmentata 232-4 Little-Endian

113 IA-32: Operating Mode Protected Mode: 64GB di Memoria
Real Address Mode: 4GB Memoria System Management Mode

114 IA-32: Registri General Purpose Register Segment Register EAX EBX ECX
EDX EBP ESP ESI EDI AL AH AX Segment Register CS DS ES FS GS SS 16 31 EFLAGS EIP

115 IA-32: Indirizzamento Immediate Es: ADD EAX ,14
Register All Register (EAX,AX,AL,AH) Memory: Segment Selector (CS,SS,DS,ES) Indirizzo nel segmento (Offset) MOV ES:[EBX], EAX

116 IA-32: Indirizzamento (cont.)
Offset (Indirizzo effettivo): Base + (index*scale)+displacement Base = registro (EAX,EBX,ECX,EDX,ESP,EBP,ESI,EDI) Index = registro (EAX,EBX,ECX,EDX,EBP,ESI,EDI) Scale = numero (1,2,4,8) Displacement = numero (none, 8-bit, 16-bit, 32-bit)

117 IA-32: Istruzioni General Purpose Instructions FPU e SIMD Instructions
MMX Instructions SSE,SSE2,SSE3 Instructions System Instructions

118 IA-32: controllo di flusso
Condizioni verificate con EFLAGS register bits

119 IA-32: Subroutine CALL e RET (Near CALL, far CALL) ENTER e LEAVE

120 IA-32: Program Template TITLE <nome programma> (templat.asm)
; Autore ; Data ; Revisione INCLUDE <nome file> .data < dichiarazioni dei dati> .code main PROC < istruzioni> Main ENDP < procedure> END main

121 Esempio: somma e differenza (versione 2)
TITLE Somma e Sottrai (addsub.asm) ; Questo programma somma e sottrae tre interi .code main PROC mov eax, 10000h ; Eax= 10000h add eax, 40000h ; Eax = Eax+40000h sub eax, 20000h ; Eax = Eax-20000h main ENDP END main

122 Esempio: somma e differenza
TITLE Somma e Sottrai (versione2) (addsub2.asm) ; Questo programma somma e sottrae tre interi .data val1 DWORD h val2 DWORD h val3 DWORD h risul DWORD ? .code main PROC mov eax, val1 ; Eax= 10000h add eax, val2 ; Eax = Eax+40000h sub eax, val3 ; Eax = Eax-20000h mov risul,eax main ENDP END main

123 IA-32: Altri comandi Costanti const EQU 100 const = 100 Array
list BYTE ,20,30,40 var2 DWORD 10 DUP(0) var2 DWORD 10 DUP(?)

124 Esempio: somma e differenza in Real-address mode
TITLE Somma e Sottrai (versione2) (addsub2.asm) ; Questo programma somma e sottrae tre interi .data val1 DWORD h val2 DWORD h val3 DWORD h risul DWORD ? .code main PROC mov mov ds,ax mov eax, val1 ; Eax= 10000h add eax, val2 ; Eax = Eax+40000h sub eax, val3 ; Eax = Eax-20000h mov risul,eax main ENDP END main


Scaricare ppt "Struttura del Computer"

Presentazioni simili


Annunci Google