Sezione

Indirizzi Base Registri Interni
Area Comunicazione BIOS Funzioni BIOS Funzioni DOS
Prefazione Capitolo 1 Capitolo 2 Schede
Libreria ASM Libreria MAC Palestra Progetti ASM
Info Download INDICE

Capitolo 1

Home » Programma il Computer » Tutorial Assembly

Capitolo 1 - Il processore - Il Debugger

  Il Processore e il Debugger

PROCESSORE 80x86 13/14 [24 di 60] 

    

           Aggiornato 22 maggio 2007
    Architettura interna [segue]
     
bulletSulla 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.
bulletVale 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.
bulletQuesti 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.
bulletDi 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.

      

bulletPoiché 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.
bulletGià 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!

      

bulletIn pratica il rapporto tra CPU e istruzione da eseguire è piuttosto articolato:
bulletl'istruzione non è dentro il processore (.. non ancora..): è conservata in memoria, sotto forma di uno o più bytes consecutivi.
bulletil processore deve recuperare ciascun byte dalla memoria, ricostruendo l'indirizzo della locazione corrispondente, con l'aiuto del contenuto dei registri CS e IP.
bulletsolo quando l'informazione è dentro di lui può procedere all'interpretazione del codice operativo e dei suoi eventuali operandi, cioè all'esecuzione dell'istruzione.
bulletin ogni caso il processore per fare questo dovrà attivare tutte le sue risorse per tradurre in fatti gli ordini ricevuti.

      

bulletPer comprendere in che modo ciò sia possibile dobbiamo imparare a conoscerlo intimamente; dobbiamo ...aprire la scatola magica!
bulletCome detto tutto il processo comincia nell'unità di interfaccia con i bus, Bus Interface Unit, BIU:
bulletil suo primo compito consiste nella ricostruzione (con l'aiuto del suo sommatore interno) dell'indirizzo fisico a partire da quello logico, suggerito dal contenuto dei 2 registri puntatori di codice, CS:IP, con il meccanismo descritto in precedenza.
bulletnon appena l'indirizzo è pronto e disponibile sul bus address interno la logica di controllo dei bus lo trasferisce anche su quello esterno, attivando anche le linee di controllo necessarie alla lettura di memoria.
bulletdopo i tempi tipici della Ram di sistema (qualche nanosecondo) la memoria mette sul bus dati il codice operativo contenuto nella locazione richiesta e il processore, messosi istantaneamente in attesa subito dopo aver attivato le linee di controllo, lo cattura e lo mette nei registri della coda delle istruzioni, a disposizione della EU.

      

bulletQuesta 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.
bulletIn questo modo EU (che analizziamo tra un attimo) trova sempre bytes pronti ad essere eseguiti.

      

Suggerimento 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.

      

bulletIl 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'...
bulletE' 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).

      

bulletDunque, 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.

      

bulletLa sua Unità di Controllo di Esecuzione provvede ad organizzare tutto il lavoro, che prevede 2 fasi distinte:
bulletla fase di fetch, durante la quale il byte prelevato dalla coda viene trasferito nel suo instruction register (IR).
bulletla fase di decode, durante la quale il byte è "fatto a pezzi", nel senso che ogni codice operativo è frazionato in gruppi di 2 3 bit, in grado di dare indicazioni utili per la sua successiva esecuzione, come registri coinvolti o operazioni logiche o aritmetiche necessarie; ogni gruppo di bit è confrontato con il contenuto di alcune tabelle interne, in grado di attivare i giusti segnali di controllo necessari a garantire l'effetto suggerito dall'istruzione corrispondente al codice operativo.

      

bulletNon 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.

      

Suggerimento 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!

    

Pagina Precedente Capitolo 1 Pagina Successiva PROCESSORE 80x86 13/14   Torna alla Home  del Capitolo1 del "Tutorial" Lezioni - Vai al DownLoad dei files DOC Torna al Menu del "Tutorial"
24 di 60
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60

    

CAP. 1 » 1. Processore 80x86 2. Istruzioni 80x86  3. Debug  4. La Grande Libreria
TUTORIAL » Indirizzi Base | Registri Interni | Area Comunicaz. BIOS | Funzioni BIOS | Funzioni DOS
Prefazione | CAP 1 | CAP 2 | Schede | Palestra
Libreria ASM | Libreria MAC | Progetti ASM | Download | Info | Indice
Home 
Pascal|Manuali|Tabelle|Schede
Tutorial Assembly|Palestra Assembler
Aggiungi Giobe®2000 ai preferiti  
Motore
Ricerca
  Rendi Giobe®2000 pagina di Default
© 2001-2010  -  Studio Tecnico ing. Giorgio OBER
Tutti i diritti sono riservati