Sei sulla pagina 1di 8

Ing.

Gabriele MONTI 1999 - 2005

8086

www.ingmonti.it

1 Architettura 8086
L'8086 !a"o#ti"ite $ella %amiglia 80&86 %' 'na $ei "rimi mi!ro"ro!e##ori a 16 bit. In 'n 8086 #ia il b'# $ati !(e la )L* erano a 16 bit mentre e##o "ote+a in$iri,,are %ino a 1 M-.te $i memoria /20 bit $i a$$re## b'#0. 1'e#ta memoria +i#ta la !a"a!it2 $i 63 4-.te ti"i!a $ei mi!ro"ro!e##ori $el tem"o era !on#i$erata 'na 5'antit2 enorme. La memoria $i 'n 8086 6 organi,,ata in lo!a,ioni $i 8 bit "er !'i $ato !(e il $ata b'# 6 $i 16 bit ogni a!!e##o alla memoria tra#%eri#!e $'e -.te !ontem"oraneamente. L'8086 %' +en$'to "er la "rima +olta nel 1978 !ontem"oraneamente a$ e##o %' !ommer!iali,,ato l'8088 !(e ne 6 $i+er#o #olo "er!(8 (a 'n $ata b'# $i 8 bit. 1'e#to "ermette+a $i '#are le te!nologie e#i#tenti "er la "ro$',ione a ba##o !o#to $elle #!(e$e ma$re $ei !om"'ter !(e erano !alibrate #'lle 9:* "re!e$enti a$ 8 bit. L'8088 ebbe 'n #'!!e##o !ommer!iale an!(e #'"eriore all'8086 $ato !(e %' a$ottato nella "rima +er#ione $el :9 I-M /&T0. ;'n,ionalmente era i$enti!o all'8086 #olo !(e "er tra#%erire $alla memoria n'meri $a 16 bit im"iega+a $'e !i!li $i memoria in #e5'en,a in+e!e $i !on!l'$ere in 'n #olo !i!lo !ome l'8086. L'a!!e##o alla memoria 'n -.te alla +olta era ge#tito in mo$o a'tomati!o $alla 9:* e$ era $el t'tto <tra#"arente< al "rogrammatore !o#= !(e #!ri+ere "rogrammi "er 'n 8086 o 'n 8088 era e#attamente la #te##a !o#a. >' ormai molto tem"o !(e l'8086 non +iene "i? "ro$otto ma i #'oi #'!!e##ori !(e ne !on$i+i$ono il !o$i!e binario #ono an!ora oggi i ti"i $i 9:* $i maggior #'!!e##o !ommer!iale "er !'i #a"er "rogrammare 'n 8086 6 an!ora im"ortante "er 'tili,,are %ino in %on$o t'tti i :9 $i oggi.

1.1 EU e BIU, prefetching


@e ragioniamo bene #'l %'n,ionamento $i 'na 9:* $'rante le #'e #e5'en,e $i %et!( e eAe!'te !i ren$iamo !onto !(e !on!l'#a la %a#e $i %et!( $'rante la %a#e $i eAe!'te i b'# "o##ono rimanere inatti+i. 9iB a!!a$e 5'an$o l'i#tr',ione !(e 6 #tata "re#a $'rante la %a#e $i %et!( la+ora #olo #' regi#tri interni. Il %atto !(e in 5'e#ti !a#i i b'# non +engano 'tili,,ati #i "'B #%r'ttare "er ren$ere la 9:* "i? +elo!e. In+e!e !(e la#!iare i b'# inatti+i #i "'B leggere il !o$i!e o"erati+o $ell'i#tr',ione #'!!e##i+a a 5'ella !(e +iene !orrentemente e#eg'ita e immaga,,inarlo in 'na !o$a all'interno $ella 9:*. 1'an$o la %a#e $i eAe!'te #ar2 terminata la 9:* "otr2 "ren$ere il !o$i!e o"erati+o $ella "ro##ima i#tr',ione $alla !o$a in+e!e !(e $alla memoria $ato !(e la !o$a 6 gi2 all'interno $ella 9:* 5'e#to !om"orter2 'n gran$e ri#"armio $i tem"o. 1'e#to #igni%i!a !(e la %a#e $i %et!( e 5'ella $i eAe!'te #i "o##ono #+olgere !ontem"oraneamente almeno in al!'ni momenti. 1'e#to me!!ani#mo !(e !on%ig'ra 'na #orta $i <!a!(e $elle i#tr',ioni< era "re#ente an!(e nel "rimo 8086 e$ era $etto <prefetching<. Me!!ani#mi $el genere molto "i? #o%i#ti!ati #ono 'tili,,ati an!(e nelle 9:* "i? mo$erne. La !a!(e $elle i#tr',ioni $i 'n 8086 6 $etta <!o$a $i "re%et!(< e$ 6 gran$e 6 -.te. >##a 6 molto "i!!ola !on#i$eran$o !(e le !a!(e $i i#tr',ioni all'interno $elle 9:* o$ierne "o##ono e##ere migliaia $i 4-.te. C'n5'e 'n 8086 $'rante l'e#e!',ione $elle i#tr',ioni !(e non !oin+olgono la memoria legge le i#tr',ioni #'!!e##i+e a 5'ella "'ntata $al :rogram 9o'nter e le memori,,a nella !o$a $i "re%et!( #e e##a non 6 gi2 "iena. T'tto !iB a++iene in mo$o !om"letamente a'tomati!o e tra#"arente al "rogrammatore. :er "oter %'n,ionare in 5'e#to mo$o l'8086 6 #'$$i+i#o in $'e "artiD 'na $etta EAe!'tion Unit />*0 #o+rinten$e alla #ola %a#e $i eAe!'te mentre la -I* /B'# Inter%a!e Unit0 6 la "arte !(e %a l'a!!e##o ai b'# e !(e e##en$o in$i"en$ente $alla >* 6 in gra$o %are il "re%et!(ing !ontem"oraneamente alla %a#e $i eAe!'te. 1'e#to %atto 6 me##o in e+i$en,a nella ;ig'ra E nella 5'ale la >* e la -I* #ono #e"arate $a 'na linea tratteggiata0. @e alla !on!l'#ione $ell'eAe!'te la !o$a !ontiene 5'al!o#a il %et!( 6 gi2 %atto e la >* "'B "ren$ere $alla !o$a l'i#tr',ione $a e#eg'ire. @e la !o$a 6 +'ota #i "ro!e$e a %are 'na normale %a#e $i %et!(. Nat'ralmente $'rante 'n'i#tr',ione !(e %a a!!e##o alla memoria !ome a$ e#em"ioD
ADD [10], AL

