architettura degli elaboratori · 2019-01-06 · 1 corso di laurea triennale in informatica...

17
1 Corso di Laurea Triennale in Informatica Università degli Studi di Bari Anno Accademico 2009-2010 Architettura degli Elaboratori Laboratorio lez1: il processore 8086/88 Prof. S.Pizzutilo I processori Intel Tutta la famiglia dei processori Intel (x86) si basa ed e' compatibile con il primo processore di questo tipo: l'8086. L'8086 e' un processore a 16 bit quindi i suoi registri potranno contenere al massimo 16 bit di informazione. I processore successivi, quali l’80486, il Pentium ed il Pentium II sono processori a 32 bit. Intel rilascia a metà del 2000 anche il Merced a 64 bit. Per poter conoscere come funziona un processore Pentium e' necessario partire dal suo bis-bis-nonno: 8086.

Upload: others

Post on 07-Jun-2020

3 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Architettura degli Elaboratori · 2019-01-06 · 1 Corso di Laurea Triennale in Informatica Università degli Studi di Bari Anno Accademico 2009-2010 Architettura degli Elaboratori

1

Corso di Laurea Triennale in InformaticaUniversità degli Studi di BariAnno Accademico 2009-2010

Architettura degli Elaboratori

Laboratorio

lez1: il processore 8086/88

Prof. S.Pizzutilo

I processori IntelTutta la famiglia dei processori Intel (x86) si basa ed e' compatibile con il primoprocessore di questo tipo: l'8086.L'8086 e' un processore a 16 bit quindi i suoi registri potranno contenere almassimo 16 bit di informazione.I processore successivi, quali l’80486, il Pentium ed il Pentium II sono processoria 32 bit.Intel rilascia a metà del 2000 anche il Merced a 64 bit.Per poter conoscere come funziona un processore Pentium e' necessario partire dalsuo bis-bis-nonno: 8086.

Page 2: Architettura degli Elaboratori · 2019-01-06 · 1 Corso di Laurea Triennale in Informatica Università degli Studi di Bari Anno Accademico 2009-2010 Architettura degli Elaboratori

2

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 ivecchi chip.

I processori Intel a 32 bit80386 (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.

La CPU INTEL 80868086: microprocessore general purpose a 16 bit di terza generazioneLe 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)

Page 3: Architettura degli Elaboratori · 2019-01-06 · 1 Corso di Laurea Triennale in Informatica Università degli Studi di Bari Anno Accademico 2009-2010 Architettura degli Elaboratori

3

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)

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 indirizzonoto di memoria; una volta letta, esegue l’istruzione· Il microprocessore legge ed esegue l’istruzione successiva in memoria, ecosì via· Alcune istruzioni particolari, dette di trasferimento di controllo (“salti”,chiamate a procedura, interruzioni, ...) modificano arbitrariamentel’indirizzo da cui è letta la successiva istruzione· Ogni istruzione può o meno fare riferimento a dati in memoria; in talcaso, viene calcolato l’indirizzo del dato ed eseguita un’operazione dilettura e/o scrittura all’indirizzo di memoria

Page 4: Architettura degli Elaboratori · 2019-01-06 · 1 Corso di Laurea Triennale in Informatica Università degli Studi di Bari Anno Accademico 2009-2010 Architettura degli Elaboratori

4

La CPU è costituita da due blocchi funzionali:

1. Execution Unit (EU): esegue le istruzioni (fase di execute)2. Bus Interface Unit (BIU): - preleva le istruzioni (fase di fetch) - legge gli operandi - scrive i risultati

La CPU

Page 5: Architettura degli Elaboratori · 2019-01-06 · 1 Corso di Laurea Triennale in Informatica Università degli Studi di Bari Anno Accademico 2009-2010 Architettura degli Elaboratori

5

• esegue le istruzioni• fornisce dati e indirizzi al BIU• modifica registri generali e registro flag

ALU, registri e bus interno a 16 bitEU non ha connessioni dirette con il bus disistema (con l’esterno)Quando l'EU deve eseguire una nuovaistruzione, la ottiene dalla coda gestita dalBIU e se la coda è vuota si pone in attesa;Se un'istruzione richiede di accedere allamemoria o a una periferica, EU richiede aBIU di ottenere o memorizzare il dato;

Indirizzi manipolati dall'EU sono di 16 bitIl BIU effettua le operazioni che permettonodi accedere all'intero spazio di memoriadisponibile

Execution Unit

esegue tutte le richieste dell'EU checoinvolgono il mondo esterno, cioè itrasferimenti di dati tra la CPU e la memoria o idispositivi di I/O· calcola gli indirizzi reali a 20 bit sommando,in un sommatore dedicato, l'indirizzo delsegmento e l'offset (entrambi a 16 bit)· esegue trasferimento dati da e verso l'EU· carica leistruzioni nella coda di istruzioni(prefetch)

