La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

Struttura del Computer Unità di Input Unità di Output Memoria Unità Logico- Aritmetica (ALU) Unità di Controllo I/O CPU o Processore LUnità di Input accetta.

Presentazioni simili


Presentazione sul tema: "Struttura del Computer Unità di Input Unità di Output Memoria Unità Logico- Aritmetica (ALU) Unità di Controllo I/O CPU o Processore LUnità di Input accetta."— Transcript della presentazione:

1 Struttura del Computer Unità di Input Unità di Output Memoria Unità Logico- Aritmetica (ALU) Unità di Controllo I/O CPU o Processore LUnità di Input accetta informazioni codificate dallOperatore Tale informazione può essere memorizzata o elaborata dallALU La sequenza di passi necessaria ad elaborare linformazione Viene determinata da un programma residente in memoria I risultati sono presentati allesterno tramite le unità di Output Tutte queste operazioni sono coordinate dallunità di controllo

2 Istruzioni e Dati Istruzioni ( o istruzioni macchina) Sono comandi che: Governano il trasferimento di Informazioni sia allinterno del computer sia tra computer e dispositivi di I/O Specificano le operazioni Aritmetico-Logiche da effettuare Uninsieme 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 = * * * *2 0 1 = * * * *2 0 2 = * * * *2 0 6 = * * * *2 0

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

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 2 k numeri nellintervallo 0 – (2 k –1) 2 k = Spazio di indirizzamento Es: k=24 S.I. = 2 24 word 16 Mword k=32 S.I. = 2 32 word 4 Gword

8 Memoria (cont.) MEMORIAMEMORIA Unità di controllo ALU R0R0 R1R1 R n-1 MDRMDR MARMAR PCPC IRIR MDR = Memory Data Register MAR = Memory Address Register PC = Program Counter IR = Instruction Register ….. CPU

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

10 Numeri Modulo e Segno Modulo Bit di segno 0 = Positivo 1 = Negativo Modulo è espresso in notazione binaria posizionale Modulo = b 30 * b 29 * …….+ b 1 * b 0 * 2 0 [ , ]

11 Es: 35 = 0* * ……+ 1* * * * * * = -35 = Numeri (cont.) = -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 = = -0 = ?

13 Numeri (cont.) Complemento a 2: Numeri Positivi = come modulo e segno Numeri Negativi = Complemento a = = = = = =

14 Caratteri ASCII (7 bit) 32 bit 8 bit Carattere ASCII Carattere ASCII Carattere ASCII Carattere ASCII Es: ALBA BALA 0 123

15 Istruzioni 32 bit 8 bit24 bit OpCode Indirizzo Operando 2 8 = 256 istruzioni Load a, r1 Add r1, r2 Store r2, b Opcode Operandi

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 k -32 k -42 k -22 k k -4 Minima unità indirizzabile è il Byte k -22 k -12 k -32 k Big-Endian Little-Endian

18 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? NIFO MRAT k -4 … 1000 ICA 1008

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

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

21 Istruzioni Istruzioni ( o istruzioni macchina) Sono comandi che: Governano il trasferimento di Informazioni sia allinterno del computer sia tra computer e dispositivi di I/O Specificano le operazioni Aritmetico-Logiche da effettuare Uninsieme 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 R 0, R 1, ACCUM, IOSTAT, IOREAD Trasferimento dati R 0 [LOC] Operazioni C = A + B C [A] + [B]

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

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

26 Istruzioni (cont.) C [A] + [B] MOVE B,C C [B] ADD A,C C [A] + [C] MOVEB C ADDA C

27 Istruzioni (cont.) C [A] + [B] MOVE B,C C [B] ADD A,C C [A] + [C] MOVEB C ADDA C ADD A,B,C ADDA B C

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 R 0, R 1, R 2 R0R0 ADDR1R1 R2R2 Compilatore deve ottimizzare luso dei registri

