architettura degli elaboratori -...

13
1 Corso di Laurea Triennale in Informatica Università degli Studi di Bari Architettura degli Elaboratori Laboratorio lez1: il processore 8086/88 Prof. S.Pizzutilo Microprocessori INTEL per il PC 8080 (1974) • CPU a 8 bit, 6000 tr., 2MHz, 64KB di memoria indirizzabile; • simile al PDP-8, ma prodotto di massa. 8086 (1978) e 8088 (1979) CPU a 8 bit, 29000 tr., 5-10MHz, 1MB di memoria indirizzabile; • bus a 16 bit (8086) o a 8 bit (8088); • scelta da IBM come CPU per il PC IBM originale. 80286 (1982) 16 bit, 134'000 tr., 8-12MHz, 16MB memoria indirizzabile; instruction set di base uguale a 8086 e 8088; • organizzazione di memoria differente, ma complessa per garantire la compatibilità con i vecchi chip. I processori Intel a 32 bit 80386 (1985) 32 bit, 275’000 tr., 16-33MHz, 4GB memoria indirizzabile; ~ compatibile con quanto prodotto dall’8080 in poi. 80486 (1989) 32 bit, 1.2M tr., 25-100MHz, 4GB memoria indirizzabile; •organizzazione a pipeline; • comprende un’unità floating point e 8KB di cache su chip.

Upload: lydan

Post on 18-Feb-2019

232 views

Category:

Documents


0 download

TRANSCRIPT

1

Corso di Laurea Triennale in Informatica Università degli Studi di Bari

Architettura degli Elaboratori

Laboratorio

lez1: il processore 8086/88

Prof. S.Pizzutilo

Microprocessori INTEL per il PC 8080 (1974) • CPU a 8 bit, 6000 tr., 2MHz, 64KB di memoria indirizzabile; • simile al PDP-8, ma prodotto di massa. 8086 (1978) e 8088 (1979) • CPU a 8 bit, 29000 tr., 5-10MHz, 1MB di memoria indirizzabile; • bus a 16 bit (8086) o a 8 bit (8088); • scelta da IBM come CPU per il PC IBM originale. 80286 (1982) • 16 bit, 134'000 tr., 8-12MHz, 16MB memoria indirizzabile; • instruction set di base uguale a 8086 e 8088; • organizzazione di memoria differente, ma complessa per garantire la compatibilità con i vecchi chip.

I processori Intel a 32 bit 80386 (1985) • 32 bit, 275’000 tr., 16-33MHz, 4GB memoria indirizzabile; • ~ compatibile con quanto prodotto dall’8080 in poi. 80486 (1989) • 32 bit, 1.2M tr., 25-100MHz, 4GB memoria indirizzabile; •organizzazione a pipeline; • comprende un’unità floating point e 8KB di cache su chip.

2

La CPU INTEL 8086 8086: microprocessore general purpose a 16 bit di terza generazione Le caratteristiche principali sono: •  Capacità di indirizzamento di 1 MB =220 -> address bus a 20 bit

•  14 registri interni da 16 bit •  data bus a 16 bit •  7 modi di indirizzamento •  Set di istruzioni esteso (CISC)

MEMORIA PRINCIPALE · 1 MB =220= 1.048.576 locazioni di memoria di 8 bit · il primo byte ha indirizzo 0 · l'ultimo byte ha indirizzo FFFFFH (?) Accesso a 4 blocchi di memoria di 64k byte ciascuno (segmenti)

3

Esecuzione di un programma · Il programma è caricato in memoria centrale · Si compone di due parti fondamentali: istruzioni (“codice”) e dati · Il microprocessore inizia la lettura della prima istruzione a un indirizzo noto di memoria; una volta letta, esegue l’istruzione · Il microprocessore legge ed esegue l’istruzione successiva in memoria, e così via · Alcune istruzioni particolari, dette di trasferimento di controllo (“salti”, chiamate a procedura, interruzioni, ...) modificano arbitrariamente l’indirizzo da cui è letta la successiva istruzione · Ogni istruzione può o meno fare riferimento a dati in memoria; in tal caso, viene calcolato l’indirizzo del dato ed eseguita un’operazione di lettura e/o scrittura all’indirizzo di memoria

Execution Unit (EU): esegue le istruzioni (fase di execute)

- preleva le istruzioni (fase di fetch) - legge gli operandi - scrive i risultati