Le istruzioni caricate dal BIU nella coda sonoquelle che seguono l'istruzione correntemente inesecuzione nell'EUSe l'EU esegue un'istruzione di salto, il BIUsvuota la coda e comincia a riempirla di nuovo apartire dal nuovo indirizzo; in questo caso, l'EUdeve aspettare che la BIU abbia acquisito lanuova istruzione da eseguire.

Bus Interface Unit

Page 6: Architettura degli Elaboratori · 2019-01-06 · 1 Corso di Laurea Triennale in Informatica Università degli Studi di Bari Anno Accademico 2009-2010 Architettura degli Elaboratori

6

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

Registri Generali

- Si usano per puntare ai quattro segmenti di memoriacorrentemente 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 ALAX Accumulatore nelle op aritmetiche

BH BLBX Base nei modi di indirizzamento

CH CLCX Contatore delle iterazioni nei Loop

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

SI: Indice di sorgenteDI: indice di destinazioneBP: Puntatore alla BaseSP: Puntatore allo Stack(si somma a SS per ottenere il TOP)

IP: Puntatore Istruzioni

FLAGS: Flag di stato

Usogenerale

registriindici epuntatori

CS: Segmento di programma(si somma a IP per ottenere il PC)DS: Segmento datiSS: Segmento StackES: Segmento Ulteriore

registrisegmento

registri disistema

Page 7: Architettura degli Elaboratori · 2019-01-06 · 1 Corso di Laurea Triennale in Informatica Università degli Studi di Bari Anno Accademico 2009-2010 Architettura degli Elaboratori

7

· 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 lomodificano 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 alrisultato delle operazioni logiche e aritmetiche3 flag di controllo: settati o azzerati dal programma al finedi 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 chepermette al programma dicontrollare il contenuto di tali flaga fini decisionali

Page 8: Architettura degli Elaboratori · 2019-01-06 · 1 Corso di Laurea Triennale in Informatica Università degli Studi di Bari Anno Accademico 2009-2010 Architettura degli Elaboratori

8

Gestione della memoriaPer comodità la memoria si può pensare divisa in

• Paragrafi• Segmenti

I paragrafi sono- zone di memoria costituite da 16 byte contigui. Il sistema può gestirefino a 64k paragrafi. (perche’?)- numerati a partire dalla locazione 00000h di memoria.I paragrafi non possono sovrapporsi.

I segmenti sono zone di memoria costituite da 64k byte contigui.Il sistema può gestire fino a 64k segmenti; ogni segmento inizia incorrispondenza con un paragrafo, ossia ad un indirizzo multiplo di 16.I segmenti possono sovrapporsi (Overlapping Segments).

Gestione della memoria

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

paragrafi 0 1 2 64k-1segmenti

01

2

Page 9: Architettura degli Elaboratori · 2019-01-06 · 1 Corso di Laurea Triennale in Informatica Università degli Studi di Bari Anno Accademico 2009-2010 Architettura degli Elaboratori

9

SegmentiI quattro registri segmento puntano ai quattro segmenticorrentemente utilizzabili.Ogni programma in esecuzione può accedere direttamente a:

64k byte di codice - CS64k byte di stack - SS128k 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

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

indipendenti: segmenti

Registri a 16 Bit -> Numero massimo Indirizzi = 216 = 65.536 = 64 kMemoria 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 - CS64k byte di stack - SS128k byte di dati - DS e ES

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

Page 10: Architettura degli Elaboratori · 2019-01-06 · 1 Corso di Laurea Triennale in Informatica Università degli Studi di Bari Anno Accademico 2009-2010 Architettura degli Elaboratori

10

SegmentiI segmenti possono essere disposti in memoria in diversi modi; adesempio:

· contigui (segmenti A e B)· disgiunti (segmenti A e C)· sovrapposti parzialmente(segmenti B e C)· sovrapposti totalmente (segmentiE e F)

Una locazione della memoria fisica puòessere contenuta in più segmenti

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

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

Page 11: Architettura degli Elaboratori · 2019-01-06 · 1 Corso di Laurea Triennale in Informatica Università degli Studi di Bari Anno Accademico 2009-2010 Architettura degli Elaboratori

11

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:offsetin indirizzo fisico

Ciò avviene moltiplicando l'indirizzo delsegmento per 16 e sommando al risultatol'offset nel segmento

Offset 16 bit +

Seg.Add. 20 bit

Eff.Add. 20 bit =

Indirizzo fisicoBIU ottiene la coppia segmento:offset da traslare, in modi diversi:1. Le istruzioni da eseguire vengono ricavate dal segmento codice corrente,pertanto l'indirizzo fisico della successiva istruzione è dato da: CS:IP, cioèCS*16+IP2. Le istruzioni che agiscono sullo stack utilizzano il segmento stack corrente:

- SS contiene l'indirizzo del segmento- SP contiene l'offset del top dello stack