29 Istruzioni (cont.) Istruzioni ad 1 Operando OpCode Source OpCode Destination Laltro operando è implicito. E un registro fissato della CPU (ACCUMULATORE) C [A] + [B] MOVE B ACC [B] ADD A ACC [A] + [ACC] STORE C C [ACC] MOVEB ADDA CSTORE

30 Problema 3 ? Scrivere un Programma che valuti lespressione: 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, R 0 ADD B, R 0 MOVE R 0, C Programma n bit i i+1 A i+2 MOVE A, R 0 ADD B, R 0 MOVE R 0, C B C Dati Esecuzione in 2 Fasi: Fetch dellIstruzione Esecuzione dellIstruzione

32 Sequenze Lineari i i+1 i+n-1 i+2 MOVE NUM 1, R 0 ADD NUM 2, R 0 MOVE R 0, C C NUM 2 ADD NUM 3, R 0 ADD NUM n, R 0 i+n NUM 1

33 Controllo di Flusso: Salto i i+1 LOOP MOVE N, R 1 CLEAR R 0 MOVE R 0, C C NUM 2 Determino lindirizzo del NUM successivo ed Eseguo ADD NUM,R 0 DEC R 1 NUM 1 Branch > 0 LOOP NUM K NK

34 Controllo di Flusso: Condizioni Registro di Stato NZVC N = 1 Loperazione corrente produce un risultato negativo Z = 1 Loperazione corrente produce un risultato zero V = 1 Loperazione corrente produce un overflow C = 1 Loperazione corrente produce un riporto

35 Modalità di indirizzamento Indirizzamento a Registro Operando contenuto in un registro della CPU. Il nome del registro è specificato nellistruzione ADD A, R 0 Indirizzamento Assoluto Operando è una locazione di memoria. Lindirizzo della locazione è specificato nellistruzione ADD A, R 0

36 Modalità di indirizzamento (cont.) Indirizzamento immediato Operando definito esplicitamente nellistruzione. ADD #200, R 0 Indirizzamento indiretto Indirizzo delloperando è contenuto in un registro o una locazione di memoria (puntatori). ADD (A), R 0

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

38 Modalità di Indirizzamento (cont.) i i+1 LOOP MOVE N, R 1 CLEAR R 0 MOVE R 0, C C NUM 2 Determino lindirizzo del NUM successivo ed Eseguo ADD NUM,R 0 DEC R 1 NUM 1 Branch > 0 LOOP NUM K NK Move N, R 1 Clear R 0 Move #NUM 1, R 2 LOOP: Add (R 2 ), R 0 Inc R 2 Dec R 1 Branch > 0 LOOP Move R 0,C

39 Problema 4 ? Scrivere un programma per eseguire il calcolo C = A 1 *B 1 + A 2 *B 2 + A 3 *B 3 a)Programma che esegue una sequenza lineare b)Scrivere un programma con ciclo c)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 k 1 e k 2 nella formula k 1 +k 2 n Che rappresenta il numero di accessi alla memoria Per il programma scritto.

41 Verifica R1 R2 100 C=1500 A= ADD #200, R2 ADD A, R2 MOV #A,R1 ADD (R1), R2 ADD (C), R

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 Trovare il MAX di A Trovare il MAX di B Sommare i due MAX START END CONT = K MAX=0 MAX < A(CONT) ? MAX=A(CONT) CONT = CONT-1 CONT > 0 ? SI NO SI NO MAX_A=MAX

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

45 CONT = K MAX=0 MAX < A(CONT) ? MAX=A(CONT) CONT = CONT-1 CONT > 0 ? SI NO SI NO MAX_A=MAX R1 #0 R3 < 0 ? R1 [(R2)] R2 [R2] + 1 NO SI NO R0 #K R2 #A R3 R1-[(R2)] R0 [R0] - 1 R0 > 0 ? SI MAX_A [R1]