4

•  esegue le istruzioni •  fornisce dati e indirizzi al BIU •  modifica registri generali e registro flag - ALU, registri e bus interno a 16 bit - EU non ha connessioni dirette con il bus di sistema (con l’esterno) Quando l'EU deve eseguire una nuova istruzione, la ottiene dalla coda gestita dal BIU e se la coda è vuota si pone in attesa; Se un'istruzione richiede di accedere alla memoria o a una periferica, EU richiede a BIU di ottenere o memorizzare il dato; - Indirizzi manipolati dall'EU sono di 16 bit - Il BIU effettua le operazioni che permettono di accedere all'intero spazio di memoria disponibile

Execution Unit

- BIU esegue tutte le richieste dell'EU che coinvolgono i l mondo esterno, cioè i trasferimenti di dati tra la CPU e la memoria o i dispositivi di I/O -  calcola gli indirizzi reali a 20 bit

sommando, in un sommatore dedicato, l'indirizzo del segmento e l'offset (entrambi a 16 bit)

-  esegue trasferimento dati da e verso l'EU - carica le istruzioni nella coda di istruzioni (prefetch) - Le istruzioni caricate dal BIU nella coda sono quelle che seguono l'istruzione correntemente in esecuzione nell'EU Se l'EU esegue un'istruzione di salto, il BIU svuota la coda e comincia a riempirla di nuovo a partire dal nuovo indirizzo; in questo caso, l'EU deve aspettare che la BIU abbia acquisito la nuova istruzione da eseguire.

Bus Interface Unit

5

- Data Register (AX, BX, CX, DX)

Registri Generali

- Si usano per puntare ai quattro segmenti di memoria correntemente attivi

Registri di Segmento

-  IP: Instruction Pointer -  FLAG

Registri di Sistema

•  Pointer Register (SP, BP) •  Index Register (DI, SI)

Registri Indice e Puntatore

Bit ---------- 16 ------------- AH AL AX Accumulatore nelle op aritmetiche

BH BL BX Base nei modi di indirizzamento

CH CL CX Contatore delle iterazioni nei Loop

DH DL DX Dati per la moltipl. e divis. di dati a 16 bit

SI: Indice di sorgente DI: indice di destinazione BP: Puntatore alla Base SP: Puntatore allo Stack (si somma a SS per ottenere il TOP)

IP: Puntatore Istruzioni

FLAGS: Registro di stato

Uso generale

registri indici e puntatori

CS: Segmento di programma (si somma a IP per ottenere il PC)

DS: Segmento dati SS: Segmento Stack ES: Segmento Ulteriore

registri segmento

registri di sistema

6

•  registro a 16 bit •  viene gestito dal BIU •  contiene, in ogni istante, l'offset (cioè la distanza in byte)

dell'istruzione successiva dall'inizio del segmento codice corrente (CS)

•  I programmi non hanno accesso diretto all'IP, ma le istruzioni lo modificano implicitamente

•  Il program counter classico (PC) coincide con CS:IP.

Instruction Pointer (IP)

Registro a 16 bit contenente: •  6 flag di stato: vengono modificati dall'EU in base al

risultato delle operazioni logiche e aritmetiche •  3 flag di controllo: settati o azzerati dal programma al fine

di modificare il comportamento della CPU I rimanenti bit non sono utilizzati – SF: segno (+ o -) – ZF: risultato Zero – OF: Overflow – CF: Carry – AF: Auxiliary carry – PF: Parità del risultato - IF: Interrupt enable - DF: Direction - TF: Trap

FLAGS

Esiste un gruppo di istruzioni che permet te a l programma d i controllare il contenuto di tali flag a fini decisionali

7

Gestione della memoria

Memoria 0 16 32 48 64 80 …. 1M-32 1M-16 1M

paragrafi 0 1 2 64k-1 segmenti

0 1 2

La memoria è divisa in •  Paragrafi •  Segmenti

I paragrafi sono zone di memoria costituite da 16 byte contigui non sovrapponibili. Il sistema può gestire fino a 64k paragrafi numerati a partire dalla locazione 00000h di memoria. I segmenti sono zone di memoria costituite da 64k byte contigui. Il sistema può gestire fino a 64k segmenti; ogni segmento inizia in corrispondenza con un paragrafo, ossia ad un indirizzo multiplo di 16. I segmenti possono sovrapporsi (Overlapping Segments).

