Sei sulla pagina 1di 12

Ing.

Gabriele MONTI 1999 - 2004

Segmentazione

www.ingmonti.it

Segmentazione degli indirizzi di memoria nell'8086

Nel capitolo !ll"arc#itett!ra $ell"%0%& abbiamo $etto $ell"e i tenza $i regi tri $i egmento' c#e er(ono a$ e ten$ere )ino a 20 bit il paralleli mo $ell"a$$re b! ' !tilizzan$o $!e regi tri $a 1& bit ommati' $opo c#e !no $ei $!e *il + egmento+, - tato moltiplicato per 1&. .e$iamo ora come i opera con i regi tri $i egmento e co a ci mette a $i po izione l"/ embl0 per la loro ge tione.

1.1

Calcolo dell'indirizzo a 20 bit

Ogni in$irizzo c#e (iene eme o !ll"/$$re 1! $i !n %0%& - a 20 bit. 2ome gi3 abbiamo (i to il paralleli mo interno $ella 245 - $i 1& bit' per c!i la ge tione $iretta $i regi tri a 20 bit arebbe tata como$a e $i))icile. 4er 6!e to il co tr!ttore $eci e $i )ar generare a!tomaticamente alla 245 gli in$irizzi $a 20 bit' !tilizzan$o $!e regi tri $a 1& bit e realizzan$o l"acce o alla memoria con il *)amigerato7, meccani mo $ella egmentazione. 8!e to mo$o $i calcolare l"in$irizzo pre(e$e la $i(i ione $ell"in$irizzo in $!e +parti+' parzialmente o(rappo te' c!i i $3 il nome $i segmento e offset. 4er la parte $i egmento la 245 !tilizza empre !no $egli in$irizzi $i egmento' gi3 bre(emente intro$otti nel capitolo c#e rig!ar$a l"arc#itett!ra $ell"%0%&. 9a parte $i o)) et (iene pre a $a !n altro regi tro' opp!re calcolata come omma $i tre elementi: il conten!to $i !n regitro ba e' $i !n regi tro in$ice e $i !n n!mero )i o $etto +$i placement+. 2on egmento e o)) et la 245 e eg!e !na trana + omma+' c#e pro$!ce l"in$irizzo a 20 bit ! ato !l b! . 9a + omma+ (iene e))ett!ata' ogni (olta c#e i $e(e acce$ere a$ !na locazione $i memoria' $a !no peciale ommatore $i in$irizzi' it!ato nella 1I5 *1!e Inter)ace 5nit, $ella 245 *(e$i ;ig!ra 1,. 8!e to ommatore ottiene !n in$irizzo $i 20 bit a partire $a $!e 6!antit3 $i 1& bit con il eg!ente proce$imento: 1, aggi!nge 4 bit n!lli a $e tra regi tro $i egmento c#e !tilizza' ottenen$o !n n!mero $a 20 bit 2, omma con l"o)) et il n!mero a 20 bit otten!to $al egmento <, emette !ll"/$$re b! il n!mero a 20 bit otten!to $alla omma *i n!meri come in ;ig!ra 1,. 9"aggi!nta $ei 4 bit al regi tro $i egmento' c#e e6!i(ale a moltiplicarlo per 1&' non permette $i raggi!ngere 6!al ia i locazione $i memoria' ma olo 6!elle m!ltiple $i 1&. 4er 6!e to c"- bi ogno anc#e $ell"o)) et per !tilizzare !na locazione 6!al ia i $ella memoria. =;I9>? SommaSegm.;@A =B;I9>? Figura 1: somma per la segmentazione 8086 .e$iamo' in binario e$ in $ecimale' la te a omma per egmentazione c#e appare in ;ig!ra 1' )atta !lla carta: 0 0 0 1 0 0 0 0 0 1 1 0 1 0 1 1 0 1 0 0 0 & 0 1 & 0 1 1 0 0 0 0 1 1 0 0 0 0 / / 0 0 0 0 0 1 1 1 0 1 0 1 < 2 A 0 0 0 0 1 1 0 0 0 0 0 0 0 4 4 Segm C 0000 C o)) et D in$. a 20 bit Segm C 0000 C O)) et D in$. a 20 bit

Figura 2: segmento "pi" offset

1.2

Segmento e offset

Il meccani mo $ella omma per la egmentazione #a con eg!enze $irette ! come il programmatore $e(e ! are gli in$irizzi $i !n %0%&. 9a memoria $i !n %0%& - acce ibile in $!e mo$i: entro il + egmento+ e )!ori $al egmento. Nella programmazione or$inaria i regi tri $i egmento aranno i temati !na (olta per t!tte' poi ci i m!o(er3 in memoria mo$i)ican$o il olo o)) et. 10 Segmentazione %0%& .er. 0.9.0 2004-12-01 p. 1 $i 12

Ing. Gabriele MONTI 1999 - 2004

www.ingmonti.it

Il termine o)) et (iene ! ato in molti conte ti $ella tecnica *per e empio in >lettronica, con il igni)icato $i +$i))erenza ri petto a$ !n (alore $i ri)erimento. =>.IE>NFI/TO? 9"o)) et nella egmentazione e prime la $i tanza $ella locazione c!i (ogliamo acce$ere ri petto all"inizio $el egmento. =B>.IE>NFI/TO? In 6!e to ca o - !n termine ben celto' perc#G l"inizio $el egmento - il +(alore $i ri)erimento + e ci i po ta !tilizzan$o l"o)) et. =>.IE>NFI/TO? 9"inizio $el egmento - egnato $al regi tro $i egmento. =B>.IE>NFI/TO? Ogni regi tro $i egmento p!nta a$ !na peci)ica po izione $i memoria' c#e #a !n in$irizzo m!ltiplo $i 1&' $ato c#e #a 6!attro bit n!lli a $e tra. 8!e to in$irizzo - l"inizio $el egmento. =>.IE>NFI/TO? 5n egmento - l"area $i memoria raggi!ngibile mo$i)ican$o olo l"o)) et. Eato c#e l"o)) et #a 1& bit !n egmento $ell"%0%& p!H a(ere !na $imen ione ma ima $i &4 I10te. =B>.IE>NFI/TO? 5na (olta +)i ato+ l"in$irizzo $"inizio $el egmento' ci i p!H m!o(ere all"interno $i e o mo$i)ican$o il olo o)) et. 4er an$are )!ori $al egmento corrente e raggi!ngere ogni po ibile locazione $i memoria - nece ario mo$i)icare il (alore $el regi tro $i egmento. 5n egmento p!H a(ere !na $imen ione 6!al ia i compre a )ra 0 e ;;;;# *&4I10te,. I egmenti po ono anc#e coinci$ere: regi tri $i egmento $i(er i po ono p!ntare allo te o in$irizzo. 9a ;ig!ra < mo tra gra)icamente il regi tro $i egmento c#e p!nta all"inizio $el egmento' !n in$irizzo raggi!nto con !no peci)ico o)) et e l"!ltimo in$irizzo raggi!ngibile $el egmento. =;I9>? SegO;;S>T.;@A =B;I9>? Figura 3: segmento e offset