il "re%et!(ing non "otr2 a+ere l'ogo $ato !(e la -I* 6 im"egnata a leggere l'o"eran$o $alla lo!a,ione 10 e$ a #!ri+ere il ri#'ltato $ell'i#tr',ione alla #te##a lo!a,ione. !!!! da fare! Figura 1: prefetching

1.1.1

Integrazione del coprocessore

*n'altra !aratteri#ti!a a+an,ata $ell'8086 ri#"etto alle 9:* $el #'o tem"o era la #tretta integra,ione !on 'n "ro$otto !om"lementare !(e "ote+a %are !om"le##e o"era,ioni aritmeti!(e in (ar$ware #gra+an$o il #o%tware te!ni!o F #!ienti%i!o $i 'n "e#o molto !on#i#tente. @i tratta+a $el !o"ro!e##ore aritmeti!o in gra$o $i e%%ett'are i !al!oli in +irgola mobili e le %'n,ioni tra#!en$enti /#eno !o#eno0 $irettamente in (ar$ware.

06 )r!(itett'ra 8086.#Aw

Ger. 0.9.0 2005-10-12

". 1 $i 8

Ing. Gabriele MONTI

www.ingmonti.it

Il !o"ro!e##ore #t'$iato "er l'8086 #i !(iama 8087 e$ (a 'n #et $'i#tr',ioni #"e!iale !(e e#ten$e 5'ello $ella 9:*. Le i#tr',ioni "er il !o"ro!e##ore +engono memori,,ate in#ieme al "rogramma normale !ome #e $o+e##ero e##ere e#eg'ite $irettamente $alla 9:*. La 9:* "ro++e$e al %et!(ing $elle i#tr',ioni $el !o"ro!e##ore !ome %o##ero i#tr',ioni "ro"rie "oi 5'an$o ri!ono#!e il !o$i!e o"erati+o $i 'na i#tr',ione $el !o"ro!e##ore glielo #"e$i#!e $irettamente %erman$o#i a$ atten$ere i ri#'ltati. In 5'e#to mo$o !(i #!ri+e il #o%tware "'B 'tili,,are le i#tr',ioni $ell'8087 !ome #e %o##ero "arte $el #et $'i#tr',ioni $ell'8086. Cal 386 in "oi il !o"ro!e##ore 6 #tato integrato all'interno $el !(i" $i ogni 9:* $ella %amiglia &86 "er !'i le i#tr',ioni "er l'aritmeti!a a +irgola mobile #ono oggi entrate a %ar "arte a t'tti gli e%%etti $el #et $'i#tr',ioni $ella %amiglia &86.

1.2 Registri dell'8086


1.2.1 I registri generali

I regi#tri 8086 non (anno in$iri,,o. :er 'n "rogrammatore )##embl. il loro <in$iri,,o< 6 il loro <nome<. 9on l')##embl. 8086 "er 'tili,,are 'n regi#tro '#eremo il #'o nome nell'i#tr',ione relati+a. :er e#em"io l'i#tr',ione MOG )& -& %a '#o $i $'e regi#tri interni alla 9:* i !'i nomi #ono )& e -&. L'8086 (a 5'attro regi#tri generaliD )& -& 9& e C&. La lettera & $ei nomi $ei regi#tri a 16 bit #i "'B inter"retare !ome <exten$e$< "er!(8 !ome +e$remo !o#tit'i#!ono 'n'e#ten#ione $i regi#tri a 8 bit.

Un operando o due operandi?


Consideriamo lo stesso tipo di istruzione, ma che usa registri diversi, per esempio: ; l'istruzione MOV (da "move" muovi) tras eris!e nell'o"erando ; indi!ato a sinistra il valore dell'o"erando di destra ; #struzione Lin$ua$$io ma!!%ina MOV A&, 0 '( 0000 MOV '&, 0 '' 0000

Queste sono istruzioni a due operandi, un operando "sorgente" (0) ed una "destinazione" (AX o BX). e analizziamo il codice in linguaggio macchina, che a!!iamo scritto accanto alle due istruzioni, ci rendiamo conto che l"unico operando indicato esplicitamente # il numero 0, mentre il registro viene indicato usando un diverso codice operativo. $n%atti la prima &'( ha codice operativo B), mentre la seconda ha BB. $l codice operativo indica *uindi non solo che l"istruzione deve essere una &'(, ma *uale deve essere il regi+ stro di destinazione del tras%erimento. ,"operando 0000 # invece identico nelle due istruzioni (am!edue devo+ no tras%erire 0 nel registro di destinazione). (iste dalla C-. *ueste sono due istruzioni diverse, in *uanto il loro codice operativo # diverso. ar/ compito del compilatore generare i codici operativi giusti, secondo *uanto sta scritto nel %ile sorgente. A livello di macchina le due istruzioni hanno *uindi un operando solo, che vale 0, ma dal punto di vista logi+ co, per il programmatore Assem!l0, le due istruzioni appena viste sono la stessa istruzione con operandi di+ versi (AX e BX).

Un registro, tre registri


Ogni regi#tro generale $i 'n 8086 6 'no e trino. Nello #te##o (ar$ware 'tili,,an$o gli #te##i tran#i#tor "er la memori,,a,ione #i mantiene il !onten'to $i tre regi#tri. *no 6 'n regi#tro $a 16 bit $'e #ono regi#tri $a 8 bit. I regi#tri $a 8 bit #ono "arte $el regi#tro a 16H 'no $ei $'e ne '#a i bit $ella "arte ba##a l'altro ne "ren$e la "arte alta. :ren$iamo "er e#em"io il regi#tro )&. >##o 6 $i+i#o in $'e <#ottoregi#tri< $a 8 bit !ia#!'no !(iamati )L e$ )I. )L !on$i+i$e i bit $ella "arte ba##a $i )& /Low en$0 mentre )H '#a 5'elli $ella "arte alta /Hig( en$0.

". 2 $i 8

2005-10-12

06 )r!(itett'ra 8086.#Aw

Ing. Gabriele MONTI 1999 - 2005 )& 2160$ J 870>( 1 0 0 0 0 1 1 1 0 0 0 0 1

8086

www.ingmonti.it

1E5$ J 87( )I Figura 2: tre registri in uno

13$ J 0>( )L

1'anto $etto "er )& +ale an!(e "er gli altri regi#tri generali 5'in$i e#i#tono i regi#tri -L e -I 9L e 9I CL e CI #ono "arte ri#"etti+amente $i -& 9& e C&. Il regi#tro a 8 bit e$ il !orri#"on$ente a 16 bit %'n,ionalmente #ono regi#tri <$i+er#i<. Le i#tr',ioni %atte #' )& #ono a "rima +i#ta $el t'tto $i+er#e $a 5'elle %atte #' )L. :eraltro )L e$ )& !on$i+i$ono gli #te##i bit %'n,ionano !on gli #te##i tran#i#tor "er !'i !ambiare 'no $i e##i #igni%i!a mo$i%i!are an!(e il #e!on$o. 9iB "'B e##ere 'n "o' "eri!olo#o "er!(8 #i "re#ta a$ e%%etti !ollaterali #'b$oli. Ge$iamo 'n e#em"ioD
MOV '), *0 ,, ; uso ') "er +ual!%e s!o"o, !%e +ui non interessa