46 R1 #0 R3 < 0 ? R1 [(R2)] R2 [R2] + 1 SI NO R0 #K R2 #A R3 [(R2)] – R1 R0 [R0] - 1 R0 > 0 ? SI MAX_A [R1] MOV #K, R0 MOV #0, R1 MOV #A, R2 LOOP_A: SUB (R2), R1, R3 BRANCH < 0 STEP_A MOV (R2), R1 STEP_A: INC R2 DEC R0 BRANCH > 0 LOOP_A MOV R1,MAX_A

47 MOV #K, R0 MOV #0, R1 MOV #A, R2 LOOP_A: SUB (R2), R1, 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 #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

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 #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

49 R1 #0 R3 < 0 ? R1 [(R2)] R2 [R2] + 1 SI NO R0 #K R2 #A R3 [(R2)] – R1 R0 [R0] - 1 R0 > 0 ? SI MAX_A [R1] MAX_A #0 R1 < 0 ? R1 [(R0)] R0 [R0] + 1 SI NO CONT #K R0 #A R1 [(R0)] – R1 R1 [CONT] R1 > 0 ? SI R1 [MAX_A] MAX_A [R1] R1 [R1] - 1 CONT [R1]

50 MAX_A #0 R1 < 0 ? R1 [(R0)] R0 [R0] + 1 SI NO CONT #K R0 #A R1 [(R0)] – R1 R1 [CONT] R1 > 0 ? SI R1 [MAX_A] MAX_A [R1] R1 [R1] - 1 CONT [R1] 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:

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 SUB (R0),R1 BRANCH < 0 STEP_B MOV (R0),R1 MOV R1,MAX_B STEP_B: INC R0 MOV CONT,R1 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 delloperando è contenuto nel registro specificato. Dopo laccesso alloperando, il contenuto del registro è Incrementato di 1 per puntare allelemento successivo Della lista. ADD (R 1 )+, R 0 Indirizzamento con autodecremento Il contenuto del registro è decrementato. Il nuovo Contenuto è usato come indirizzo delloperando. ADD -(R 1 ), R 0

53 Altre Modalità di Indirizzamento (cont.) Move #K, R 1 Clear R 0 Move #NUM 1, R 2 LOOP: Add (R 2 ), R 0 Inc R 2 Dec R 1 Branch > 0 LOOP Move R 0,C Move #N, R 1 Clear R 0 Move #NUM 1, R 2 LOOP: Add (R 2 )+, R 0 Dec R 1 Branch > 0 LOOP Move R 0,C

54 Altre Modalità di indirizzamento Indirizzamento indicizzato Indirizzo delloperando è ottenuto sommando un valore Costante (offset) al contenuto di un registro (registro indice) ADD 30(R 0 ), R 1 R0R0 R1R Offset = 30

55 Altre Modalità di indirizzamento Indirizzamento indicizzato Indirizzo delloperando è ottenuto sommando un valore Costante (offset) al contenuto di un registro (registro indice) ADD 10(R 1 ), R 0 ADD (R 1, R 2 ), R 0 ADD 10(R 1, R 2 ), R 0

56 Problema 7 ? 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. NUM LISTA N Ora 1 Umidità Temperatura Pressione Ora 2 Temperatura Pressione Umidità Ora N Temperatura Pressione Umidità

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

58 Assemblatore Programma del sistema operativo che traduce la sequenza di istruzioni simboliche dellutente (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.) 100 LOOP MOVE N, R 1 MOVE #NUM1, R 2 MOVE R 0, C N NUM2 DEC R 1 NUM1 Branch > 0 LOOP NUMK C 300 CLEAR R 0 ADD (R 2 ), R 0 INC R CEQU200 ORIGIN201 NDATA300 NUM1RESERVE300 ORIGIN100 STARTMOVE N,R1 MOVE #NUM1,R2 CLRR0 LOOPADD(R2),R0 INCR2 DECR1 BGTZLOOP MOVER0,C RETURN ENDSTART

60 Organizzazione dei dati NUM LISTA N Ora 1 Umidità Temperatura Pressione Ora 2 Temperatura Pressione Umidità Ora N Temperatura Pressione Umidità 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). Lestremità Opposta è detta BOTTOM. LIFO (Last-In-First-Out)