1.2.1

Notazione per la segmentazione

Nella notazione in(entata $al pro$!ttore l"operazione $i egmentazione (iene in$icata con il egno +:+. 4erciH e' trattan$o $i in$irizzi $i memoria' i (e$ono $!e n!meri eparati $a !n $!ep!nti' allora 6!ello critto a ini tra - il egmento e 6!ello a $e tra l"o)) et. 9e po izioni ono celte in mo$o logico' $ato c#e il egmento contrib!i ce piJ per la parte alta $el n!mero a 20 bit' mentre l"o)) et )orni ce t!tti i 4 bit meno igni)icati(i. > empio: 12<4#:12<4# D 1<AK4# 2#iameremo +in$irizzo egmentato+ 6!ello compo to $alle !e $!e parti $i 1& bit' egmento e o)) et' mentre c#iameremo +in$irizzo )i ico+ l"in$irizzo a 20 bit c#e (iene e))etti(amente critto !ll"a$$re b! . /lc!ni c#iamano +in$irizzo logico+ l"in$irizzo egmentato' per 6!anto e o ia !n termine !n po" in)lazionato' $ato c#e (iene ! ato anc#e in altri conte ti con igni)icato $i(er o. =;I9>? In$Segm.;@A =B;I9>? Figura 4: indirizzo segmentato ed indirizzo fisico

1.2.2

Pericoli e limitazioni della segmentazione 8086

Il principale (antaggio $ella egmentazione %0%& - il )atto c#e lo te o in$irizzo )i ico p!H e ere originato in molti mo$i $i(er i. =;I9>? Molti.;@A =B;I9>? Figura 5: molti indirizzi segmentati per lo stesso indirizzo fisico /nalizzan$o attentamente la ;ig!ra A ci i ren$e conto c#e t!tti gli in$irizzi egmentati c#e (i ono in$icati p!ntano allo te o in$irizzo )i ico. 2"- anc#e $a $ire c#e in (erit3 6!elle ill! trate ono poc#i ime $elle combinazioni egmento L o)) et c#e p!ntano allo te o in$irizzo. 5n altro pericolo latente nell"! o $ella egmentazione %0%& - c#e lo te o o)) et p!H corri pon$ere a$ in$irizzi $i(er i' come ill! triamo nel pro imo paragra)o. p. 2 $i 12 2004-12-01 10 Segmentazione %0%&

Ing. Gabriele MONTI 1999 - 2004

Segmentazione

www.ingmonti.it

Eato c#e i regi tri $i egmento non ono nella >5' ma nella 1I5' non #anno a $i po izione la /95. 4ertanto !i regi tri $i egmento non i po ono (olgere operazione aritmetic#e e nepp!re tra )erire n!meri in imme$iato. 9"!nica co a c#e i p!H )are - copiare al loro interno il conten!to $i !n regi tro generale o leggerlo $alla memoria. > empi: =2OEI2>? MO. ES' /M N GI5ST/: i p!H copiare in ES il conten!to $i !n regi tro generale MO. >S' O14 C &P N GI5ST/: i p!H leggere $alla memoria /EE ES' & N (ietata l"operazione aritmetica MO. SS' 2% N (ietato il tra )erimento in imme$iato =B2OEI2>?

1.2.3

Uso dei registri di segmento da parte della CPU