a!!io tante altre !ose, !%e +ui non interessano ,,

MOV '&, 0

; azzero '&, "er +ual!%e s!o"o s!onos!iuto, MA ; non ri!ordo !%e !os- azzero A./)0 ')1 ; se da +ui uso ') "ensando !%e !i sia *0 la vita di +uesto ; "ro$ramma diventa "eri!olosa1 (in verit2 ') ora vale 01)

>' im"ortante notare !(e i regi#tri $a 8 bit <alti< o <ba##i< #ono regi#tri !om"letamente $i+er#i %ra loroD le o"era,ioni e%%ett'ate #' )L non (anno al!'n e%%etto #' )I n8 #' ne##'n altro regi#tro tranne )& $i !'i )L 6 la "arte ba##a. 9iB #igni%i!a !(e "er e#em"io non !'6 n'lla $i $i+er#o nell''#are i regi#tri )L e CI "i'tto#to !(e )L e )I. Ge$iamo 'n e#em"io !(e $o+rebbe !(iarire la rela,ione %ra il regi#tro $a 16 bit e$ i $'e $a 8 bitD
MOV AL, 0 MOV A), 1 ; s!rive 0 ne$li ( 3it meno ; si$ni i!ativi di A& ; s!rive 1 nella "arte alta di A&

Il ri#'ltato $i 5'e#te o"era,ioni 6 il #eg'enteD 0 0 0 0 0 )I 0 0 1 0 0 0 0 0 )L 0 0 0

Golen$o ottenere lo #te##o ri#'ltato !on 'na #ola i#tr',ione #i "'B %are !o#=D
MOV A&, 0100%; s!rive *45 in A&

*n $'bbio ti"i!o !(e 6 meglio %'gare #'bito 6 il #eg'enteD #e $o"o 'n'o"era,ione aritmeti!a <non !'6 "i? "o#to in )L< "arte $el ri#'ltato +a a %inire in )IK
MOV A), 1*6 MOV AL, *44