Gli operandi che fanno riferimento alla memoria (variabili di programma) dinorma risiedono sul data segment corrente (DS)però, il programma può dire al BIU di utilizzare uno qualunque dei quattrosegmenti correntemente disponibili

L'offset della variabile viene invece calcolato dall'EU e dipende dalla modalità diindirizzamento specificata nell'istruzione

Page 12: Architettura degli Elaboratori · 2019-01-06 · 1 Corso di Laurea Triennale in Informatica Università degli Studi di Bari Anno Accademico 2009-2010 Architettura degli Elaboratori

12

Stack• area di memoria gestita con un protocollo di tipo LIFO (Last In First Out)• realizzato in memoria centrale• definito dai registri SS e SP

In memoria possono coesistere più stack, ognuno al massimo di 64k byte seun programma oltrepassa per errore tale limite, ...

Un solo stack è quello corrente:• 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 aquelli bassi):l'indirizzo di partenza dello stack logico (contenuto in SS) non è il bottomdell’area di memoria fisica riservata allo stack

StackArea 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 aquelli bassi):l'indirizzo di partenza dello stack logico (contenuto in SS) non è il bottomdell’area di memoria fisica riservata allo stack.

Page 13: Architettura degli Elaboratori · 2019-01-06 · 1 Corso di Laurea Triennale in Informatica Università degli Studi di Bari Anno Accademico 2009-2010 Architettura degli Elaboratori

13

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

ISA del Pentium IICompatibilità 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 usatiEnorme spazio di indirizzamento• 2^14 (=16.384) segmenti• 2^32 (indirizzi da 0 a 2^32-1) indirizzi per ogni segmentoLa maggior parte dei sistemi operativi usa un solo segmento di 2^32 byte raggruppati in parole da 4byte

Registri del Pentium II• 4 registri da 32 bit di uso generale (EAX, EBX, ECX, EDX), ciascuno utilizzabile anche comeregistri 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 indirizzamentoera limitata)• 1 registro da 32 bit come Program Counter (detto Instruction Pointer)• 1 registro da 32 bit per la PSW

Page 14: Architettura degli Elaboratori · 2019-01-06 · 1 Corso di Laurea Triennale in Informatica Università degli Studi di Bari Anno Accademico 2009-2010 Architettura degli Elaboratori

14

AH ALAXBit ---------- 16 ------------- ------ 8 ----- ----- 8 -----

EAX

BH BLBX EBX

CH CLCX ECX

DH DLDX EDX

ESIEDIEBPESP

CSSSDSESFSGS

EIP

EFLAGS

; 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,AXfine: RETCalcolo ENDP ………………...MAIN ENDPCODE ENDSEND 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 alpiù da un blank;. L’istruzione non deve necessariamente iniziaredalla prima colonna;. L’istruzione può essere lunga al max 132

STRUTTURA PROGRAMMAASSEMBLY

Page 15: Architettura degli Elaboratori · 2019-01-06 · 1 Corso di Laurea Triennale in Informatica Università degli Studi di Bari Anno Accademico 2009-2010 Architettura degli Elaboratori

15

SEGMENTIIn 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’iniziodi 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 eCODE

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

Tipi di istruzioniSuddivisione 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

Page 16: Architettura degli Elaboratori · 2019-01-06 · 1 Corso di Laurea Triennale in Informatica Università degli Studi di Bari Anno Accademico 2009-2010 Architettura degli Elaboratori

16

Tipi di istruzioni

Istruzioni su Istruzioni su dati nondati nontipizzatitipizzati: determinano: determinanooperazioni eseguibili suoperazioni eseguibili sututti i tipi di datitutti i tipi di dati1.1. IstrIstr. di trasferimento. di trasferimento

datidati2.2. IstrIstr. di traslazione e. di traslazione e

rotazionerotazione3.3. IstrIstr. di I/O. di I/O

–– Istruzioni su Istruzioni su dati tipizzatidati tipizzati::operano su un tipo di datioperano su un tipo di dati1.1. IstrIstr. aritmetiche. aritmetiche2.2. IstrIstr. logiche. logiche3.3. IstrIstr. di elaborazione stringhe. di elaborazione stringhe4.4. IstrIstr. di elaborazione indirizzi. di elaborazione indirizzi5.5. IstrIstr. di modifica della. di modifica della

sequenza di elaborazionesequenza di elaborazione

Come si costruiscono le istruzioni

Quale funzione?

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

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

con quale metododi indirizzamento?

Istruzionespecifica

Page 17: Architettura degli Elaboratori · 2019-01-06 · 1 Corso di Laurea Triennale in Informatica Università degli Studi di Bari Anno Accademico 2009-2010 Architettura degli Elaboratori

17

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 unacostante o solo un particolare registro generale.

L'assembler dell'8086 non ha la caratteristica dell'ortogonalità,caratteristica che renderebbe la fase di apprendimentodell'assembler più veloce.