Segmentazione Intel 8086/88 Ciascun registro segmento punta a più spazi di indirizzamento

indipendenti: segmenti

Registri a 16 Bit -> Numero massimo Indirizzi = 216 = 65.536 = 64 k Memoria reale indirizzata = 1.048.576 = 1.024 = 220

Paragrafo (16 byte ) 64 k CODICE 0150H

ACCESSO CS 0150 H SIMULTANEO DS 4200 H 64 k DATI 4200H MASSIMO

= SS 9CD0 H 256 K ES B000 H 64 k STACK 9CD0H 64 k EXTRA B000H Segmenti max di 64 k che iniziano in qualsiasi punto della memoria e possono sovrapporsi.

I quattro registri segmento puntano ai quattro segmenti correntemente utilizzabili. 64k byte di codice - CS 64k byte di stack - SS 128k byte di dati - DS e ES

Per accedere al codice o ai dati contenuti in altri segmenti, è necessario modificare i registri segmento in modo opportuno

8

Calcolo indirizzo fisico L’indirizzo fisico di una cella di memoria è espresso da 20 bit; non è quindi possibile un indirizzamento mediante un solo registro a 16 bit. Esso è infatti ottenuto mediante la somma di due contributi: - il Segment Address: è l’indirizzo di testa del segmento e viene ottenuto moltiplicando per 16 il numero del segmento. - l’Effective Address (EA): è l’indirizzo effettivo all’interno del segmento, calcolato come offset (spostamento) rispetto all’inizio del segmento stesso.

NB: la moltiplicazione per 16 può essere notevolmente velocizzata da un semplice shift a sinistra di 4 posizioni della rappresentazione binaria del numero.

Indirizzo fisico I programmi utilizzano indirizzi formati da: · indirizzo del segmento · offset nel segmento

entrambi quantità di 16 bit senza segno

BIU converte la coppia segmento:offset in indirizzo fisico Ciò avviene moltiplicando l'indirizzo del segmento per 16 e sommando al risultato l'offset nel segmento

Offset 16 bit +

Seg.Add. 20 bit

Eff.Add. 20 bit =

9

Stack Area di memoria centrale gestita con un protocollo di tipo LIFO (Last In First Out) definita dai registri SS e SP ed al massimo di 64k byte. • SS contiene l'indirizzo del segmento stack (Stack Segment) • SP contiene l'offset del top dello stack (Stack Pointer)

Lo stack cresce per decremento dello SP (andando dagli indirizzi alti a quelli bassi): l'indirizzo di partenza dello stack logico (contenuto in SS) è il top (non il bottom) dell’area di memoria fisica riservata allo stack.

Stack

Le istruzioni che operano sullo stack trasferiscono due byte per volta (una word) Operazione di push:

· SP -> SP - 2 · scrittura di una word al nuovo top

Operazione di pop: · lettura di una word dal top · SP -> SP + 2

10

ISA del Pentium II Compatibilità con architetture della famiglia 808x (real mode e virtual 8086 mode) Protected mode (vero Pentium II) prevede 4 livelli di privilegi controllati da bit della PSW •  Livello 0 – kernel mode (sistema operativo) •  Livello 3 – user mode (programmi applicativi) •  Livelli 1 e 2 intermedi, raramente usati Enorme spazio di indirizzamento •  2^14 (=16.384) segmenti •  2^32 (indirizzi da 0 a 2^32-1) indirizzi per ogni segmento La maggior parte dei sistemi operativi usa un solo segmento di 2^32 byte raggruppati in parole da 4 byte

Registri del Pentium II •  4 registri da 32 bit di uso generale (EAX, EBX, ECX, EDX), ciascuno utilizzabile anche come registri da 16 e 8 bit (es. AX 16 bit, AH+AL 8 bit) •  4 registri da 32 bit usati come puntatori - ESI – Source - EDI – Destination - EBP – Base Pointer (analogo a LV di IJVM) - ESP – Stack Pointer •  6 registri da 16 bit per l’uso dei segmenti (importanti quando la capacità di indirizzamento era limitata) •  1 registro da 32 bit come Program Counter (detto Instruction Pointer) •  1 registro da 32 bit per la PSW

AH AL AX

Bit ---------- 16 ------------- ------ 8 ----- ----- 8 ----- EAX