La #it'a,ione $el regi#tro )& $o"o 5'e#te $'e i#tr',ioni 6 la #eg'enteD )I 01111111b 11111111b )L @'""oniamo ora $i aggi'ngere 'no a$ )LD
ADD AL, 1 ; +ui /arr7 la$ 8 1, 9ero la$ 8 1, Over lo: la$ 8 0, ;i$n la$ 8 0 ; /< 8 1 "er!%= l'istruzione %a dato un ri"orto ra numeri senza se$no ; 9< 8 1 "er!%= l'istruzione %a dato il risultato di zero (in AL1) ; O< 8 0 "er!%= l'istruzione ra numeri !on se$no > !orretta (?1@180) ; ;< 8 0 "er!%= il risultato %a il 3it "iA si$ni i!ativo 8 0

Cato !(e $o"o la )CC il ri#'ltato $o+rebbe e##ere 256 !(e non !i #ta in )L a 5'al!'no "otrebbe +enire il $'bbio !(e )L +a$a a$ <in+a$ere< )I "er !'i il ri#'ltato $i 5'elle tre i#tr',ioni #ia il #eg'enteD 06 )r!(itett'ra 8086.#Aw Ger. 0.9.0 2005-10-12 ". E $i 8

Ing. Gabriele MONTI )I 00000001b 00000000b )L I:OT>@I >LL)T)M

www.ingmonti.it

In+e!e non 6 !o#=. Cato !(e i $'e regi#tri $a 8 bit #ono !om"letamente in$i"en$enti il !onten'to $i )I non $e+e a##ol'tamente e##ere to!!ato $alla )CC e$ il +ero ri#'ltato %inale #ar2 il #eg'enteD )I 01111111b 00000000b )L I:OT>@I GI*@T)M

@i noti !(e )I rimane e#attamente 'g'ale a "rima !io6 6 127. In )L il ri#'ltato gi'#to non !i #ta negli otto bit a $i#"o#i,ione il ri#'ltato 6 ,ero !(e 6 #bagliato "er !'i +err2 #egnalato 'n errore aritmeti!o !on il %lag $i !arr. a 1. @e l''ltima a$$i,ione %o##e #tata a 16 bit !ome nell'i#tr',ione #eg'enteD
ADD A&, 1 ; +ui /arr7

la$ 8 0, 9ero

la$ 8 0, Over lo:

la$ 8 1, ;i$n

la$ 8 1

Il ri#'ltato #arebbe #tato la #omma $el n'mero a 16 bit 01111111 1111111b /7;;;( J E2767$0 e $i 1 "er !'iD )I 1000000b 00000000b )L 100000000000000b )&

