Calcolatori elettronici/Architettura 8086
Il titolo di questa pagina non è corretto per via delle caratteristiche del software MediaWiki. Il titolo corretto è A4. Architettura 8086. |
3 Il processore Intel 8086 è caratterizzato da:
- spazio di indirizzamento: la quantità di memoria che è in grado di indirizzare (220 indirizzi da 1 byte = 1 MB);
- parallelismo: le lunghezze di parole con cui i moduli sono in grado di operare (16 bit).
La memoria è suddivisa in due porzioni, definite per dimensioni e posizione: una contiene i dati del programma, l'altra contiene il codice macchina del programma.
Registri[modifica | modifica sorgente]
6 L'instruction set architecture (ISA) è l'insieme delle informazioni pubblicate dal produttore del processore.
Classificazione[modifica | modifica sorgente]
- special register: (es. PC, IR) non possono essere acceduti dal programmatore in modo diretto, anche se ad esempio l'istruzione JMP accede indirettamente al PC;
- user register: (es. AX, DI) possono essere usati dal programmatore in modo esplicito nelle istruzioni.
- registri di dato: (AX, BX, CX, DX) sono 4 registri da 16 bit, ciascuno dei quali è costituito da una coppia di registri da 8 bit (H e L);
- registri indice: (es. DI, BX) oltre a poter contenere i dati, possono essere usati anche per passare un indirizzo (es. vett[DI]);
- registri contatore (es. CX);
- registri di segmento (CS, DS, SS, ES);
- registri puntatore (es. IP, SP, BP).
Ci possono anche essere dei registri di servizio, che il progettista ha destinato solo all'uso interno.
Status register[modifica | modifica sorgente]
17 Lo status register è un modulo da 16 bit, 9 dei quali contengono i flag di condizione e di controllo, che vengono letti continuamente tra un'istruzione e l'altra:
- 19 flag di controllo: definiscono alcune modalità di comportamento del processore (per es. l'IF acceca il processore ai segnali di interrupt);
- 18 flag di condizione: il processore deve poter valutare le condizioni delle istruzioni if e saltare alle sub appropriate → a differenza dell'istruzione JMP, che è un'istruzione di salto incondizionato che ne scrive l'indirizzo nel PC senza valutare alcuna condizione di istruzioni if, le istruzioni di salto condizionato JN<nome_flag> decidono se scrivere o no l'indirizzo nel PC a seconda di certi flag di condizione <nome_flag>F, che accompagnano l'uscita della ALU al termine di un'operazione.
Accesso alla memoria[modifica | modifica sorgente]
22 Il BHE è un segnale di enable che, nel caso di indirizzi di memoria pari, specifica se la memoria deve restituire una coppia di byte, cioè la word intera (BHE = 0), oppure un singolo byte (BHE = 1):
A0 (bit meno significativo) | BHE | Byte restituiti |
---|---|---|
0 (pari) | 0 | 2 |
1 | 1 | |
1 (dispari) | 0 | 1 |
1 | don't care |
23 Un numero su 2 byte viene memorizzato in memoria con la rappresentazione little endian, ovvero il byte meno significativo precede quello più significativo.
24 Alcune parti della memoria predefinite sono riservate per esempio al bootstrap (Reset Bootstrap) e alla gestione degli interrupt (Interrupt Vector Table).
25 Ogni istruzione in codice macchina richiede da 1 a 6 byte, e comprende il codice operativo che identifica il tipo di operazione, e per ogni operando alcuni bit per identificarne il tipo (es. registro dati) e altri per il suo indirizzo.
Indirizzi di memoria[modifica | modifica sorgente]
11 Il processore raggiunge ogni cella di memoria tramite un indirizzo fisico su 20 bit, che è la somma binaria di due sotto-indirizzi: il segment address e l'effective address. Questo meccanismo impedisce che un programma esca dai segmenti di memoria ad esso riservati, anche se le operazioni sugli indirizzi richiedono un certo tempo.
Segment address[modifica | modifica sorgente]
Il segment address è l'indirizzo di partenza del segmento che contiene la cella di memoria.
La memoria dell'8086, di dimensioni totali pari a 220 byte, è suddivisa in paragrafi da 16 byte → i 4 bit meno significativi dell'indirizzo di partenza di ogni paragrafo risultano sempre uguali a 0 → bastano 16 bit per identificare un paragrafo. Siccome la posizione iniziale di un paragrafo coincide anche con la posizione iniziale di un segmento da 64 KB = 216 byte, il segment address ha una lunghezza pari a 16 bit anziché 20 bit.
10 I primi 16 bit dei segment address, tipicamente relativi ai segmenti di memoria codice (CS), dati (DS) e stack (SS), sono memorizzati nei registri di segmento. L'ES è usato per i segmenti di memoria maggiori di 64 KB.
Effective address[modifica | modifica sorgente]
L'effective address è l'offset della cella di memoria rispetto all'indirizzo di partenza del segmento.
L'effective address richiede 16 bit perché ogni segmento ha dimensione pari a 64 KB.
9 I registri puntatore IP, SP e BP memorizzano gli effective address correnti, da sommare agli opportuni segment address. Anche i registri indice SI e DI possono essere usati come registri puntatore.
Segmento di stack[modifica | modifica sorgente]
27 Nella memoria, a ogni programma è assegnato, oltre ai segmenti dati e codice, un terzo segmento di memoria detto stack, che implementa una coda LIFO. Nello stack, il processore non opera direttamente sugli indirizzi di memoria, ma compie solo delle operazioni di push (inserimento) e pop (estrazione).
40 Il registro Stack Segment (SS) contiene il segment address, cioè l'indirizzo della testa dello stack. Lo stack si riempie a partire dalla coda verso la testa. Lo Stack Pointer (SP) è uno special register, invisibile al programmatore, che memorizza l'effective address, cioè l'indirizzo della prima cella correntemente libera dello stack; viene decrementato e incrementato di 2 byte rispettivamente dalle operazioni di push e pop. Il processore non si accorge se lo stack è vuoto → esiste il rischio di eccesso di operazioni di pop.
Il titolo di questa pagina non è corretto per via delle caratteristiche del software MediaWiki. Il titolo corretto è A4. Architettura 8086. |