Sezione |
Indirizzi Base
Registri Interni
|
Capitolo 1 |
Il Processore e il Debugger |
PROCESSORE 80x86 13/14 [24 di 60] |
|
Aggiornato 22 maggio 2007 |
|
Sulla base della figura della pagina precedente cerchiamo di capire come il nostro processore riesca ad assumere ed eseguire i bytes del programma che è chiamato ad interpretare. | |
Vale la pena di ricordare che i programmi che un processore può eseguire non sono altro che una sequenza di bytes, freddi numeri binari da noi espressi (per nostra comodità) in esadecimale. | |
Questi bytes sono di solito raccolti uno dopo l'altro nella memoria, puntigliosamente definita di programma (per distinguerla da quella usata, nell'ambito dell'esecuzione, per altri scopi, come lo stack o le tabelle di dati o variabili di vario tipo); la memoria di programma può essere la classica RAM ma anche la memoria a sola lettura (ROM) della scheda madre (BIOS) o della scheda video o di qualche altro dispositivo. | |
Di sicuro c'è il fatto che il primo byte sarà sempre un codice operativo, cioè un byte che rappresenta un'istruzione da eseguire; ad esso potrà seguire un altro OpCode, ma anche uno o più bytes di dato, come succede per molte tra le possibili istruzioni che il processore è in grado di eseguire. |
|
Poiché un byte (8 bit) può assumere 256 (28) diversi valori può sembrare che un processore sia in grado di eseguire solo 256 diverse operazioni... troppo poche per le ambizioni di un buon processore; è questa la ragione per la quale le varie istruzioni sono spesso definite da più di un codice operativo. | |
Già con 2 OpCode si possono potenzialmente codificare 65536 (216) diverse istruzioni, ora decisamente troppe; la verità sta nel mezzo: non tutte le combinazioni possibili dei bit dei codici operativi multipli corrispondono ad altrettante istruzioni! |
|
In pratica il rapporto tra
CPU e istruzione da eseguire è
piuttosto articolato:
|
|
Per comprendere in che modo ciò sia possibile dobbiamo imparare a conoscerlo intimamente; dobbiamo ...aprire la scatola magica! | |||||||
Come detto tutto il processo comincia nell'unità di interfaccia con i bus,
Bus Interface Unit, BIU:
|
|
Questa sequenza (compito della BIU) è nota con il nome di pre-fetch (fase precedente al prelievo del codice operativo); la BIU continua (in modo autonomo e distinto dalla EU) ad eseguire il pre fetch, ripetendo velocemente tutto da capo subito dopo aver incrementato il registro IP, e continuando a stoccare i bytes letti dalla memoria, uno dopo l'altro, nella coda delle istruzioni. | |
In questo modo EU (che analizziamo tra un attimo) trova sempre bytes pronti ad essere eseguiti. |
|
L'idea geniale per ottimizzare i tempi è la coda delle istruzioni: mentre la BIU si occupa di inserirvi i bytes letti dalla memoria la EU li estrae e li consuma traducendo in fatti il comando binario ricevuto. Fin tanto che la coda è piena si tagliano così i tempi morti. |
|
Il vantaggio è reale solo se i bytes (prelevati dalla memoria e presenti nella coda) sono relativi ad istruzioni consecutive; se la EU è costretta ad eseguire istruzioni di salto, la BIU svuota completamente la coda e la riempie da capo con i bytes della sequenza di istruzioni che comincia al nuovo indirizzo, il chè costringe la EU ad attendere un po'... | |
E' facile capire che questo processo trae enorme vantaggio dalla presenza di una cache interna (in pratica una specie di coda a da 8kBytes fino a 64kBytes). |
|
Dunque, mentre la BIU prepara la materia prima (nella coda delle istruzioni) l'unità di esecuzione, Execution Unit, EU), si occupa di interpretare i bytes prelevati in sequenza dalla medesima coda, cioè di eseguire l'istruzione. |
|
La sua
Unità di
Controllo di Esecuzione provvede ad
organizzare tutto il lavoro, che prevede 2 fasi distinte:
|
|
Non appena l'unità di controllo ha capito, parte la fase di execute, una incombenza tipica dell'altra parte fondamentale (con i registri) della EU: l'Unità Aritmetico Logica (ALU); il nome di questa struttura sottolinea la assoluta semplicità dei compiti che un processore è in grado di eseguire. |
|
Nonostante l'enfasi diffusa sulla potenza dei
processori (per altro indiscutibile..) si sottolinea per l'ennesima volta
che le sue capacità operative sono effettivamente elementari:
somme, differenze, prodotti e divisioni, qualche
funzione logica (and, or, xor), qualche manipolazione
di numeri binari (rotazioni e scorrimenti di bytes); niente che ciascuno di
noi non possa fare altrettanto bene senza particolare difficoltà.... ... Solo che il processore fa questo in meno di miliardesimo di secondo! |
|
Capitolo 1 | PROCESSORE 80x86 13/14 | |||||||
24 di 60 |
|
|
|
|
Home |
|
|||||||
|
Motore Ricerca |
|