62 100 BOTTOM Organizzazione dei dati: STACK Current TOP (Stack Pointer) PUSH (Inserimento) Dec SP Move LOC,(SP) POP (Estrazione) Move (SP),LOC Inc SP

63 100 BOTTOM Organizzazione dei dati: STACK SP PUSH (Inserimento) Dec SP Move LOC,(SP) LOC = 1000 SP= 102

64 100 BOTTOM Organizzazione dei dati: STACK SP PUSH (Inserimento) Dec SP Move LOC,(SP) LOC = 1000 SP= 101

65 100 BOTTOM Organizzazione dei dati: STACK SP PUSH (Inserimento) Dec SP Move LOC,(SP) LOC = 1000 SP=

66 100 BOTTOM Organizzazione dei dati: STACK SP POP (Estrazione) Move (SP),LOC Inc SP LOC = 222 SP= 102

67 100 BOTTOM Organizzazione dei dati: STACK SP POP (Estrazione) Move (SP),LOC Inc SP LOC = 100 SP= 102

68 100 BOTTOM Organizzazione dei dati: STACK SP POP (Estrazione) Move (SP),LOC Inc SP LOC = 100 SP= 103

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 100 END Organizzazione dei dati: QUEUE START PUSH (Inserimento) Inc END Move LOC,(END) POP (Estrazione) Move (START),LOC Inc START

71 100 END Organizzazione dei dati: QUEUE START PUSH (Inserimento) Inc END Move LOC,(END) LOC = 1000 END = 108

72 100 END Organizzazione dei dati: QUEUE START PUSH (Inserimento) Inc END Move LOC,(END) LOC = 1000 END =

73 100 END Organizzazione dei dati: QUEUE START PUSH (Inserimento) Inc END Move LOC,(END) LOC = 1000 END =

74 100 END Organizzazione dei dati: QUEUE START POP (Estrazione) Move (START),LOC Inc START LOC = 1000 START = 102

75 100 END Organizzazione dei dati: QUEUE START POP (Estrazione) Move (START),LOC Inc START LOC = 100 START = 102

76 100 END Organizzazione dei dati: QUEUE START POP (Estrazione) Move (START),LOC Inc START LOC = 100 START = 103

77 100 END Organizzazione dei dati: QUEUE con Buffer Circolare START PUSH (Inserimento) Inc END Cmp END,BufEnd Branch > 0 INIT Move LOC,(END) Return INITMove #BufStart,END Move LOC,(END) Return 109 BufStart BufEnd

78 100 END Organizzazione dei dati: QUEUE con Buffer Circolare START POP (Estrazione) Move START,LOC Inc START Cmp START,BufEnd Branch > 0 INIT Return INITMove #BufStart,START Return 109 BufStart BufEnd

79 SUBROUTINE Ordinamento decrescente di numeri positivi 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; } 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; }

80 SUBROUTINE 100 Call MAX Return END Istruz. Success. Sub MAX Istruz. 1 Istruz. 2 PC Link Register 102

81 SUBROUTINE 100 Call MAX Return END Istruz. Success. Sub MAX Istruz. 1 Istruz. 2 PC Link Register

82 SUBROUTINE 100 Call MAX Return END Istruz. Success. Sub MAX Istruz. 1 Istruz. 2 PC Link Register

83 SUBROUTINE 100 Call MAX Return END Istruz. Success. Sub MAX Istruz. 1 Istruz. 2 PC Link Register 103

84 SUBROUTINE PC Link Register 100 Call MAX Return END Istruz. Success. Sub MAX Call SUB1 Istruz. 2 Sub SUB1 1 - Passaggio dei parametri 2 - Procedure Annidate

85 SUBROUTINE 100 Call MAX Return END Istruz. Success. Sub MAX Call SUB1 Istruz. 2 Sub SUB1 Bottom STACK PC

86 SUBROUTINE 100 Call MAX Return END Istruz. Success. Sub MAX Call SUB1 Istruz. 2 Sub SUB1 Bottom STACK PC

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; } Bottom STACK Indirizzo di ritorno lista posmax

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