=>.IE>NFI/TO? T!tte le operazioni relati(e alla egmentazione ono (olte a!tomaticamente $alla 245N il programmatore non - coin(olto in alc!n mo$o nella + omma+ )ra egmento e$ o)) et. =B>.IE>NFI/TO? Inoltre egli - coin(olto nella celta $el regi tro $i egmento $a !tilizzare nella + omma+ olo in ca i e tremamente rari *(e$ere +o(erri$e+' nel pro ieg!o,. E!n6!e nella tragran$e maggioranza $ei ca i la 245 ceglier3 a!tomaticamente anc#e il regi tro $i egmento $a !tilizzare nella + omma+' con i criteri c#e an$iamo a$ e porre. 9a 245 ceglie 6!ale regi tro $i egmento ! are in ba e a ciH c#e ta )acen$o in 6!el momento. Il nome $ei regi tri $i egmento ci $ice in c#e occa ione e i (engono ! ati.

CS

2S *Co$e egment, $e(e p!ntare al co$ice' in)atti contiene l"in$irizzo $el egmento $i co$ice' cio- $ell"area $i memoria in c!i ri ie$e il programma in e ec!zione. 4erciH la 245 $e(e ! are 2S 6!an$o - in )a e $i )etc# e $e(e rec!perare il co$ice operati(o $ella pro ima i tr!zione $a e eg!ire. 9"o)) et c#e la 245 !tilizza empre con 2S - I4. 8!e to c#iari ce l"a))ermazione )atta prece$entemente c#e 2S:I4 - il 4rogram 2o!nter $ell"%0%&. In)atti l"in$irizzo egmentato 2S:I4 p!nta empre alla pro ima i tr!zione $a e eg!ire' come ogni bra(o 4rogram 2o!nter. /$ ogni )a e $i )etc# la 245 aggiorna a!tomaticamente I4 in mo$o c#e 2S:I4 p!nti all"itr!zione eg!ente.

DS
ES *!ata egment, $e(e p!ntare ai $ati: contiene il p!ntatore alla prima locazione $el egmento in c!i i memorizzano i $ati. T!tte le i tr!zioni +normali+ ! ano a!tomaticamente il regi tro ES 6!an$o $e(ono acce$ere alla memoria. 4er e empio l"i tr!zione:
<CODICE> ADD [variabile + BX + SI + 3], 6 </CODICE>

!tilizza ES come regi tro $i egmento. 2ome o)) et !tilizza ciH c#e c"- )ra le parente i 6!a$reN in 6!e to ca o la 245 aggi!nge' a tempo $i e ec!zione: - il conten!to $el regi tro ba e 1M nel momento in c!i l"i tr!zione (iene e eg!ita - il conten!to $el regi tro ba e 1M nel momento in c!i l"i tr!zione (iene e eg!ita - il (alore )i o $el $i placement' calcolato $al compilatore !na (olta per t!tte a tempo $i compilazione' co tit!ito $all"in$irizzo nella tabella $ei imboli $el imbolo +(ariabile+ c!i - aggi!nto <. 4er c!i l"in$irizzo egmentato !tilizzato - ES:* 1M C SI C *(ariabile C <,,.

SS

SS * tacI egment, p!nta all"inizio $el egmento $i tacI. S!llo tacI torneremo piJ a(anti' 6!i i p!H $ire c#e' iccome le i tr!zioni c#e ! ano lo tacI ono olo $!e *45S@ e 4O4,' la 245 ! a a!tomaticamente il regi tro SS 6!an$o e eg!e 6!elle $!e i tr!zioni. 9a parte $i o)) et per le operazioni !llo tacI - )ornita $a S4' per c!i 6!an$o la 245 ricono ce il co$ice operati(o $i !n"i tr!zione 6!ale !na 45S@ o$ !na 4O4 opera all"in$irizzo egmentato SS:S4. 5 o $i 14 9"altro ca o in c!i l"! o $i SS - a!tomatico - 6!an$o nel calcolo $ella parte $i o)) et - coin(olto il regi tro 14. In)atti 6!an$o i ! a 14 (iene !tilizzato il regi tro $i egmento SS. .e$iamo !n e empio $i co$ice c#e la cia !n po" perple i:
<CODICE> MOV BP, BX MOV AX, [BX] MOV CX, [BP] ; c !cl"#i !e #ba$lia%a& AX ' #e()re "$"ale a CX ; *BX + BP +> l,i!-iri.. ' "$"ale/

10 Segmentazione %0%&

.er. 0.9.0 2004-12-01

p. < $i 12

Ing. Gabriele MONTI 1999 - 2004


; 0O1 2av ra! </CODICE> #" #e$(e!%i -iver#i +> l,i!-iri.. 0O0 ' "$"ale

www.ingmonti.it

9a (i ta $i 6!e to co$ice ci )a pen are $i e ere $i )ronte a$ !n mo$o trano per copiare il conten!to $ella te a locazione $i memoria nei $!e regi tri /M e 2M. / prima (i ta in)atti l"in$irizzamento - !g!ale. Ma in (erit3 l"!nica co a c#e - !g!ale - l"o)) et $ei $!e in$irizzi. 4erc#G l"in$irizzo )i ico )o e !g!ale $o(rebbero e erlo anc#e le $!e parti $i egmento. Ma ciH non - a ol!tamente $etto' $ato c#e MO. /M' O1MP ! a il egmento ES *in$irizzo egmentato ES:1M,' mentre MO. 2M' O14P ! a SS *in$irizzo SS:14,. 9a eg!ente )ig!ra ill! tra !n e empio c#e c#iari ce !lteriormente 6!anto $etto: =;I9>? E!e9oc.;@A =B;I9>? Figura 6: due locazioni di"erse con lo stesso offset 2on i (alori in$icati in )ig!ra e le linee $i co$ice prece$enti' /M e 2M non arebbero !g!ali' ma /M (arrebbe 20' mentre 2M 1000. 8!e to e empio ci )a (e$ere !n"altra tranezza $ello c#ema $i egmentazione celto per l"%0%&. E!e acce i alla memoria c#e embrano p!ntare allo te o in$irizzo in (erit3 in$icano in$irizzi $el t!tto $i(er i. 8!e to p!H portare )acilmente a$ errori. 9a egmentazione - )or e la piJ importante ca! a $i problemi $i a))i$abilit3 nei programmi per MS EOS. /l giorno $"oggi i programmi critti per i proce ori a <2 bit $ella )amiglia M%&' c#e (anno $al <%& in poi' po ono ! are !no c#ema $i acce o alla memoria c#e )a $i )atto a meno $ella egmentazione *(e$ere nel pro imo (ol!me il +mo$ello piatto+ $ella programmazione in mo$o protetto,.

ES

>S *#Qtra egment, - !n regi tro $i egmento a $i po izione $el programmatore. > o (iene ! ato a!tomaticamente $alla 245 olo $!rante l"e ec!zione $i poc#e i tr!zioni $i tringa' molto particolari. 9e i tr!zioni +normali+ ! ano >S olo e lo i in$ica e plicitamente tramite !n"operazione c#e (iene $etta +o(erri$e+ *(e$i pro imo paragra)o,. Nelle 245 $al <%& in poi ono incl! i anc#e $!e n!o(i regi tri $i egmento: ;S e GS' c#e ono +eQtra+' ! ati olo in o(erri$e.

1.2.4

Override

9a parola +o((eri$e+ o +)orzat!ra $i egmento+' in$ica lo + ca(alcamento+ *o(er L ri$e' app!nto, $el egmento c#e la 245 ! a a!tomaticamente *per +$e)a!lt+,. 9a inta i $ell"/ embl0 %0%& relati(a all"o(erri$e - emplice: ba ta anteporre alla parente i 6!a$ra il nome $el regi tro $i egmento c#e i (!ole ! are al po to $i 6!ello $i $e)a!lt e eparare il nome $alla parente i 6!a$ra con !n +:+. <SINTASSI> <IstruzioneConOverride> := <CodiceMnemonico> <RegistroDiSegmento> : _ <Oper ndoInMemori > !" <oper ndo># <$SINTASSI> /lc!ni e empi:
<CODICE> MOV AX, ES&[BX]

; l,i!-iri.. #e$(e!%a% c3e vie!e "%ili..a% ' ; ES&BX, i!vece c3e DS&BX ADD B45E P56 DS&[BP], 78 ; # ((a all,i!-iri.. DS&BP, i!vece c3e i! SS&BP, ; c3e ' il -e9a"l% :"a!- #i "#a BP 9ra )are!%e#i :"a-re M;2 CS&[Pri( ] ; "#a l,i!-iri.. CS& O<<SE5 -i Pri( ; #i ! %i c3e 9ace!- l, verri-e #i ) ## ! (e( ri..are ; -a%i a!c3e !el #e$(e!% -i c -ice MOV =O6D P56 DS&[SI + 7], 8 ; :"e#% verri-e ' i!"%ile, )erc3> l,i!-iri.. #arebbe ; #%a% c ("!:"e DS&*SI + 7/ </CODICE>

> i te anc#e !n"altra inta i per l"o(erri$e' c#e pieg#iamo con !n e empio:
<CODICE> MOV AX, [ES&BX] </CODICE>

c#e (iene compilato e attamente come il primo $egli e empi prece$enti. 9a pre)erenza $ell"a!tore (a alla prima inta i ill! trata' perc#G ! an$ola i la ciano $entro le parente i 6!a$re entit3 relati(e al olo o)) et. L override viene realizzato in ling!aggio macc"ina anteponendo al codice operativo dell istr!zione normale !n pre#isso di !n $%te c"e indica& oltre il #atto c"e la CPU deve #are l override& anc"e '!ale registro di segmento deve essere !sato al posto di '!ello di de#a!lt. (l compilatore si preocc!pa di inserire a tempo di compilazione il pre#isso in '!estione nel codice oggetto. p. 4 $i 12 2004-12-01 10 Segmentazione %0%&

Ing. Gabriele MONTI 1999 - 2004

Segmentazione

www.ingmonti.it

)ediamo in ling!aggio macc"ina come #!nziona l override& analizzando alc!ni esempi*


<CODICE> S r$e!%e MOV ? r- )%r MOV ? r- )%r MOV ? r- )%r MOV ? r- )%r MOV ? r- )%r MOV ? r- )%r </CODICE> [@], 7 DS&[@], ES&[@], SS&[@], CS&[@], DS&[@ + 2i!$"a$$i (acc3i!a CA86 8@88 8788 CA86 8@88 8788 @6 CA86 8@88 8788 36 CA86 8@88 8788 @E CA86 8@88 8788 3E CAB6 8@88 8788

7 7 7 7 BP],

