Corso di Calcolatori Elettronici I A.A. 2011-2012 Architettura di un calcolatore: introduzione Lezione 18 Prof. Antonio Pescapè Università degli Studi di Napoli Federico II Facoltà di Ingegneria Corso di Laurea in Ingegneria Informatica Calcolatore: sottosistemi • Processore o CPU (Central Processing Unit) • Memoria centrale • Sottosistema di input/output (I/O) CPU I/O Memoria Calcolatore: organizzazione a bus da: G. Bucci. Calcolatori Elettronici – Architettura e organizzazione. © McGraw-Hill, 2009 Il processore o CPU Unità di controllo Unità AritmeticoLogica (ALU) Registri Processore o CPU CPU: struttura interna Il funzionamento della CPU è scandito dal clock. da: G. Bucci. Calcolatori Elettronici – Architettura e organizzazione. © McGraw-Hill, 2009 CPU: struttura interna (2) n Componenti q Unità di controllo n n n q q registro Program Counter (PC) o Prossima Istruzione Instruction Register o registro di decodifica (IR o D) registri di Macchina Unità aritmetico-logica (ALU) Sezione di Collegamento con la memoria n n q fondamentali del processore: registro degli indirizzi di memoria o Memory Address Register MAR registro di transito dei dati dalla memoria DTR o Memory Buffer MB Sezione di Collegamento con Ingresso-Uscita n Il linguaggio macchina di un processore è costituito dalla codifica in binario delle istruzioni eseguibili dal processore 6 Registri della CPU Ø Registri interni » Necessari al funzionamento del processore » Non direttamente visibili al programmatore » non appartengono al modello di programmazione » Es. MAR, MDR/DTR, IR, … Ø Registri di macchina » Visibili al programmatore » appartengono al modello di programmazione § Registri generali (R0, R1, Rn-1) § Registri speciali (PC, SR, …) Unità Aritmetico-Logica (ALU) • L Unità di controllo fornisce alla ALU gli operandi, insieme ad un comando che indica l operazione da effettuare • Gli operandi sono copiati nei registri di ingresso della ALU (O1, O2) • La ALU esegue l operazione e pone il risultato nel registro risultato (U); inoltre, altera il valore dei flag del registro di stato (SR) in funzione del risultato O1 + - * / U O2 Modello architetturale di un processore MEMORIA Modello a registri generali CPU MAR DTR Collegamento memoria IR o D Collegamento I/O Unità di Controllo R0 R1 RI PC ... RU SR Rn-1 O1 O2 ALU U CPU: struttura interna ad 1 bus da: G. Bucci. Calcolatori Elettronici – Architettura e organizzazione. © McGraw-Hill, 2009 La memoria centrale Ø Ø Ø La memoria centrale di un computer è organizzata come un array di stringhe di bit di lunghezza m, dette locazioni Gli m bit di una locazione sono accessibili dal processore (in lettura/scrittura) mediante un unica operazione Ogni locazione è individuata da un indirizzo, cioè un intero compreso tra 0 e N-1, con N = 2k » [0, N-1] = SPAZIO DI INDIRIZZAMENTO Ø La memoria centrale è ad accesso casuale (RAM) cioè il tempo di accesso non dipende dalla posizione del dato bit 7 msb bit 0 lsb 0 1 2 .. .. N-2 N-1 m=8 Processori a carattere e processori a parola • I processori a carattere accedono alla memoria con parallelismo 1 byte (8 bit) – prime CPU ad accumulatore • I processori a parola hanno la capacità di indirizzare ed accedere la memoria per unità (parole o word) di 16 bit, 32 bit o 64 bit • In questi sistemi (tranne pochissime eccezioni nel passato) l unità indirizzabile di memoria (locazione) è ancora il byte – Si parla di sistemi a memoria byte-addressable: ogni byte ha il suo indirizzo • Terminologia Motorola 68000: word = 2 byte, longword = 4 byte Big-endian e little-endian • I processori a parola possono disporre in memoria i byte che formano una parola in due modi Disposizione BIG_ENDIAN Byte3 Byte2 Byte1 Byte0 MSB – Big-endian: LSB i byte sono disposti in memoria in modo che il più significativo MSB Indirizzi crescenti occupi la locazione di memoria di indirizzo minore, e poi via via gli altri, Disposizione LITTLE ENDIAN fino a quello meno significativo LSB Byte0 LSB che è collocato nella locazione di Byte1 indirizzo maggiore Byte2 Byte3 – Little-endian: disposizione opposta MSB • Il processore Motorola 68000 usa la convenzione Big Endian Indirizzi crescenti Big-endian e little-endian: un esempio • Immaginiamo di avere un processore a parola, con parole di 32 bit (4 byte) e voler scrivere in memoria il valore intero (esadecimale) $12FA34ED all indrizzo 812 • Le figure sottostanti illustrano il contenuto della memoria nei due casi big-endian e little-endian … 12 FA 34 ED … indirizzo … indirizzo big-endian ED 34 FA 12 … little-endian Memoria: parole allineate e non Per un processore a parola di 16 bit, una parola che inizia ad un indirizzo pari si dice allineata sul limite di parola Ø Tipicamente, un tale processore è in grado di accedere ai due byte che costituiscono una parola allineata mediante una sola operazione di lettura Ø Il processore 8086 consente l’utilizzo di parole non allineate, cioè parole che iniziano ad un indirizzo dispari, in tal caso sono necessari 2 distinti accessi in memoria (uno per X+1 e uno per X+2) Ø Il processore 68000 NON consente l accesso a parole non allineate Ø Parola X X X+1 Parola X+2 X+2 X+3 (X pari) X+1 La parola (X+1) non è allineata sul limite di parola X+2 Interazione processore-memoria read Memoria Address bus k bit MA write Data bus p bit MB CPU Unità di controllo del processore Processore a registri generali Il processore dispone di un set di registri R0, R1, ...., RN-1 utilizzabili indifferentemente dal programmatore Ø Le istruzioni che operano su registri sono più veloci di quelle che operano su locazioni di memoria Ø Il programmatore può utilizzare i registri del processore per memorizzare i dati di uso più frequente Ø concetto di gerarchia di memorie Ø Istruzioni con operandi registri: [R0] + [R1] → R1 Ø Istruzioni con operandi memoria-registri: [R0] + M[1000] → R0 memory-to-register M[1000] + [R1] → M[1000] register-to-memory Ø Algoritmo del Processore • Prelievo dell istruzione (Fetch) – La CPU preleva dalla memoria l istruzione il cui indirizzo è in PC – L istruzione viene copiata nel registro IR • Decodifica / prelievo degli operandi (Operand Assembly) – L unità di controllo esamina il contenuto di IR e ricava il tipo di operazione ed i relativi operandi – Eventuali operandi contenuti in memoria vengono prelevati • Esecuzione dell istruzione (Execute) – L unità di controllo richiede all ALU di effettuare l operazione specificata nell istruzione ed invia il risultato ad un registro o alla memoria Algoritmo del processore n L unità di controllo opera in un ciclo infinito: 1. Prelievo 2. Preparazione degli operandi 3. Esecuzione Nella fase di bootstrap il ciclo viene inizializzato; viene assegnato un valore iniziale opportuno a PC in modo da avviare l esecuzione di un programma iniziale in ROM Bootstrap Instruction fetch Operand assembly Execute Fase fetch • IR=M[PC]; PC=PC+k PC 00 0000 1000 MAR 00 0000 1000 0100 0000 0001 0000 DTR 0100 0000 0001 0000 00 0000 1000 Memoria centrale IR 0100 0000 0001 0000 Codice operativo Fase fetch: sottopassi da: G. Bucci. Calcolatori Elettronici – Architettura e organizzazione. © McGraw-Hill, 2009 Esecuzione sequenziale delle istruzioni • Alla fine della fase fetch: i • PC=PC+k i+1 • k = lunghezza istruzioni in byte i+2 • serve a far sì che PC punti all istruzione Area codice posta subito dopo • Esecuzione delle istruzioni in sequenza Area dati così come sono memorizzate • Per cicli e figure di controllo (if-then, if-then-else, switch) occorrono istruzioni di salto ISTR1 ISTR2 ISTR3 A B C Codifica delle istruzioni ESEMPIO: una CPU con istruzioni a lunghezza fissa di 32 bit LD R1, Var ; R1 ß M[Var] ADD R1, R2, R3 ; R1 ß R2 + R3 da: G. Bucci. Calcolatori Elettronici – Architettura e organizzazione. © McGraw-Hill, 2009 Sequenze di istruzioni in memoria Lo statement a = b + c si traduce come: LD R2, B ;B indirizzo a cui è allocata la parola b LD R3, C ;C indirizzo a cui è allocata la parola c ADD R1, R2, R3 ST A, R1 ;A indirizzo a cui è allocata la parola a da: G. Bucci. Calcolatori Elettronici – Architettura e organizzazione. © McGraw-Hill, 2009 Architettura del processore MC68000 32 PC 32 EAR Interfaccia memoria ed I/O Bus di 16 16 x Registri 32 IR generali D0-D7, A0-A7 Control unit TEMP 32 8 ALU memoria e di I/O SR 8 CCR Architettura del processore Organizzazione Motorola 68000 MC68000 Holds address of the next instruction to be executed Program Counter (PC) 32 If necessary Holds the address of memory reads/writes Effective Address Register (EAR) 32 Internal Bus Instruction Register(IR) 16 Instruction Decode and Control General Registers D0..D7 A0..A6 A7= User Stack pointer (USP) A7’=Supervisor Stack Pointer(SSP) 32 Memory and I/O Interface Control Pipeline Temporary Register External Bus Holds first word of currently executing instruction 32 Holds operands or intermediate results Performs all logical or arithmetic operations ( ADD, SHIFT, etc. ) Arithmetic and Logic Unit (ALU) 32 8 CCR SR Holds result of ALU Operations Caratteristiche del processore MC68000 • Dati: – All esterno: parola di 16 bit (16 pin per i dati) – All interno: registri di 32 bit • Indirizzi: – All esterno: 24 bit (spazio di indirizzamento fisico 224 = 16M) • 512 pagine (29) da 32K (215) – All interno: 32 bit Caratteristiche del processore MC68000 • Parallelismo della memoria: – Parole di 16 bit, ognuna costituita da due byte con indirizzi distinti (memoria byte addressable) • Convenzioni della memoria: – Una parola deve essere allineata ad un indirizzo pari (even boundary) – Convenzione big-endian Modello di programmazione del MC68000 31 16 15 8 7 0 D0 D1 D2 D3 D4 D5 D6 D7 T S I2 I1 I0 A0 A1 A2 A3 A4 A5 A6 A7 PC X N Z V C SR Status register Status Register ! Contiene: ! La interrupt mask (8 livelli) ! I codici di condizione (CC) - oVerflow (V), Zero (Z), Negative (N), Carry (C), e eXtend (X) ! Altri bit di stato - Trace (T), Supervisor (S) ! I Bits 5, 6, 7, 11, 12, e 14 non sono definiti e sono riservati per espansioni future Formato delle istruzioni assembly • Le istruzioni assembly sono tipicamente costituite da un codice mnemonico seguito da uno o più operandi. • Ad esempio, le istruzioni a due operandi per il trasferimento e le operazioni aritmetiche sui dati sono tipicamente nella forma: Operazione Sorgente,Destinazione • Per esempio, per effettuare la somma tra due numeri si potrà scrivere: ADD A,B • Questo comando realizza la somma di A e B e porrà il risultato dell’operazione in B sovrascrivendone il contenuto corrente. Formato Istruzioni del 68000 • La prima word di una istruzione è chiamata Opcode word – Tutte le informazioni necessarie per decodificare un’istruzione sono nell’ Opcode Word – Contiene un opcode (cosa fa) – Contiene zero,uno o due effective address fields (EA) • L’istruzione completa in memoria può contenere l’ opcode word ed altre word di istruzioni addizionali – Un’istruzione può richiedere fino a 5 word di memoria • La forma generale della istruzione assembly è la seguente: Label OP CODE sorgente, destinazione *Comment Formato e Codifica istruzioni MC68000 Si analizza qui solo la struttura della prima word (16 bit) del codice di una istruzione, detta OPCODE WORD Esempio: l’istruzione MOVE • Volendo realizzare una copia del contenuto di un registro in un altro, ad esempio, il linguaggio assembly potrebbe richiedere di scrivere: MOVE R0,SOMMA • Il codice mnenonico, in questo caso MOVE, rappresenta l’azione svolta dall’istruzione. • L’assemblatore traduce questo codice mnemonico in un codice binario di forma comprensibile al calcolatore, di solito chiamato codice operativo (OP-CODE). • Segue almeno uno spazio bianco dopo il quale sono riportate le informazioni che specificano gli operandi. MOVE (MOVE) • L’istruzione più comunemente usata per il movimento dati è MOVE • Muove - Copia da una sorgente a una destinazione MOVE [sorgente], [Destinazione] • Esempio MOVE.W D2, $1300 • copia il contenuto del registro D2 nell'area di memoria di indirizzo esadecimale 1300 L’istruzione MOVE • Istruzioni di movimento dati tipiche del 68000 sono: MOVE Di, Dj MOVE M, Di MOVE Di, M MOVEA - utilizza semre registri indirizzi come destinazione e non impatta lo Status Register MOVEQ - (quick move) utilizzata per il movimento di valori piccoli (fino a 8 bits, i.e. -127 to +127) nei registri dati (e.g. MOVEQ.B #3,D3) Operazioni Aritmetiche Operazioni aritmetiche operazione sorgente, destinatario che tipicamente funziona come segue: destinatario ? sorgente → destinatario dove ? È una delle operazioni aritmetiche (+,-,* or /) e.g. ADD D0,D1 D1 + D0 → D1 SUB D0,D1 D1 - D0 → D1 MUL D0,D1 D1 * D0 → D1 DIV D0,D1 D1 / D0 → D1 ADD (ADD) • Aggiungi - Aggiunge un valore a una destinazione ADD [valore], [Destinazione] • Esempio ADD D1, SOMMA • aggiunge il contenuto del registro D1 nella variabile di memoria SOMMA Gli operandi • Nel nostro esempio, l’operando sorgente è nel registro D1. • Questa informazione è seguita dall’indicazione dell’operando destinazione, separato da quello sorgente attraverso una virgola. • L’operando destinazione è nella locazione di memoria il cui indirizzo è rappresentato dal nome simbolico SOMMA. • Per creare questa associazione, ogni nome deve essere opportunamente definito nell’ambito del listato creando così un’associazione SIMBOLO -> INDIRIZZO. Natura degli operandi • Gli operandi forniti come argomento di un’istruzione possono contenere informazioni di tipo differente. • Può accadere che l’operando contenga direttamente il valore utile per il calcolo. In questo caso si parla di operando immediato ed esso è direttamente codificato di seguito all’istruzione. • In altri casi l’operando contiene il riferimento ad un registro del processore il quale può contenere, a sua volta, il dato o (ancora) l’indirizzo di un registro della memoria in cui è contenuto il dato. Natura degli operandi: esempio. • Nell istruzione ADD #9,D0 il primo operando è di tipo immediato. Il suo valore viene codificato in memoria direttamente assieme all’istruzione. Il secondo operando è un registro interno del processore. • Nell istruzione ADD D0,D1 entrambi gli operandi sono riferimenti a registri interni. • L’istruzione ADD D0,#9 è priva di senso dal momento che l’operando destinazione non specifica una locazione di memoria in cui porre il risultato dell’operazione. Esempio: la somma di due registri in un terzo • Supponiamo di voler realizzare l’istruzione C++ C = A + B; • Questa istruzione ha lo scopo di sommare il contenuto delle locazioni di memoria individuate dagli identificatori A e B e, successivamente, di porre il risultato della somma nella locazione di memoria individuata dall’identificatore C. • Se il linguaggio assembly rende disponibile esclusivamente un’istruzione per la somma a due operandi (come in genere accade), non è possibile realizzare l’elaborazione in un unico passo, ma bisognerà scrivere: MOVE B,C ADD A,C Registri interni e memoria (1) • Un’istruzione, in generale, può coinvolgere sia i registri interni che i registri della memoria. • L’accesso ai registri interni è molto più veloce dell’accesso ai registri della memoria, poiché i primi sono già all’interno del processore e non sorge dunque la necessità di trasferimenti attraverso canali esterni. • Inoltre, i registri interni sono in numero molto minore delle celle di memoria (tipicamente da 8 a 64) e quindi per essere indirizzati c’è bisogno di pochi bit. Registri interni e memoria (2) • Ad esempio, un processore che abbia 32 registri interni, può indirizzarli utilizzando 5 bit. • Poiché l’uso di registri interni permette elaborazioni più rapide e produce istruzioni più corte, essi sono usati per memorizzare dati temporanei nella CPU durante l’elaborazione. • In alcuni casi, determinati comandi assembler possono operare esclusivamente su registri interni; operazioni su registri di memoria non sono ammesse e, su necessità, bisogna esplicitamente provvedere al trasferimento dei dati tra la memoria e i registri interni. Esempio: codifica di un’istruzione (1) • A titolo esemplificativo prendiamo in considerazione l’istruzione ADD #9,D3 • che che ha come effetto la somma di 910 al contenuto del registro D3 e la memorizzazione del risultato di nuovo in D3. • Nel caso del M68000: – il comando ADD da sorgente a registro dati si codifica con 1101---0-----– L’indice del registro si codifica con ----011--------– La modalità operando immediato si codifica con ----------111100 – La dimensione dell’operando (di default word) si codifica con: --------01------ • La stringa completa dà: 1101 011 0 01 1111002 = D67C16 Esempio: codifica di un istruzione (2) • L assembler 68000 permette di specificare il tipo di dato a cui si sta facendo riferimento, aggiungendo un suffisso allo mnemonico del istruzione: .B per dati di tipo byte .W per dati di tipo word .L per dati di tipo long. • Esempio: MOVE.W DO, D1 Esempio di file list PLC 00000000 00000000 00008000 00008000 00008006 0000800C 00008012 00008018 0000801E 00008024 00008028 0000802A 00008030 00008030 00008032 00008034 00008034 label contenuto 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 4279 00008032 3039 00008034 33C0 00008030 D079 00008032 33C0 00008032 3039 00008030 0640 FFFF 66E2 4EF9 00008008 =00008008 =00000011 0011 opcode operands comments * Somma i primi 17 interi * ORG $8000 START CLR.W SUM MOVE.W ICNT,D0 ALOOP MOVE.W D0,CNT ADD.W SUM,D0 MOVE.W D0,SUM MOVE.W CNT,D0 ADD.W #-1,D0 BNE ALOOP JMP SYSA SYSA EQU $8008 CNT DS.W 1 SUM DS.W 1 IVAL EQU 17 ICNT DC.W IVAL Symbol Table ALOOP START 800C 8000 CNT SUM 8030 8032 IVAL ICNT 0011 8034 Programma caricato in memoria Codifica istruzioni MC68000