89 SUBROUTINE Passaggio dei parametri 100Move #LISTA, -(SP) 101Move N, -(SP) 102Call 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 Bottom LISTA K 103 Top [R0] [R1] [R2]

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

91 Motorola68000

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

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

94 Motorola 68000: Indirizzamento Immediate#val Short Absolute val (word) Long Absoluteval (Longword) RegisterRn Indirect Register(An) Autoincrement(An)+ Autodecrement-(An) IndexedWval(An) Extended IndexedBval(An,Rm.S) RelativeWval(PC) Extended RelativeBval(PC,Rm.S) 100 Istruzione Array END Istruz. Success. N Data Array 1 Array N Bval Rm PC

95 Motorola 68000: Formato Istruzioni ADD #9,D dstsrcopcodesize Opcode ADD Registro 3 word Immediate D 6 7 C 9

96 Motorola 68000: Formato Istruzioni A= B= C 20120E A Opcode word Opcode word C= MOVE A, D0 ADD B, D0 MOVE D0, C

97 Motorola 68000: Assemblatore EQUCEQU$ ORGORG% DC.SADC.W 639 ADC.L STRDC.LALBA DS.S ARRAYDS.W 200 ARRAYDS.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 LOOP Opcode word Opcode-6 DBGTD1,LOOP LOOPADD.W (A2)+,D0 DBGTD1,LOOP

100 Motorola 68000: Subroutine 2000 MOVE.LPARAM1,-(A7) 2006 MOVE.LPARAM2,-(A7) 2010BSRSUB MOVE.L4(A7),RISULTATO 2018 ADDI.L#8,A7 Prima Procedura 2100 SUB1MOVEM.LD0-D2/A0-A1,-(A7) 2104 MOVEA.L28(A7),A0 ……….. MOVE.LPARAM3,-(A7) 2150 BSRSUB ADDI.L#4,A7 ………. MOVE.LD2,28(A7) MOVEM.L(A7)+,D0-D2/A0-A1 RTS Seconda Procedura 3000 SUB2MOVE.L D0,-(A7) MOVE.L(A7)+,D0 RTS 1046 STACK PARAM1 [D0] da SUB PARAM3 PARAM [D0] da SUB1 [D1] da SUB [D2] da SUB [A0] da SUB [A1] da SUB

101 PowerPC601

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

103 PowerPC:Memoria Lunghezza word = 32 bit Gestisce anche i byte, Halfword (16 bit), Doubleword (64 bit) Big-Endian 150 Halfword word Spazio indirizzamento 4 GB Double word

104 PowerPC: Registri FR0 FR1 FR31 R0 R1 R2 R CR XER 031 CTR LINK

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 IndexedHWval(Rn) Register Indexed(Rn,Rm)

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

108 PowerPC: Salti BSalto Incondizionato allindirizzo specificato BCSalto allindirizzo specificato se verificata la condizione (BGT, BLT, BEQ, BNE, ecc.) Indirizzamento nel salto Relativooffset con listruzione destinaz. Specificata Assolutodestinazione Specificata Indiretto a Registrodestinaz. 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 lindirizzo 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 (1978): 16 bit, segmentation (1982): 24 bit, protected mode, virtual memory (1985): 32 bit, parallelism (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) Little-Endian 1531 Halfword word Spazio indirizzamento 4 GB 10 Memoria Segmentata

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

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

115 IA-32: Indirizzamento Immediate Es: ADD EAX,14 RegisterAll 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 (templat.asm) ; Autore ; Data ; Revisione INCLUDE.data.code main PROC Main ENDP 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 10000h val2 DWORD 40000h val3 DWORD 20000h 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 10,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 10000h val2 DWORD 40000h val3 DWORD 20000h 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 Unità di Input Unità di Output Memoria Unità Logico- Aritmetica (ALU) Unità di Controllo I/O CPU o Processore LUnità di Input accetta."

Presentazioni simili


Annunci Google