+nc"e l override del secondo di '!esti esempi , -in!tile-& per. il compilatore c"e "a generato il relativo ling!aggio macc"ina se ne , reso conto e non "a anteposto il pre#isso di override. Negli altri casi invece c , sempre !n pre#isso di override. =>.IE>NFI/TO? Sc#ema $i riepilogo 2o$ice Eati StacI >Qtra >Qtra >Qtra =B>.IE>NFI/TO?

!ll"! 2S ES SS >S ;S GS

o $ei regi tri $i egmento: ! ato nelle )a i $i )etc# ! ato nelle )a i $i eQec!te $elle i tr!zioni +normali+ ! ato nelle operazioni nello tacI e 6!an$o i ! a O14P ! ato come egmento $i ri er(a in o(erri$e e in alc!ne i tr!zioni $i tringa *<%&?, ! ato olo con o(erri$e *<%&?, ! ato olo con o(erri$e

1.2./

0!mp N1+2 e 3+2

Siccome il 4rogram 2o!nter $i !n %0%& - co tit!ito $a $!e regi tri' 2S e I4' i po ono in$i(i$!are $!e tipi $i R!mp incon$izionate: 6!elle c#e mo$i)icano olo I4 e 6!elle c#e mo$i)icano ia 2S c#e I4. Siccome le prime rimangono all"interno $el egmento' e e (engono $ette $ump %#&' *(icine,. 8!elle in(ece c#e' mo$i)ican$o anc#e 2S' po ono raggi!ngere ogni p!nto $ello pazio $i in$irizzi $ella 245 (engono $ette $ump F&' *lontane,. 4er in$icare all"/ embler 6!ale tipo $i R!mp i (!ole )are i ! a il co tr!tto 4TS' nella !a )orma N>/S o ;/S: <SINTASSI> %M& !N'AR &TR# <( )e(> * +ump ne r pointer * I& <, O--S'T <( )e(> %M& !-AR &TR# <( )e(> * +ump . r pointer * I& <, O--S'T <( )e(> * CS <, S'/ <( )e(> <$SINTASSI> Nella TM4 N>/S e =label? - e))etti(amente al $i )!ori $el egmento' il compilatore non p!H )ar altro c#e )ermar i e non concl!$ere la compilazione. Nella TM4 ;/S e =label? - in e))etti all"interno $el egmento c!i $e(e altare (iene ri critto anc#e 2S' c#e perH rimane !g!ale. Se non i in$ica nG N>/S nG ;/S la R!mp (iene )atta N>/S. > empio:
<CODICE> CMP CMP 0EA6 P56 AX

; C (e #i )"D ve-ere -alla %abella -elle i#%r".i !i, ; i! A))e!-ice, ' ) ##ibile caricare l,i!-iri.. *!ear/ ; -a "! re$i#%r -a 76 bi% CMP <A6 P56 [I!-iri.. <A6] </CODICE>

Nella ;ig!ra 1 ono ill! trate $!e R!mp. 9a TM4 N>/S alta in$ietro $i 190A1 locazioni' ma rimane $entro al egmento att!ale *in 2S c"- /<2&#,' per c!i p!H e ere N>/S. 9a TM4 ;/S alta in a(anti $i 2 *$!e7, locazioni ma $e(e e ere ;/S' perc#G - il p!nto $i arri(o - )!ori $al egmento e per raggi!ngerlo i $e(e cambiare il (alore $i 2S *c#e $i(iene 1<2&' come mo trato $all"operazione $i omma per la egmentazione, =;I9>? TM4near;/S.;@A =B;I9>? Figura (: salti %#&' e F&' 10 Segmentazione %0%& .er. 0.9.0 2004-12-01 p. A $i 12

Ing. Gabriele MONTI 1999 - 2004

www.ingmonti.it

1.3

Direttive di segmentazione

Ogni / embler per %0%& #a $iretti(e $i(er e per permettere al programmatore $i $ic#iarare come $e(e e ere !tilizzata la memoria e come $e(e e ere $i(i a in egmenti. 9U/ embler M/SM %0%& #a $iretti(e c#e permettono il controllo completo $ellU! o $ei egmenti *$iretti(e tan$ar$,. 9"/ embler T/SM #a intro$otto $iretti(e $i egmentazione + empli)icate+' c#e ono piJ corte $a cri(ere ma $anno minore controllo ! ciH c#e i )a !i egmenti. T/SM p!H )!nzionare anc#e con $iretti(e tan$ar$.

1.3.1

4irettive standard

SEG E!"

9a $iretti(a tan$ar$ S>GM>NT er(e per iniziare !na zona $i programma orgente c#e (err3 !cce i(amente a ociata a$ !n regi tro $i egmento. Il egmento $e(e e ere empre concl! o $a !na $iretti(a >NES' prima c#e ne inizi !no n!o(o con !n"altra $iretti(a S>GM>NT. <SINTASSI> <NomeSegmento> S'/M'NT !< ((ine mento># !<com)ine># !0<c( sse>0# <$SINTASSI> =nome egmento? - !nUetic#etta il c!i imbolo p!H e ere a egnato a piacere. 9"etic#etta ar3 a ociata a 6!el egmento e $e(e e ere !tilizzata per la !cce i(a >NES. =allineamento?' =combine?' e =cla e? ono )acoltati(i. Il compilatore a egna a$ e i (alori $i $e)a!lt c#e - nece ario mo$i)icare ono con applicazioni o)i ticate . > empi:
<CODICE> Da%i SEEME05 ; -i # li% ! ! #i (e%% ! ).i !i .. :"i ci # ! -a%i i#%r".i !i Da%i E0DS ; c !cl"#i !e -i Da%i )ri(a c3e i!i.i C -e C -e SEEME05 B45E COMMO0 ,CODE, C -e E0DS Ca%a#%a SEEME05 PA6A S5ACF ,S5ACF, .. :"i ci # ! -a%i i#%r".i !i Ca%a#%a E0DS </CODICE>

=/./NF/TO?
Un programma pu avere pi di un'area di memoria SEGMENT con lo stesso nome. L'Assembler tratta tutte le one del programma c!e !anno lo stesso "NomeSegmento# come uno stesso segmento$ accodandole in memoria. L%allineamento dice al compilatore &uanti b'te dopo la (ine del segmento precedente (ar cominciare il seg) mento di cui si parla. Gli allineamenti possibili sono* +,TE il compilatore allinea i segmenti in modo da utili are il primo indiri o disponibile$ dopo la (ine del segmento precedente. -./0 utili a il primo indiri o multiplo di 1 disponibile 0-./0 utili a il primo indiri o multiplo di 2 disponibile 3A/A utili a il primo indiri o multiplo di 45 disponibile 6paragra(o7 3AGE utili a il primo indiri o multiplo di 185 disponibile 6pagina7 3er de(ault viene utili ato 3A/A. La combine dice al compilatore come (ar combinare insieme segmenti dello stesso nome e della stessa classe. Le possibili combine sono* AT (a in modo c!e l%ini io del segmento venga posto ad uno speci(ico indiri o di memoria 9.MM.N (a in modo c!e i segmenti in &uestione ini ino alla stessa loca ione$ per cui si essi si sovrappongono 3U+L:9 i segmenti in &uestione vengono concatenati$ uno di seguito all%altro$ e diventano uno solo 3/:;ATE i segmenti in &uestione non vengono combinati con altri segmenti STA9< come 3U+L:9$ ma per segmenti usati come stac= 6lin=er e loader (anno in modo c!e SS*S3 sia puntato al posto giusto7 L%uso della combine > di particolare interesse nel caso di programmi a pi moduli separatamente compilati.

p. & $i 12

2004-12-01

10 Segmentazione %0%&

Ing. Gabriele MONTI 1999 - 2004

Segmentazione

www.ingmonti.it

La classe serve a (ar porre tutti i segmenti della stessa classe in one di memoria contigue$ indipendentemen) te dal loro ordine nel programma sorgente. Esempi di classi* ?STA9<%$ ?9.0E%$ ?0ATA%. "@A;ANAAT.#

E!DS

9a $iretti(a tan$ar$ >NES er(e per terminare la zona $i programma c#e rappre enta !n egmento. 2ome gi3 $etto S>GM>NT e >NES non i po ono ni$i)icare. <SINTASSI> <nome segmento> 'NDS <$SINTASSI> Sono gi3 tati $ati $egli e empi nella trattazione $ella $iretti(a S>GM>NT.

#SS$ E

9a $iretti(a /SS5M> com!nica al compilatore a 6!ale egmento p!nta ogni regi tro $i egmento. <SINTASSI> ASS1M' <Nome di un registro di segmento>: <etic2ett di un segmento>" 33 <$SINTASSI> > empio:
<CODICE> ASS;ME CS&C -e, DS&Da%i, SS&Ca%a#%a </CODICE>

1ssa , !na direttiva -p!ra-& non #a eseg!ire ness!na istr!zione di macc"ina e serve solo al compilatore per poter calcolare gli o##set degli indirizzi in memoria c!i si #a ri#erimento 4ic"iarando a '!ale 51671N8 si v!ole associare 45 il compilatore calcoler9 gli o##set delle locazioni da !sare nelle 7O) con ri#erimento a '!el 51671N8. +55U71 non -#a- niente& nel senso c"e non cam$ia a!tomaticamente ness!no dei registri di segmento. 5e !n +55U71 in: dica il cam$iamento di !no dei registri di segmento& il programmatore dovr9 com!n'!e preocc!parsi di caricare& con delle 7O)& il n!ovo valore nel relativo registro di segmento. Una +55U71 #atta dopo !n;altra ride#inisce i registri di segmento di c!i tratta& mentre '!elli di c!i non tratta rimangono !g!ali a prima. 5enza almeno !na +55U71 del C5 !n programma non p!. essere compilato.

%&&SE"

8!e ta $iretti(a' c!i abbiamo gi3 accennato in termini piJ +ri tretti+ nel capitolo !ll"acce o alla memoria' $ice al compilatore $i pren$ere il (alore $ella parte $i O;;S>T $ellUin$irizzo a ociato a =label?. <SINTASSI> O--S'T <( )e(> <$SINTASSI> > empio:
<CODICE> MOV BX, O<<SE5 Ve%% re ; %i)ica(e!%e l, 99#e% #i (e%%e i! "! re$i#%r G)"!%a% reG c (e BX, ; )erc3> - vrH e##ere "#a% )er )"!%are alla (e( ria ; *all,i!%er! -elle )are!%e#i :"a-re/ </CODICE>

(l valore dell o##set cercato p!. essere determinato a tempo di compilazione. (l compilatore p!. calcolarlo solo se prima , stata #atta !na +55U71 a 45 del 51671N8 dove c , <la$el=. 2ome gi3 (i to nel capitolo $e$icato all"acce o alla memoria e i tono $!e mo$i per ottenere l"e))etto $i caricare in !n regi tro l"o)) et $i !n in$irizzo: oltre a O;;S>T e i te anc#e l"i tr!zione 9>/ *(e$i in$ice analitico,.

SEG

<SINTASSI> S'/ <( )e(> <$SINTASSI> 8!e ta $iretti(a $ice al compilatore $i pren$ere il (alore $ella parte $i egmento $ellUin$irizzo a ociato a =label?.*V, =NOT/?
"A;ANAAT.# 6B7 A tempo d%esecu ione &uesta in(orma ione viene messa dal loader nella parte ini iale della memoria occu) pata dal programma 6c!e si c!iama 3S3 6program segment pre(iC77. :l compilatore$ a tempo di compila ione$ pu dare l%indica ione di leggere alla giusta posi ione in &uell'area di memoria.

10 Segmentazione %0%&

.er. 0.9.0 2004-12-01

p. K $i 12

Ing. Gabriele MONTI 1999 - 2004


"@A;ANAAT.#

www.ingmonti.it

=BNOT/? > empio:

<CODICE> MOV AX, SEE Da%a </CODICE>

Il regi tro $i $e tinazione piJ logico per !na $iretti(a S>G $o(rebbe e ere !n regi tro $i egmento *2S' ES' SS' >S,' ma' come abbiamo gi3 accennato' non - po ibile tra )erire n!meri in imme$iato nei regi tri $i egmento. 4er c!i i $e(e prima tra )erire S>G in !n regi tro generale' $al 6!ale (err3 !cce i(amente copiato nel regi tro $i egmento (ol!to. 8!e ta l!nga )ra e $i ria !me nell"e empio eg!ente:
<CODICE> MOV SS, SEE S%acI2 cale ; ; ; -a% c3e ! ! #i )"D 9are MOV AX, SEE S%acI2 cale ; ; MOV SS, AX ; </CODICE> ! ! ' ) ##ibile )er le cara%%eri#%ic3e 3ar-?are -e$li B8JB6 la )rece-e!%e ci a-a%%ia( e 9accia( c #K& la )ar%e -i #e$(e!% -i :"ella e%ic3e%%a 9i!i#ce i! AX )er e##ere ) i c )ia%a i! SS

> empio:

<CODICE> ; )er vi#"ali..are "!a #%ri!$a i! MSDOS bi# $!a )a##are l, 99#e% ; -ell,i!-iri.. al #ervi.i DOS !"(er L& MOV DX, O<<ES5 S%ri!$a ; i! $e!ere le )r ##i(e i#%r".i !i ! ! #i -ev ! (e%%ere )erc3> DS ; )"!%a $iH al ) #% $i"#% M Se :"e#% ! ! ' il ca# #i -eve 9are c #K& MOV AX, SEE S%ri!$a MOV DS, AX MOV AN,8L ; #ervi.i DOS G#%a()a #%ri!$aG I05 @73 ; e#ec".i !e -el #ervi.i DOS </CODICE>

)ediamo !n elenco di ris!ltati in !n esempio con d!e segmenti. Non commenteremo '!esti ris!ltati& lasciando al lettore l o: nere di comprenderli*
<CODICE> S"! SEEME05 A DB O B DB O S"! E0DS S-"e SEEME05 C DB O S-"e E0DS </CODICE>

5i "a* 516 5!no > 516 + > 516 ? diverso 516 52 > 516 C O33518 5!no > O33518 + > O33518 5d!e > O33518 C > 0 O33518 ? > 2 Siamo ora in gra$o $i piegare pienamente le +magic#e+ i tr!zioni c#e abbiamo empre critto all"inizio $i ogni programma in / embl0.

1.3.2

4irettive sempli#icate

9a $iretti(a .MOE>9 - tata intro$otta nel T!rbo / embler e o tit!i ce le $iretti(e tan$ar$ con notazioni piJ conci e. .MOE>9 (a ! ata in ieme alle $iretti(e: .E/T/' c#e (a me a allUinizio $el egmento $ei $ati' .ST/2W' allUinizio $el egmento $i tacI' .2OE>' allUinizio $el egmento $i co$ice e >NE * enza p!nto,' alla )ine $i t!tto. 9e (arie aree $el programma non (anno concl! e con >NES' ba ta c#e inizi !na n!o(a area con !na $iretti(a +p!nto+. Non - nece ario ! are l"/SS5M>. Il compilatore )a a!tomaticamente in mo$o c#e il programma e eg!a la !a prima i tr!zione all"in$irizzo c#e corri pon$e a .2OE>. <SINTASSI> MOD'4 <mode((o di segment zione> <$SINTASSI> p. % $i 12 2004-12-01 10 Segmentazione %0%&

Ing. Gabriele MONTI 1999 - 2004

Segmentazione

www.ingmonti.it

> empio:

<CODICE> MMODE2 N;EE </CODICE>

I mo$elli $i egmentazione $i ponibili in T!rbo a embler ono: TINX 2o$ice N>/S' Eati N>/S' coinci$enti *- il mo$ello $i memoria con il 6!ale i po ono )are i )ile .2OM, SM/99 2o$ice N>/S' Eati N>/S' egmento $i co$ice $i(er o $al egmento $i $ati M>EI5M 2o$ice ;/S' Eati N>/S 2OM4/2T 2o$ice N>/S' Eati ;/S 9/SG> 2o$ice N>/S' Eati ;/S' ingoli arra0 minori $i &4I @5G> 2o$ice ;/S' Eati ;/S' ingoli arra0 com!n6!e gran$i 2ome ci i a petta il co$ice )ar - piJ lento $i 6!ello near' e$ i $ati )ar ono molto piJ $i))icili $a ge tire ri petto ai corripon$enti near. Il compilatore peraltro non - $Uai!to. > o' cono cen$o il mo$ello $i memoria' - in gra$o $i controllare c#e il programma ri pon$a alle caratteri tic#e in$icateN lUonere $i realizzare t!tte le complicazioni ric#ie te $ai mo$elli $i memoria )ar - ancora t!tto $el programmatore.

1.3.3

+ccesso a locazioni assol!te

Eato c#e l"acce o alla memoria $ell"%0%& - empre + egmentato+ i $e(e tener pre ente la egmentazione ogni (olta c#e i (!ole acce$ere a peci)ic#e locazioni $i memoria. 9"acce o a peci)ic#e locazioni $i memoria non - molto com!ne ma e i tono parecc#ie ono locazioni )i e $Uintere e c!i i potrebbe acce$ere' come la tabella $ei (ettori $Uinterr!zione *)ra 00000# e 00<;;#' (e$i il pro imo (ol!me,' l"area $i memoria $el EOS *)ra 00400# e 00A;;#, o le aree $ella memoria (i$eo $ella c#e$a gra)ica *)ra ;4000# e ;;;;;#, .e$iamo per e empio come i p!H )are per acce$ere al e$ice imo b0te $ell"area $i memoria $el EOS:
<CODICE> MM MOV AX, P83 MOV DS, AX MOV A2, [76-] MM </CODICE>

; acce##

a 88P83&88783

8!e to brano $i programma )!nziona' ma - co$ice o c!ro e poco $oc!mentato. 5n mo$o piJ c#iaro $i operare - 6!e to:
<CODICE> ; all,i!i.i -el )r $ra((a -ia( -"e -e9i!i.i !i& Se$(Me( riaDOS EQ; P83 ; ciD c3e v $li (e%%ere !el re$i#%r O99#2 ca.i !eC3eV $li EQ; 76; ciD c3e v $li "#are c (e 99#e% .. MOV AX, SEE Se$(Me( riaDOS MOV DS, AX MOV AX, [O99#2 ca.i !eC3eV $li ] .. </CODICE>

-i #e$(e!%

Il ri !ltato - lo te o $elle tre linee $i co$ice (i te in prece$enza' ma - piJ a!to$oc!mentato. 5n mo$o !n poU piJ o)i ticato $i raggi!ngere lo te o copo - 6!e to:

<CODICE> Me( riaDOS SEEME05 A5 P83 ; R il c ()ila% re #a c3e Me( riaDOS -eve i!i.iare ; all,i!-iri.. P83 O6E 783 ; il c ()ila% re #) #%a il Gl ca%i ! c "!%erG -i 783 ; )er arrivare 76 bS%e l%re l,i!i.i -ella ; (e( ria DOSM ; -e9i!i.i !e -i "!,e%ic3e%%a )er la l ca.i !e c3e -ev "#are *P83&783/& 2 ca.i !eC3eV $li D= O Me( riaDOS E0DS </CODICE>

Il compilatore' 6!an$o tro(a !n egmento $i tipo /T' non alloca memoria' ma ! a le $e)inizioni $el egmento per )are ri)erimento a po izioni )i e nella memoria. Nel cor o $el programma i p!H !tilizzare il egmento /T prece$entemente $e)inito in 6!e to mo$o:
<CODICE> ASS;ME DS& Me( riaDOS MOV AX, SEE Me( riaDOS

10 Segmentazione %0%&

.er. 0.9.0 2004-12-01

p. 9 $i 12

Ing. Gabriele MONTI 1999 - 2004


MOV DS, AX MOV AX, [2 ca.i !eC3eV $li ] </CODICE>

www.ingmonti.it

Il ri !ltato - lo te o $ei $!e ca i prece$enti' ma - piJ ic!ro' perc#G il compilatore' apen$o co a i inten$e )are' p!H )are molti piJ controlli !lla correttezza $el mo$o $i proce$ere. 5n errore nell"/ embler Il compilatore T/SM accetta enza $are errore la eg!ente i tr!zione:

<CODICE> ADD bS%e )%r 783&[8A83], 3A3 ; c ()ila (a ' SBAE2IA5A </CODICE> <CODICE> ADD bS%e )%r [8A83], 3A3 </CODICE>

9a compilazione $i 6!e ta i tr!zione $3 l"ill! ione c#e l"acce o alla memoria (enga )atto all"in$irizzo 10#:/0#. 8!e to non - (ero perc#G e i (a a (e$ere co a il compilatore pro$!ce e o - !g!ale a ciH c#e (iene pro$otto $a:

9"in$irizzo c#e (iene e))etti(amente ! ato' anc#e nella prima i tr!zione' - ES:/07

1.3.4

Caricamento di p!ntatori 3+2

4er caricare !n regi tro $i egmento i p!H ! are la $iretti(a S>G. 4er caricare !n intero in$irizzo egmentato con !na ola i tr!zione i ! a 6!ella )ra 9ES' 9SS o 9>S *9;S' 9GS per <%&?,' c#e carica la parte $i egmento nel regi tro $i egmento (ol!to. 8!e te i tr!zioni caricano ia la parte $i o)) et ia la parte $i egmento $ell"in$irizzo carican$ole $alla memoria. <SINTASSI> 4DS <Registro d 56 )it>" !<&unt tore (( memori ># * 4o d .u(( pointer using DS * .unzion mento: * MO7 <Registro d 56 )it>" !<&unt tore (( memori ># * MO7 A8" !<&unt tore (( memori > 9 :# * MO7 DS" A8 <$SINTASSI> =Segi tro $a 1& bit? - tipicamente !no $ei regi tri +p!ntatori+ *1M' SI' SI 'EI,. =4!ntatore alla memoria? - l"in$irizzo al 6!ale i $e(e leggere l"in$irizzo $a caricare Eopo l"i tr!zione ES:=Segi tro $a 1& bit? p!nta all"in$irizzo egmentato c#e i tro(a nei 6!attro b0te c#e partono $a ES: O=p!ntatore alla memoria?P 9 9# 9F 9) carica nello tacI egment regi ter *SS,' per il re to - !g!ale a 9ESN carica nello eQtra egment regi ter *>S,N carica nello ; egment regi ter *;S' <%&?,N carica nello G egment regi ter *GS' <%&?,N

> empi:

<CODICE> 2DS SI, 2ES DI,

[I!-iri.. S%ri!$a7] ; SI <T =O6D P56 [I!-iri.. S%ri!$a7] ; DS <T =O6D P56 [I!-iri.. S%ri!$a7 + @] [I!-iri.. S%r@]

; SI <T =O6D P56 [I!-iri.. S%r@] ; DS <T =O6D P56 [I!-iri.. S%r@ + @] ; le -"e i#%r".i !i )rece-e!%i # ! i-eali )er )re)arare a; "!,i#%r".i !e -i #%ri!$a *ve-i il ca)i% l GAl%re i#%r".i !iG/ 2DS SI, D=O6D P56 SS&[SI+7@] ; #i )"D 9are l, verri-e i! le%%"ra 2SS AX, ES&[@73 U P] ; #i )"D caricare i! AX, a!c3e ; #e ! ! ' ( l% "%ile MM 2ES AX, AX ; 0O1 0 ! #i )"D caricare -a "! re$i#%r 2DS AX, @78 ; 0O1 0 ! #i )"D i! i((e-ia% </CODICE> "A;ANAAT.# Dueste istru ioni sono state estese per (un ionare anc!e nelle 93U a E1 bit della (amiglia FG5$ anc!e se nel) la programma ione in Hmodo piattoH 6vedi prossimo volume7 sono usate molto raramente. Le istru ioni di caricamento puntatori a E1 bit caricano l'o((set a E1 bit tipico delle 93U FG5 a partire dal EG5. "@A;ANAAT.#

Esem'io finale
<CODICE>

p. 10 $i 12

2004-12-01

10 Segmentazione %0%&

Ing. Gabriele MONTI 1999 - 2004


; ; ; ; ;

Segmentazione

www.ingmonti.it

0EA6V<A6MASM Pr $ra((a -i e#e()i )er 5ASM T MASM c ! c3ia(a%e, a!c3e i!-ire%%e, !ear e 9arM Il )r $ra((a 3a -"e #e$(e!%i -i -a%i e -"e -i c -iceM Il )r $ra((a ca(bia #e()lice(e!%e i val ri -i alc"!e variabili c ("!i, c ! )r ce-"re e val ri (e##i i! 9ile -iver#iM

; UUUUUUUUUUUUUUUUUU "! )ri( #e$(e!% -a%i UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU -a%i7 SEEME05 ; :"i ci # ! le ! r(ali -ire%%ive )er l,all ca.i !e -ella (e( ria i!-iri.. 9ar DD O VarI!Da%i7 DB O -a%i7 E0DS ; 3@ bi% )er #criver#i "! i!-iri.. ; 9are "!a CA22 <A6 i!-ire%%a ; variabile !el #e$(e!% -a%i7 <A6, #"l :"ale

; UUUUUUUUUUUUUUUUUU "! #ec !- #e$(e!% -a%i UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU -a%i@ SEEME05 VarI!Da%i@ DB O ; variabile !el #e$(e!% -a%i@ -a%i@ E0DS ; UUUUUUUUUUUUUUUUUUU I!i.ia "! )ri( #e$(e!% -i c -ice UUUUUUUUUUUUUUUUUUUUUU ; UUUUUUUUUUUUUUUUUUU -a c"i il )r $ra((a )ar%e i!i.ial(e!%e c -e7 SEEME05 ASS;ME CS&c -e7, DS&-a%i7, ES&-a%i@ ; !el #e$"i% "#ere( DS )er )"!%are al #e$(e!%

-a%i7 e- ES )er -a%i@ #%e## #e$(e!%

P7Pr c0EA6i!C -e7 P6OC 0EA6 ; )r ce-"ra !ear #cri%%a )ri(a -el c -ice -el (ai!, !ell ; a"(e!%a -i 7 le variabili *PiW 7/ I0C [VarI!Da%i7] ; VarI!Da%i7 ' !el #e$(e!% -a%i7

I0C ES&[VarI!Da%i@] ; VarI!Da%i@ ' !el #e$(e!% -a%i@ 6E5 ; il c ()ila% re (e%%e "!a 6E50 *!ear/ P7Pr c0EA6i!C -e7 E0DP ; UUUUUU Mai! )r $ra( UUUUUU i!i.i & ; (e%%ia( i! DS l,i!i.i -el #e$(e!% -a%i7 *l la#cere( lK1/& MOV AX, SEE -a%i7 ; il l a-er ! ! carica DS, l - bbia( 9are ! i MOV DS, AX ; (e%%ia( i! ES l,i!i.i MOV AX, SEE -a%i@ MOV ES, AX CA22 P7Pr c0EA6i!C -e7 CA22 P@Pr c0EA6i!C -e7- ) -el #e$(e!% -a%i@ *l la#cere( lK1/&

; c3ia(a%a !ear, ! ! !ece##i%a #)eci9icarl ; )erc3> #i ' "#a% P6OC 0EA6 ; c3ia(a%a !ear #%e## #e$(e!% ,

CA22 <A6 P56 PPPr c<A6i!C -e7 ; c3ia(a%a 9ar !ell ; ' ) ##ibile e ! r(ale, #e PPPr c<A6i!C -e7 ; vie!e c3ia(a%a a!c3e -a al%ri ( -"li CA22 <A6 P56 PBPr c<A6i!C -e@

; c3ia(a%a 9ar i! "! al%r

#e$(e!%

CA22 0EA6 P56 P76Pr c0EA6i!C -e@ ; "!a c3ia(a%a c #K ! ! 3a #e!# , ; )erc3> ' a##"r- c3ia(are c ! c3ia(a%a !ear "!a )r ce-"ra al -i ; 9" ri -el #e$(e!% c -ice c rre!%eM ; I! real%H, #e #i )r va c ! 5ASM, e## 9a -elle a##"!.i !i ! ! ; ric3ie#%e e #i calc la "! 99#e% )er arrivare l #%e## a ; P76Pr c0EA6i!C -e@ )"r c ! "!a c3ia(a%a 0EA6M ; 0ell, )i! !e -ell,A"% re i! :"e#% ca# 5ASM ! ! - vrebbe ; c ()ilare e -are "!,i!-ica.i !e -i err re1 ; SA25O I0DI6E55O a PBPr c<A6i!C -e@, "# -el )ri( #e$(e!% ; )re)ara i! (e( ria l,i!-iri.. )er "!a CA22 MOV =O6D P56 [i!-iri.. 9ar], O<<SE5 PBPr c<A6i!C -e@ MOV =O6D P56 [i!-iri.. 9ar + 8@3], SEE PBPr c<A6i!C -e@ ; c3ia(a%a i!-ire%%a, a- "! i!-iri.. 9ar c3e ' i! (e( ria& CA22 [i!-iri.. 9ar] -i -a%i

10 Segmentazione %0%&

.er. 0.9.0 2004-12-01

p. 11 $i 12

Ing. Gabriele MONTI 1999 - 2004


MOV I05 AN, Pc3 ; 9i!e )r $ra((a @73 #%e##

www.ingmonti.it

P@Pr c0EA6i!C -e7- ) P6OC 0EA6 ; )r ce-"ra !ear #cri%%a - ) il c -ice -el (ai!, !ell ; #e$(e!% , a"(e!%a -i -"e le variabili c ("!i ADD [VarI!Da%i7], @ ; VarI!Da%i7 ' !el #e$(e!% -a%i7 ADD ES&[VarI!Da%i@], @ 6E5 P@Pr c0EA6i!C -e7- ) E0DP

; VarI!Da%i@ ' !el #e$(e!% -a%i@ ; il c ()ila% re (e%%e "!a 6E50 *!ear/

PPPr c<A6i!C -e7 P6OC <A6 ; )r ce-"ra 9ar !ell #%e## #e$(e!% , a$$i"!$e P alle variabili ; c ("!i& ADD [VarI!Da%i7], P ADD ES&[VarI!Da%i@], P 6E5 ; il c ()ila% re (e%%e "!a 6E5< *9ar/ PPPr c<A6i!C -e7 E0DP c -e7 E0DS

; UUUUUUUUUUUUU I!i.ia "! al%r #e$(e!% -i c -ice UUUUUUUUUUUUU c -e@ SEEME05 PA6A ; 11 il c -e #e$(e!% )er :"e#%a )ar%e -i )r $ra((a -eve e##ere CS +> ; 11 :"i ci v" le l,ASS;ME -el !" v #e$(e!% & ASS;ME CS&c -e@ PBPr c<A6i!C -e@ P6OC <A6 ; )r ce-"ra 9ar i! "! al%r #e$(e!% , a$$i"!$e B alle variabili ADD [VarI!Da%i7], B ADD ES&[VarI!Da%i@], B 6E5 PBPr c<A6i!C -e@ E0DP P76Pr c0EA6i!C -e@ P6OC 0EA6 ; )r ce-"ra !ear !el #e$(e!% c -e@ ; a$$i"!$e 76 alle variabili c ("!i ADD [VarI!Da%i7], 76 ADD ES&[VarI!Da%i@], 76 6E5 P76Pr c0EA6i!C -e@ E0DP c -e@ E0DS E0D i!i.i ; 9i!e -i %"%% , #i i!-ica a!c3e -a - ve )ar%ire c ! il c -ice )r $ra((a !el -eb"$$er, )a## a )a## , %e!e!-, cc3i

; #i c !#i$lia -i e#e$"ire :"e#% ; i val ri !ell #%acI, CS e IPM </CODICE>

(roblemi ed esercitazioni Domande

p. 12 $i 12

2004-12-01

10 Segmentazione %0%&