Dopo la ADD precedente i flag assumono i valori indicati per le seguenti cause: - CF = perc!" non c#$ nessun riporto fra numeri senza segno %A& $ di 1' (it!) - *F = perc!" il risultato $ diverso da zero %in A&!) - +F = 1 perc!" sommando uno ad un numero positivo $ venuto un numero negativo! % 111111111111111 , 1 = 1 ) - -F = 1 perc!" il risultato !a il (it pi. significativo = 1/ ed $ perci0 negativo.
(edremo pi1 avanti che esiste un"istruzione particolare che, operando inizialmente con un numero da ) !it "invade" un registro da 23 !it. $n%atti l"istruzione di moltiplicazione "parte" da A, e "%inisce" in AX. -eraltro c"# da dire che l"istruzione &., dell")0)3 # davvero un po" "strana" e che l""invasione" di AX avviene sempre, e non solo *uando non c"# pi1 posto in A,.

Uso specifico dei registri generali


I regi#tri generali "o##ono e##ere '#ati "er t'tti gli #!o"i "o##ono e##ere l'origine e la $e#tina,ione $i t'tte le o"era,ioni <normali< !(e 'n 8086 "'B #+olgere. 9ia#!'no $ei regi#tri generali (a an!(e 'na 'tili,,a,ione "arti!olare "er la 5'ale #olo e##o "'B e##ere '#ato. Ge$iamo 5'ali #ono 5'e#ti 'tili,,i !on l'in$i!a,ione !(e la #"iega,ione in $ettaglio +err2 $ata 5'an$o #i tratter2 $elle i#tr',ioni !oin+olte in 5'e#te 'tili,,a,ioni "arti!olari. 1'e#to %atto "'B $are e%%etti !ollaterali #e non #i #a 5'ali #ono le !on#eg'en,e $i !ia#!'na i#tr',ione. Il regi#tro )& 6 l'A!!'m'latore. )l!'ne "arti!olari i#tr',ioni '#ano )& e #olo )& "er !ontenere 'no $egli o"eran$i $i i#tr',ioni aritmeti!(e e "er memori,,arne il ri#'ltato -& 6 $etto <Ba#e< regi#ter. 9ome regi#tro ba#e +iene '#ato "er "'ntare alla memoria. Tramite -& 6 "o##ibile a!!e$ere a lo!a,ioni $i memoria #!ri+en$o "re+enti+amente l'in$iri,,o al #'o interno. 9& 6 il Contatore /9o'nter0 $ell'8086 e +iene '#ato $a 5'elle i#tr',ioni !(e ne!e##itano $i !ontare a'tomati!amente. C& +iene $etto regi#tro Dati. Il #'o '#o non 6 "arti!olare +iene '#ato "er le elabora,ioni. >' '#ato !ome "arte $ell'a!!'m'latore nelle i#tr',ioni $i molti"li!a,ione e $i+i#ione /M*L e CIG0.
i %a notare che esistono codici operativi speci%ici per le istruzioni aritmetiche che usano AX come operando, per cui se # possi!ile # meglio usare AX, A, o A4 per le operazioni aritmetiche. e si %ar/ cos5 il codice occu+ per/ meno memoria e potr/ essere un po" pi1 veloce nell"esecuzione.

Legi#tro AX BX CX DX

*#o Legi#tro $i '#o generale e A!!'m'latore Legi#tro $i '#o generale e Legi#tro "'ntatore Ba#e Legi#tro $i '#o generale e Contatore Legi#tro $i '#o generale e Legi#tro Dati

Ta e!!a 1: Uso partico!are "ei registri genera!i

". 3 $i 8

2005-10-12

06 )r!(itett'ra 8086.#Aw

Ing. Gabriele MONTI 1999 - 2005

8086

www.ingmonti.it

Registri puntatori
I regi#tri "'ntatori !ontengono in$iri,,i. :er il tramite $i 'n regi#tro "'ntatore 6 "o##ibile %are ri%erimento alla memoria in mo$o in$iretto. :rima #i mette il +alore $i 'n in$iri,,o in 'n regi#tro "'ntatore "oi #i "otr2 leggere o #!ri+ere alla lo!a,ione $i memoria !(e (a 5'ell'in$iri,,o. @'ll'a!!e##o in$iretto alla memoria #i $ir2 molto in #eg'ito in 5'e#to momento !i intere##a #olo #a"ere 5'ali #ono i regi#tri $ell'8086 !(e "o##ono e##ere '#ati !ome "'ntatori alla memoria. 1'e#ti regi#tri #ono 5'attro $'e #ono $etti regi#tri <ba#e< gli altri $'e regi#tri <in$i!e<. I regi#tri ba#e #ono gli 'ni!i il !'i nome ini,ia !on la - !io6 -& e -: mentre i regi#tri in$i!e #ono 5'elli !(e terminano !on 'na I !io6 @I e CI. I regi#tri "'ntatori $i 'n 8086 #ono #em"re $i 16 bit e$ in$i!ano 'na "arte $ell'in$iri,,o a 20 bit !(e +iene $etta <o%%#et< /+e$i "i? a+anti <#egmenta,ione< "er i $ettagli0. 9ome o%%#et non "o##ono e##ere '#ati regi#tri $i 8 bit an!(e #e %anno "arte $i -& !ome -I e -L. La 9:* &86 $al E86 in "oi "o##ono %are '#o $i in$iri,,i $i o%%#et $i 16 ma an!(e $i E2 bit. I nomi <@o'r!e In$eA< e <Ce#tination In$eA< a##egnati ri#"etti+amente a @I e CI %anno ri%erimento a$ al!'ne i#tr',ioni "arti!olari $ette <i#tr',ioni $i #tringa< !(e +e$remo "i? a+anti. :er 5'anto e##o non #ia lo #!o"o "er !'i #ono #tati in+entati i regi#tri "'ntatori "o##ono e##ere an!(e '#ati "er e%%ett'are #' $i e##i o"era,ioni aritmeti!(e +arie. :o##ono "er!iB e##ere '#ati an!(e alla #treg'a $i regi#tri generali tanto !(e al!'ni aggi'ngono ai regi#tri generali an!e @I CI e -:. La $i%%eren,a im"ortante !on 5'elli !(e noi abbiamo !(iamato regi#tri generali 6 !(e @I CI e -: non #i "o##ono $i+i$ere in $'e regi#tri $i 8 bit. Legi#tro -a#e BX B# Legi#tro In$i!e $I DI *#o :'ntatore -a#e /e regi#tro generale0 :'ntatore -a#e /Ba#e #ointer0 *#o :'ntatore In$i!e e In$i!e $ella #tringa #orgente /$o'r!e In$eA nelle o"era,ioni $i #tringa0 :'ntatore In$i!e e In$i!e $ella #tringa $e#tina,ione /De#tination In$eA nelle o"era,ioni $i #tringa0

Ta e!!a 2: registri puntatori Legi#tri "'ntatori ge#titi $alla 9:* C'e regi#tri a 16 bit $ell'8086 !ontengono #em"re in$iri,,i #ono $'n5'e regi#tri "'ntatori ma #ono ge#titi in mo$o $el t'tto a'tomati!o $alla 9:*. Cato !(e a$ aggiornarli !i "en#a la 9:* il "rogrammatore non $o+rebbe mai !ambiare i +alori !onten'ti in 5'e#ti regi#tri tranne !(e in !a#i $el t'tto e!!e,ionali e $e!i#amente <#trani<. Il "rimo $i 5'e#ti $'e "'ntatori 6 I: /In#tr'!tion #ointer0. 9ome #i "'B int'ire $a nome I: "'nta alla "ro##ima i#tr',ione $a e#eg'ire e +iene aggiornato a'tomati!amente $alla 9:* a$ ogni i#tr',ione e#eg'ita. I: 6 $'n5'e il :rogram 9o'nter $i 'n 8086 an!(e #e "er e##ere "re!i#i bi#ognerebbe $ire !(e I: 6 l'<o%%#et< $el :rogram 9o'nter. Il r'olo $i :rogram 9o'nter #"etta alla !o""ia $i regi#tri 9@DI: !ome a+remo an!(e mo$o $i e#aminare 5'an$o tratteremo $ella #egmenta,ione. L'altro "'ntatore a'tomati!o 6 @: lo sta!4 pointer !(e "'nta alla lo!a,ione $ell''ltimo +alore !onten'to in 'na im"ortante #tr'tt'ra $ati $etta <#ta!4< !(e a+remo mo$o $i trattare in $ettaglio "i? a+anti. @: 6 #olo la "arte $i o%%#et $ell'in$iri,,o $ello #ta!4. L'in$iri,,o !om"leto $ello #ta!4 6 $ato $alla !o""ia $i regi#tri @@D@: Legi#tro I# $# *#o :'ntatore alla "ro##ima i#tr',ione /o%%#et0 /In#tr'!tion #ointer0 :'ntatore allo #ta!4 /o%%#et0 /$ta!4 #ointer0

Legi#tro $i #tato /o regi#tro $ei %lag0 Il regi#tro $i #tato $i 'n 8086 6 $i 16 bit e$ 6 !(iamato <FLA%$ regi#ter<. Non t'tti i bit $i ;L)G@ #ono 'tili,,atiD nell'8086 #e ne '#ano 9 nel 286 12. I %lag "i? im"ortanti $ella %amiglia &86 #onoD ;lag aritmeti!i /#tat'# %lag#0D O &+er%low in$i!a l'errore aritmeti!o nelle o"era,ioni !on n'meri !on #egno @ $egno /@ign0 6 il bit "i? #igni%i!ati+o $el ri#'ltato 1 #e il ri#'ltato 6 negati+o N 'ero J 1 #e il ri#'ltato $ell'i#tr',ione !(e l'(a #i#temato 6 'g'ale a 0 0 altrimenti ) A$O'#t %lag /o )'Ailiar. 9arr.0 analogo al ri"orto o$ al "re#tito "er le o"era,ioni in -9C /le i#tr',ioni "er l'aritmeti!a -9C non #aranno ill'#trate in 5'e#to te#to0 : #arit2 /"arit.0 J 1 #e gli 8 bit "i? ba##i $el ri#'ltato !ontengono 'n n'mero "ari $i bit a 'no 9 Carr. /ri"orto o "re#tito0 J 1 #e !'6 ri"orto o "re#tito #'l ri#'ltato /o"era,ioni #en,a #egno0 0 altrimenti 06 )r!(itett'ra 8086.#Aw Ger. 0.9.0 2005-10-12 ". 5 $i 8

Ing. Gabriele MONTI

www.ingmonti.it

;lag $i !ontrolloD T Tra" %lag 'tile al $eb'gger "er %'n,ionare "a##o F "a##o I Interr'"t %lag #e a 'no abilita il #i#tema $'interr',ione /+e$i "ro##imo +ol'me0 C Dire!tion %lag '#ato nelle i#tr',ioni $i #tringa. @e J 1 l'i#tr',ione $i #tringa "ro!e$e $e!rementan$o gli in$iri,,i /"er le i#tr',ioni $i #tringa +e$i !a"itolo <)ltre i#tr',ioni<0 ;lag $i erroreD NT (e#te$ Ta#4 "er le o"era,ioni m'ltita#4ing /286P0 L )e#'me %lag "er le o"era,ioni m'ltita#4ing /E86P0 Nell'a""en$i!e <@et $'i#tr',ioni $ella %amiglia &86< #i tro+a in$i!ato il !om"ortamento $i ogni i#tr',ione rig'ar$o a !ia#!'no $i 5'e#ti %lag. Il $ettaglio #'l %'n,ionamento $i !ia#!'n %lag +err2 $ato 5'an$o tratteremo le i#tr',ioni !(e ne %anno '#o. >#i#tono an!(e altri %lag !(e intro$'rremo 5'an$o #ar2 o""ort'no. Il regi#tro $i #tato $i 'n E86 6 $i E2 bit e$ 6 !(iamato EFLA%$. La #'a "arte ba##a $i 16 bit 6 i$enti!a a ;L)G@ $el 286 !(e e#ten$e il regi#tro ;L)G@ $ell'8086 mantenen$o#i !om"atibile !on e##o. Il regi#tro >;L)G@ $el E86 '#a 13 %lag.

1.2.2

1egistri di segmento

I regi#tri il !'i nome %ini#!e !on @ (anno 'n '#o molto #"e!iale. Non "o##ono mai !ontenere $ati $a elaborare ma #olo "arti!olari "'ntatori !(e in$i!ano gli in$iri,,i $i memoria $'ini,io $ei <#egmenti< !ome +e$remo "i? a+anti. Cato !(e i regi#tri $i #egmento #er+ono ogni +olta !(e #i a!!e$e alla memoria e##i #ono #tati $i#lo!ati nella -I*. :er #!oraggiare l''#o $i 5'e#ti regi#tri "er #!o"i $i+er#i $a 5'elli "er !'i #ono #tati "rogettati non 6 "o##ibile e%%ett'are !al!oli aritmeti!i #' $i e##i n8 tra#%erir+i $irettamente $ei n'meri. L''ni!a !o#a !(e 6 "o##ibile %are #'i regi#tri $i #egmento 6 !o"iare #' $i e##i il +alore !onten'to in 'n regi#tro generale. D$ :'ntatore all'ini,io $el #egmento $ati /Data $egment0 $$ :'ntatore all'ini,io $el #egmento #ta!4 /$ta!4 $egment0 C$ :'ntatore all'ini,io $el #egmento !o$i!e /Co$e $egment0 E$ :'ntatore all'ini,io $ell'EAtra $egment F$ :'ntatore all'ini,io $i 'n altro #egmento eAtra /#olo E86 e P0 %$ :'ntatore all'ini,io $i 'n altro #egmento eAtra /#olo E86 e P0 :er 5'anto rig'ar$a la #"iega,ione $ell'a!!e##o in memoria tramite i regi#tri $i #egmento #i riman$a al !a"itolo relati+o alla #egmenta,ione. Notiamo #oltanto !(e !ome #i +e$e nella ;ig'ra E "er la "ro$',ione $ell'in$iri,,o $i memoria 6 'tili,,ato 'n "arti!olare <#ommatore $'in$iri,,o<. 1'e#to #ommatore reali,,a 'na #trana #omma %ra $'e 5'antit2 $i 16 bit. Il ri#'ltato $i 5'e#ta #omma 6 l'in$iri,,o $i 20 bit. *no $egli o"eran$i $i 5'e#ta #omma 6 #em"re e !om'n5'e 'no $ei regi#tri $i #egmento !ome #i "'B a""re,,are an!(e $alla %ig'ra. Nella $o!'menta,ione Intel or$inaria non #ono in$i!ati regi#tri tem"oranei !(e !om'n5'e non #ono intere##anti "er il "rogrammatore !(e !ome gi2 +i#to non "'B %arne '#o.

". 6 $i 8

2005-10-12

06 )r!(itett'ra 8086.#Aw

Ing. Gabriele MONTI 1999 - 2005

8086

www.ingmonti.it

;ig'ra ED #!(ema #em"li%i!ato $ell'ar!(itett'ra $ell'8086 La %ig'ra non 6 e#attamente 'g'ale a 5'ella "ro"o#ta $alla !a#a !o#tr'ttri!e nella #'a $o!'menta,ione. Giene $i#egnato 'n #olo b'# interno mentre Intel ne in$i!a tre. >' in$i!ato an!(e 'n !ollegamento %ra la !a!(e $elle i#tr',ioni e$ 'n regi#tro tem"oraneo $'i#tr',ione !(e la !a#a !o#tr'ttri!e non men,iona. 1'e#to #olo "er ren$ere "i? !(iaro il %atto !(e il !o$i!e o"erati+o $ella "ro##ima i#tr',ione $a e#eg'ire "'B "ro+enire $al $ata b'# %a!en$o il "er!or#o normale $i 'na %a#e $i %et!( o""'re "'B "ro+enire $irettamente $alla !o$a $i "re%et!(.

1.3 Inizializzazione del siste a.


Co"o la ri!e,ione $el #egnale $i re#et l'8086 #i "ro!'ra il !o$i!e $ella "rima i#tr',ione $a e#eg'ire all'in$iri,,o a 20 bit 0;;;;0( !io6 16 -.te "rima $ella %ine $ella #'a memoria. ) 5'ella lo!a,ione 6 "re#ente 'na memoria elettroni!a non +olatile LOM o >:LOM. La "rima i#tr',ione %ar2 #altare a$ 'n "i!!olo 'n "rogramma $i te#t e $i !ari!amento re#i$ente in LOM. 1'e#to "rogramma normalmente $etto <:O@T< /#ower &n $el% Te#t0 +eri%i!(er2 il %'n,ionamento $ei #otto#i#temi $el !om"'ter !ari!(er2 l'ora $all'orologio in tem"o reale "oi legger2 $all'(ar$ $i#4 la "arte $el @i#tema O"erati+o !(e $e+e rimanere #em"re in memoria la !ari!(er2 in memoria e la %ar2 e#eg'ire. ) 5'el "'nto il !om"'ter #ar2 "ronto $a '#are. La #e5'en,a $i a!!en#ione $i 'n !om"'ter !on il !ari!amento ini,iale $el @i#tema O"erati+o +iene an!(e $etta #e5'en,a $i < ootstrap< /la!!i $i #ti+aleM0 o < oot<.

1.! "enni alla fa iglia #86


Co"o l'8086 /19780 +ennero reali,,ati l'80186 e l'80286 /19820. Mentre l'80186 non a+e+a #o#tan,iali no+it2 "er 5'anto rig'ar$a il #o%tware il <286< intro$'!e+a la <mo$alit2 "rotetta< #'lla 5'ale #i torner2 in $ettaglio nel "ro##imo +ol'me. 1'e#to mo$o $i %'n,ionare $ella 9:* ai'ta il #o%tware nella reali,,a,ione $i @i#temi O"erati+i <m'lti"rogrammati< /#' $i e##i #i #"en$eranno al!'ni !a"itoli $el Gol'me #e!on$o0. Le "i? gran$i no+it2 #o%tware $ella %amiglia 80&86 %'rono intro$otte !on l'80E86 /19850 'na 9:* a "aralleli#mo interno $i E2 bit. Il %'n,ionamento in mo$o "rotetto $el <E86< era molto "i? !om"leto $i 5'ello $ella 9:* "re!e$ente. I @i#temi O"erati+i "er :9 $el giorno $'oggi /e#. Qin$ow# *niA Lin'A0 #ono #tati #!ritti "er il #et $'i#tr',ioni $el E86 e non "o##ono %'n,ionare !on le 9:* "re!e$enti. Il E86 (a regi#tri a E2 bit !(e inglobano 5'elli a 16 bit $elle 9:* "re!e$enti $ella %amiglia. I nomi $ei regi#tri a E2 bit $el E86 ini,iano !on 'na > /en(an!e$ <migliorato<0 #eg'ita $al nome $el !orri#"on$ente regi#tro 8086. Nel E86 !i #ono "er!iB i regi#tri $a E2 bit >)& >-& >9& >C& >@I >CI >-: >@: >I:. I regi#tri $i #egmento rimangono a 16 bit ma ne #ono aggi'nti $'e. >##i #ono "er!iB 9@ C@ @@ >@ ;@ G@. 06 )r!(itett'ra 8086.#Aw Ger. 0.9.0 2005-10-12 ". 7 $i 8

Ing. Gabriele MONTI

www.ingmonti.it

Il E86 (a molte n'o+e i#tr',ioni "er la+orare !on i regi#tri a E2 bit e "er ge#tire la mo$alit2 "rotetta. Le 9:* &86 #'!!e##i+e al E86 non (anno ri+ol',ionato il mo$o $i #!ri+ere il #o%tware "er &86H $al "'nto $i +i#ta $el "rogrammatore 386 /19910 :enti'm /199E0 :enti'm II /19950 e le 9:* !on!orrenti )MC #ono #olo $ei E86 molto "i? "otenti. Le 9:* )MC $ella #erie <O"teron< #ono 'n'e#ten#ione a 63 bit $ell'ar!(itett'ra &86. Nel #eg'ito $i 5'e#to +ol'me #i %ar2 !enno a$ al!'ne $elle "arti!olarit2 $el #et $'i#tr',ioni e $ei regi#tri $el E86 "'r #en,a #!en$ere e!!e##i+amente nei $ettagli. *na tratta,ione "i? e#a'#ti+a +err2 %atta nel Gol'me #e!on$o.

1.2.1

3ultiple4ing dei (us

,")0)3 ha una caratteristica hard6are particolare, condivisa anche da altre C-. modestamente complesse, detta "multiple7ing dei !us". Questa tecnica permette di condividere gli stessi piedini del circuito integrato della C-. per le %unzioni di ad+ dress !us e data !us. ,a cosa # possi!ile perch8 ogni volta che si deve accedere ai dati in memoria !isogna prima sempre emettere l"indirizzo sull"address !us. Quindi un accesso alla memoria si sviluppa sempre in due %asi: 2 + emissione dell"indirizzo 9 : tras%erimento dei dati %ruttando *uesta se*uenzialit/ alcuni tipi di C-. usano gli stessi piedini per gli indirizzi durante la %ase 2 e per i dati da tras%erire durante la %ase 9. ,"indirizzo per; deve essere mantenuto attivo per tutto il tempo dell"accesso alla memoria per cui sono neces+ sari dei dispositivi logici esterni ("latch") che memorizzano le linee dei !us nel momenti in cui # presente l"in+ dirizzo e lo mantengono anche *uando il signi%icato dei piedini della C-. cam!ia, divenendo linee di dati. $l multiple7ing dei !us viene usato per risparmiare nel numero dei piedini del microprocessore, cosa che im+ plica una maggiore a%%ida!ilit/ del chip (*uello che non c"# non si rompe) ed un minor costo della scheda ma+ dre. C-. molto semplici come certi microcontrollori per sistemi em!edded di solito non ne %anno uso per limitare il numero dei componenti esterni. Anche microprocessori molto complessi, che hanno diverse centinaia di piedini, di solito non usano piedini in multiple7, dato che il pro!lema di avere molti piedini in *uei p deve essere risolto comun*ue .. ,e C-. X)3 dal 9)3 in poi non usano il multiple7ing dei !us.

!!!! da fare! Figura *: +u!tip!exing "ei us

Curiosit
Nel roman,o %anta#ti!o <Le a++ent're $el -arone $i M'n!((a'#en < /L.>. La#"e 17850 il "rotagoni#ta rie#!e a +olare #em"li!emente tiran$o %orte #'i la!!i $ei #'oi #ti+ali /boot#tra"#M0. Il termine #e5'en,a $i <boot#tra"< '#ato "er in$i!are la #e5'en,a $i a++iamento $i 'n !om"'ter %a ri%erimento a 5'e#to ra!!onto. 9ome il -arone $i M'n!(a'#en #i <a'to#olle+a< !on i #'oi #te##i la!!i !o#= 'n !om"'ter $'rante il <boot#tra"< !ari!a il #'o #o%tware !on il #'o #te##o #o%tware.

". 8 $i 8

2005-10-12

06 )r!(itett'ra 8086.#Aw