BH BL BX EBX

CH CL CX ECX

DH DL DX EDX

ESI EDI EBP ESP

CS SS DS ES FS GS

EIP

EFLAGS

11

; Somma degli elementi di un vettore ;=======SEGMENTO STACK=========== STACK SEGMENT PARA STACK 'STACK' DB 100h DUP(0) STACK ENDS ;;== ==SEGMENTO DATI=========== DATA SEGMENT PARA PUBLIC 'DATA' totale DB 10 ;Quanti numeri contiene il vettore vettore DB 3,5,2,0,3,9,7,2,1,1 ……………… msg2 DB ': $' DATA ENDS ;==========SEGMENTO CODICE======== CODE SEGMENT PARA PUBLIC 'CODE' MAIN PROC FAR ;----PROLOGO STANDARD------------ ASSUME CS:CODE PUSH DS XOR AX,AX PUSH AX MOV AX,data MOV ES,AX ASSUME ES:DATA MOV DS,AX ASSUME DS:DATA ;-------------MAIN---------------- CALL Calcolo CALL Output RET ;----------PROCEDURE----------- Calcolo PROC NEAR CMP totale,0 JE fine XOR CX,CX …………….. MOV somma,AX fine: RET Calcolo ENDP ………………... MAIN ENDP CODE ENDS END MAIN

STRUTTURA ISTRUZIONE ASSEMBLY 1. LABEL ( opzionale ) 2. CODICE OPERATIVO ( Istruzione o

pseudoistruzione )

3. OPERANDO ( Uno o più di uno ) 4. COMMENTO ( Preceduto da ; ) . Questi quattro elementi devono essere separati al più da un blank; . L’istruzione non deve necessariamente iniziare dalla prima colonna; . L’istruzione può essere lunga al max 132

STRUTTURA PROGRAMMA ASSEMBLY

SEGMENTI In programma ci devono essere almeno 3 definizioni di segmento. - STACK riserva spazio per lo STACK. - DATA contiene le variabili del programma. - CODE contiene istruzioni del programma. Nome del segmento Specifica che il segmento deve cominciare dall’inizio

di un paragrafo standard ( 16 byte ) in memoria. STACK SEGMENT PARA STACK ‘STACK’ DB 1024 SUP ( 0FFH ) Per specificare lo Stack ………………. STACK ENDS DATA SEGMENT PARA PUBLIC ‘DATA’ VAR 1 DB

………………………. Per le definizioni del segmento DATA e CODE

DATA ENDS CODE SEGMENT PARA PUBLIC ‘CODE’ MAIN PROC FAR …………………. MAIN ENDP CODE ENDS

12

Tipi di istruzioni Suddivisione funzionale delle istruzioni:

•  trasferimento dati •  shift e rotazione •  aritmetiche

•  vettori booleani •  elaborazione indirizzi •  elaborazione di stringhe •  modifica sequenza

•  interi binari •  reali •  decimali

• istruzioni su dati tipizzati • istruzioni su dati non tipizzati

•  salti condiz. e incondizion. •  iterazione o loop •  salti a subroutine •  salti a procedure

• istruzioni general-purpose • istruzioni special-purpose

Tipi di istruzioni

Istruzioni su dati non tipizzati: determinano operazioni eseguibili su tutti i tipi di dati 1.  Istr. di trasferimento

dati 2.  Istr. di traslazione e

rotazione 3.  Istr. di I/O

–  Istruzioni su dati tipizzati: operano su un tipo di dati 1.  Istr. aritmetiche 2.  Istr. logiche 3.  Istr. di elaborazione stringhe 4.  Istr. di elaborazione indirizzi 5.  I s t r. d i mod i f i ca de l l a

sequenza di elaborazione

13

Come si costruiscono le istruzioni

Quale funzione?

• Load •and • store •or • add ... • sub

• Diretto • immediato • indicizzato • ... La funzione scelta

con quale metodo di indirizzamento?

Istruzione specifica

FORMATO ISTRUZIONI

E' indifferente l'uso di lettere maiuscole o minuscole. Il tipo di operandi ammessi varia da istruzione a istruzione. Esistono istruzioni che ammettono come operando solo una costante o solo un particolare registro generale. L'assembler dell'8086 non ha la caratteristica dell'ortogonalità, caratteristica che renderebbe la fase di apprendimento dell'assembler più veloce.