Sei sulla pagina 1di 8

Ing.

Gabriele MONTI 1999 - 2004

Moduli ASM

www.ingmonti.it

1 Programmi modulari in Assembly


In ue!to "a#itolo !i tratta dei #rogrammi "$e !ono "o!tituiti di "om#onenti ra""$iu!i in %ile !e#arati& e'entualmente !"ritti in linguaggi di #rogramma(ione di'er!i. )a #rin"i#ale utilit* del lin+er& gi* di!"u!!a nel 'olume #re"edente& !ta nel %atto "$e #u, "ollegare #rogrammi "om#ilati in tem#i& luog$i e "on !trumenti di'er!i. -n #rogramma #u, uindi e!!ere "om#o!to da di'er!i .moduli.& "ia!"uno dei uali 'iene "om#ilato in modo del tutto indi#endente dagli altri. Il lin+er /."ollegatore.0 $a #ro#rio il "om#ito di mettere a!!ieme i %ile oggetto #rodotti a #artire dai moduli e di reali((are un uni"o #rogramma e!eguibile. Nel "a#itolo illu!treremo "ome reali((are #rogrammi di'i!i in moduli u!ando di'er!i !trumenti di !'ilu##o. Si de%ini!"e .modulo. di un #rogramma una !ua #arte "$e #u, e!!ere "om#ilata indi#endentemente dalla altre.

1.1 Linking statico

1igura 1 lin+ing !tati"o o dinami"o Se un #rogramma !uddi'i!o in %ile di'er!i de'e di'entare un uni"o %ile e!eguibile 2 ne"e!!ario "$e nei di'er!i %ile !i #o!3 !a %ar ri%erimento a lo"a(ioni di memoria .e!terne.& de%inite in altri %ile. Il ri%erimento #u, riguardare !ia un4i!tru(ione& "ome #.e!. l4indiri((o di una #ro"edura& !ia un dato& "ome #.e!. una .'ariabile. "ondi'i!a %ra due moduli. )a #re!en(a di un ri%erimento e!terno al modulo !igni%i"a "$e il "om#ilatore non $a modo di !o!tituire un indiri((o ad un4eti"$etta& dato "$e la !ua de%ini(ione 2 in un altro %ile ed il "om#ilatore tradu"e un %ile alla 'olta. 5 "om#ito del lin+er "ollegare tutti i ri%erimenti e!terni "$e tro'a nei 'ari moduli "$e "o!titui!"ono il #rogramma. Se ue!to "ollegamento 2 "o!tituito da un indiri((o e!!o 'iene de%inito link statico. Se un #rogramma u!a un lin+ing !tati"o tutti i ri%erimenti e!terni !ono !o!tituiti "on i relati'i indiri((i a tem#o di "ollega3 mento /lin+ time0. 6ue!to ti#o di "ollegamento /static linking0 2 molto e%%i"iente& #er"$7 ogni "$iamata a #ro"edura !alta direttamente al giu!to indiri((o o'e 2 il "odi"e ed ogni lo"a(ione di memoria utili((ata dal #rogramma #er i dati 2 a""e!!ibile "on indi3 ri((amenti a!!oluti. 18 ASM #i9 moduli.odt :er. 0.;.0 199;-0<-2= #. 1 di ;

Ing. Gabriele MONTI

www.ingmonti.it

1.2 Link dinamico


-n metodo di "ollegamento meno e%%i"iente ma #er molti 'er!i #i9 %le!!ibile 2 il .linking dinamico.& modo di "ollega3 mento !ul uale !ono ba!ati molti im#ortanti !er'i(i dei Si!temi O#erati'i /S.O.0 moderni. Su##oniamo "$e il "odi"e di una libreria debba e!!ere u!ato da tutti i #rogrammi "$e !ono in e!e"u(ione ."ontem#ora3 neamente. !u un Si!tema O#erati'o multi#rogrammato />0& "$e #o!!ono an"$e e!!ere molte de"ine. ?NOTA@ />0 'edi nel !eguito #er la de%ini(ione di S.O. mono#rogrammato e multi#rogrammato ?ANOTA@ BBBBAGGI-STACDBBBB Se la libreria 'iene "ollegata in modo !tati"o !i #re!enta il #roblema BBBBBBB "$e ognuno dei #rogrammi "$e u!a la libreria $a al !uo interno una !ua "o#ia della libreria& #er "ui il "odi"e della libreria o""u#a la memoria #er tante 'olte uanti !ono i #rogrammi "$e lo u!ano "ontem#oraneamente. 6ue!to non 2 un #roblema !e il Si!tema O#erati'o 2 mono#rogrammato />0& in uanto #u, e!eguire un !olo #rogramma alla 'olta ed il #rogramma #re"edentemente e!eguito 'iene !"ari"ato dalla memoria #rima "$e e!egua il !u""e!!i'o. 6uando in'e"e il S.O. 2 multi#rogrammato molti #rogrammi #o!!ono e!!ere #re!enti "ontem#oraneamente nella memo3 ria #rin"i#ale del "om#uter& #er "ui la re#li"a(ione del "odi"e delle librerie 2 uno !#re"o di ri!or!e. Eer ri!ol'ere ue!to #roblema 2 !tato introdotto il "on"etto di .libreria dinamica. o .libreria condivisa. /in Findow! DLL /DGnami" Lin+ LibrarG& in )inuH .shared library.I to !$are J "ondi'idere0. 6ue!to me""ani!mo& !ia #ur molto #i9 "om#li"ato e meno 'elo"e del lin+ing !tati"o& #ermette di ri!#armiare memoria& dato "$e il "odi"e della K)) 'iene "ari"ato una !ola 'olta ed u!ato da molti #rogrammi "ontem#oraneamente.

1.2.1

DLL in Windows

-na libreria dinami"a 2 una "olle(ione di #ro"edure& %un(ionalmente non di!!imile da tutte le altre librerieI di'er!o 2 il modo "on "ui !i a""ede alle !ue #ro"edure. 6uando il lin+er in"ontra un ri%erimento e!terno ad una #ro"edura di una libreria dinami"a non lo ri!ol'e in un indiri((o& ma la!"ia nel %ile e!eguibile in ri%erimento !imboli"o& "$e do'r* !#e"i%i"are il nome della #ro"edura "$e !i 'uole e!egui3 re ed il nome della libreria in "ui la !i de'e "er"are. Il #rogramma e!eguibile mantiene #er"i, .in !o!#e!o. le "$iamate alle #ro"edure "$e a##artengono a K))I e!!e "$e !al3 teranno ad un indiri((o "$e an"ora non !i "ono!"e. Eer "ono!"ere uali !ono le #ro"edure "ontenute in una K)) il lin+er ne"e!!ita di una .im#ort librarG.& un %ile .)IL "$e 'iene #rodotto uando la K)) 'iene generata. Mon le in%orma(ioni "ontenute nella im#ort librarG il lin+er 2 in grado di "om#letare l4e!eguibile& la!"iando al !uo interno i ri%erimenti !u%%i"ienti #er"$7 l4indiri((o delle #ro"edure #o!!a e!!ere tro'ato a tem#o d4e!e"u(ione. 6uando il #rogramma 'a in e!e"u(ione e!egue una "$iamata al S.O. ri"$iedendo lNindiri((o delle #ro"edure "$e utili((a "$e !ono "ontenute in librerie dinami"$e /in Findow! la "$iamata 2 .GetEro"Addre!!.0. Il S.O. tiene tra""ia di tutte le K)) "$e $a "ari"ato in memoria. Se la K)) ri"$ie!ta 2 gi* in memoria& #er"$7 gi* in u!o da un altro #rogramma& il S.O. re!titui!"e al #rogramma ri"$ie3 dente lNindiri((o della #ro"edura. Se in'e"e la K)) non 2 an"ora !tata "ari"ata& allora il S.O. la "er"a !ullN$ard di!+ /il #rogramma de'e #a!!are an"$e il nome !imboli"o della K)) ed e'entualmente il #er"or!o di dire"torG da utili((are0& la "ari"a in memoria e re!titui!"e lNindiri((o della #ro"edura al #rogramma "$e l4a'e'a ri"$ie!to. Il #rogramma #otr* ora e!eguire. Nel !uo la'oro "on le K)) il S.O. tiene tra""ia an"$e del numero di #rogrammi "$e $anno %atto ri"$ie!ta di una !#e"i%i"a K)). Ogni 'olta "$e un nuo'o #rogramma %a una ri"$ie!ta di uella K)) il S.O. in"rementer* un "ontatore& "$e ra##re3 !enter* il numero di #rogrammi "$e !tanno attualmente u!andola. Ogni 'olta "$e un #rogramma "$e !ta u!ando la K)) "omuni"a al S.O. "$e $a terminato la !ua e!e"u(ione il "ontatore 'err* de"rementato. 6uando il "ontatore a!!ume il 'alore di (ero il S.O. "an"eller* la K)) dalla memoria& dato "$e ne!3 !un #rogramma ne $a #i9 bi!ogno.

#. 2 di ;

199;-0<-2=

18 ASM #i9 moduli.odt

Ing. Gabriele MONTI 1999 - 2004

Moduli ASM

www.ingmonti.it

Figura 2 linking dinamico

1.3 File di inclusione


Molti linguaggi di programmazione hanno una particolare clausola per indicare linclusione di file. Quando un file viene "incluso" nel sorgente di un programma tutto funziona come se il suo contento fosse scritto nel punto del programma "ospite" in cui la clausola di inclusione viene citata. n file di include non ! un modulo" almeno nel senso che a##iamo dato $ui alla parola "modulo"" perch% non viene compilato "separatamente". &l contenuto del file include ! costituito da istruzioni "legali" del linguaggio di program' mazione utilizzato" ma di solito non ! compila#ile separatamente" perch% ! fatto per essere messo fra le righe di un al' tro programma. &l lin(er non interviene $uando ci sono file include perch% il lavoro di inclusione viene fatto diretta' mente dal compilatore.

1.4 Programmi Assembly su pi moduli


Nel 'olume #re"edente a'e'amo 'i!to "ome la #rodu(ione del #rogramma e!eguibile in due %a!i #ermetta di unire in!ie3 me& nella %a!e di lin+ing& #arti di #rogramma #rodotte e "om#ilate in tem#i& luog$i e da #er!one di'er!e. In ue!to "a#itolo 'edremo "ome reali((are #rogrammi in A!!emblG mettendo in!ieme #arti "om#ilate !e#aratamente. D4 dun ue #o!!ibile "o!truire #rogrammi "$e !iano "om#o!ti da di'er!i %ile !orgente& !e#aratamente "om#ilati& gi* in %or3 ma di .OLO& ed uniti tramite il lin+er. :ediamo "ome !i de'e %are "on il Turbo A!!embler /TASM0. Analog$e !aranno le o#era(ioni da %are !e !i u!er* MASM. Se !i $anno #i9 moduli .OLO da unire& !i #u, u!are il lin+er in ue!to modoP

18 ASM #i9 moduli.odt

:er. 0.;.0 199;-0<-2=

#. Q di ;

Ing. Gabriele MONTI

www.ingmonti.it

TLINK <Modulo principale> + <Modulo secondario 1> + <Modulo secondario 2> .. Il lin+er %ar* #artire il #rogramma "om#le!!i'o dal #rimo modulo !"ritto nellNelen"o di moduli& il %ile e!eguibile a'r* nome ?Modulo #rin"i#ale@.DRD. Naturalmente& #er"$7 abbia !en!o unire in!ieme moduli !e#arati& e!!i debbono a'ere ual"o!a in "omune& "io2 "odi"e eAo dati. Eer indi"are al "om#ilatore "$e al"uni indiri((i !ono "ondi'i!i %ra #i9 moduli& !i u!ano le diretti'e !eguenti.

1.).1

*+,-.

)Nindiri((o di lo"a(ioni di memoria non de%inite Indi"a al "om#ilatore "$e la label non 2 de%inita in ue!to %ile /modulo0. Il "om#ilatore non de'e #er"i, dare errore uando non tro'er* lNeti"$etta& ma de'e !olo in!erire nel %ile .OLO il nome !imboli"o dellNeti"$etta. Mi #en!er* il lin+er a Sri!ol'ereN il ri%erimento e!terno& "io2 ad a!!egnare il giu!to indiri((o allNeti"$etta. Sinta!!iP EXTRN <Label> [: <Tipo> #er eti"$ette di #ro"edure ?Ti#o@ 2 1AC o NDAC& #er eti"$ette di dati !i #u, e!#rimere il #aralleli!mo dei tra!%erimenti /LTTD& FOCK ..0. D!em#iP
EXTRN Min, Max EXTRN TrovaMax: FAR EXTRN Max: WORD

)Naggiunta del ti#o #ermette al "om#ilatore di %are al"uni "ontrolli "$e #o!!ono e'itare degli errori& ma non 2 obbligato3 ria.

1.).2

/ 0L&1

Si u!a #er %ar !a#ere al "om#ilatore "$e un indiri((o in memoria /"io2 una eti"$etta0 #u, e!!ere u!ato an"$e da altri mo3 duli& "om#ilati !e#aratamente. Il "om#ilatore in!eri!"e nel %ile .OLO lNin%orma(ione !imboli"a dellNeti"$etta Se!#ortataN e lNindiri((o "$e e!!o le $a a!!egnato nella !ua !Gmbol table. Su""e!!i'amente il lin+er a!!egner* #ro#rio uellNindiri((o a tutti i nomi uguali non ri!olti "$e tro'er* nei %ile "$e de'e "ollegare. Sinta!!iP !"#LI$ <Label> [: <Tipo>

1.).2

3L405L

Nel "a!o in "ui nel modulo in "ui "om#are la G)OLA) !ia #re!ente la de%ini(ione della "orri!#ondente label & G)O3 LA) !i "om#orter* "ome E-L)IM& altrimenti "ome DRTCN. %L&#'L <Label> [: <Tipo>

Figura 3: moduli oggetto con informazioni simboliche

1.).)

/-41

)a diretti'a "$e de%ini!"e la #ro"edura #u, an"$e dire !e e!!a de'e e!!ere NDAC o 1AC. Nelle #ro"edure "$iamate %ra moduli di'er!i di !olito de'e e!!ere "$iaro !e !ono near o %ar& #er "ui non 2 o##ortuno ometterlo. Il de%ault 2 NDAC. Sinta!!iP <Label della procedura> !R&$ [NE'R ( )'R Indi"ando al "om#ilatore !e la #ro"edura de'e e!!ere near o %ar& e!!o #u, mettere il giu!to "odi"e o#erati'o della CDT& near o %ar. )a (ona di "odi"e "$e "o!titui!"e la #ro"edura %ini!"e "on la diretti'aP #. 4 di ; 199;-0<-2= 18 ASM #i9 moduli.odt

Ing. Gabriele MONTI 1999 - 2004

Moduli ASM

www.ingmonti.it

<Label della procedura> EN*!

1.5 Librerie di procedure


)a #o!!ibilit* di "ollegare moduli di'er!i in tem#i di'er!i a#re la !trada alla "o!tru(ione di .librerie. di #ro"edure. -na libreria 2 una "olle(ione di #ro"edure gi* "om#ilate "$e #o!!ono e!!ere utili((ate da un #rogramma #rin"i#ale. -na libreria #o!!iede una !erie ben de%inita di !#e"i%i"$e& "$e de!"ri'ono i nomi delle #ro"edure in e!!a "ontenute& le "on'en(ioni di "$iamata ed il !igni%i"ato di ogni #arametro "$e !i #u, #a!!are alle #ro"edure. Ki !olito le !#e"i%i"$e delle #ro"edure di una libreria 'engono "$iamate .interfaccia di programmazione. di uella li3 breria. S#e!!o in ue!ti "a!i !i ri"orre allNa"ronimo AP /A##li"ation Program nter%a"e0. Kun ue le #ro"edure di una libreria #o!!ono e!!ere utili((ate da ual!ia!i #rogramma "$e ne ri!#etti lNinter%a""ia di #ro3

gramma(ione& indi#endentemente dal linguaggi "$e !i u!a nel #rogramma #rin"i#ale /almeno in linea di #rin"i#io0. Inol3 tre le librerie !te!!e #o!!ono e!!ere reali((ate "on te"ni"$e e linguaggi di'er!i. 18 ASM #i9 moduli.odt :er. 0.;.0 199;-0<-2= #. 8 di ;

Ing. Gabriele MONTI

www.ingmonti.it

Ki !olito i Si!temi O#erati'i eAo i linguaggi di #rogramma(ione !u##ortano almeno un %ormato #er il %ile di librerie& "$e #u, e!!ere leggermente di'er!o da uello del %ile oggetto. D!em#ioP I %ile di libreria di MSKOS $anno e!ten!ione .)IL& mentre uelli "reati dal "om#ilatore g"" #er )inuH terminano #er .a 6uando un #rogramma non utili((a tutte le #ro"edure "ontenute in una libreria& in ba!e alle "aratteri!ti"$e del lin+er #o!!ono a""adere due "o!eP 'engono "ollegate !olo le #ro"edure e%%etti'amente utili((ate nel #rogramma "$e !i !ta #rodu"endo 'iene "omun ue "ollegata tutta la libreria& "om#re!e le #ro"edure non u!ate / ue!to 2 il "a!o #i9 "omune0. Ki !olito !i #o!!ono a""or#are in una !ingola libreria di'er!i %ile oggetto& #rodotti in modi e tem#i di'er!i ed e'entual3 mente an"$e "on "om#ilatori di'er!i.

1.6.1

tilizzazione di li#rerie

)a 'er!ione #i9 "om#leta della !inta!!i del "omando T)INU 2 la !eguenteP TLINK <Elenco dei +oduli &#,> [-<No+e del .ile ese/uibile> [-<no+e del .ile .M'!- di in.o [-<Elenco delle librerie> Gli elen"$i !ono una !erie di nomi di %ile& "ia!"uno !e#arato da uno !#a(io o da un !egno .V.. Si nota la #o!!ibilit* di u!are librerie& "$e 'engono !#e"i%i"ate in un elen"o !e#arato da 'irgole. Il %ormato dei %ile di libreria 2 leggermente di'er!o da uello degli OLO& #er "ui "i 'uole un #rogramma !#e"i%i"o #er ge3 nerarle. Il de%ault dellNe!ten!ione dei nomi delle librerie 2 .)IL. )IL )IL 2 un #rogramma "om#re!o in tutti gli !trumenti di !'ilu##o #er MS-KOS. D!!o #ermette di "reare librerie a #artire da un in!ieme di %ile oggetto& di modi%i"arle o di e!trarne dei #e((i in un nuo'o %ile oggetto. Sinta!!iP LI# [<op0ioni> [<co+andi> [-<lis1a di .ile .&#,> [- No+e della libreria

?li!ta di %ile .OLO@ 2 lNin!ieme dei nomi "$e !i 'ogliono aggiungere& "ia!"uno !e#arato dal !egno V. Eer i "omandi e le o#(ioni #er mani#olare le librerie !i 'eda lN$el# in linea del KOS /)IL AW o##ure )IL AXD)E0.

1.6.2

n programma di esempio con due moduli

; *************************** inizia il primo modulo ************************** ; MODULO !A"M ; MODULO # il modulo prin$ipal% ; da $oll%&ar% a MODULO'!O() $on il lin*%r: ; TL+N, MODULO !O() - MODULO'!O() ; .ro&ramma di %/%mpio p%r TA"M 0 MA"M $on $1iama2%, an$1% indir%22%, ; n%ar % 3ar, 3ra moduli % /%&m%n2i div%r/i % $on m%moria $ondivi/a 3ra moduli ; +l pro&ramma $am4ia /%mpli$%m%n2% i valori di al$un% varia4ili $omuni, $on ; pro$%dur% % valori m%//i in 3il% div%r/i! ; **** m%moria impor2a2a %d %/por2a2a: .U(L+5 6ar5omun%+n ;(72% in m%moria $ondivi/a 3ra i du% moduli ; d%3ini2a in MODULO EXTRN 6ar5omun%+n' ; 8ord in m%moria $ondivi/a 3ra i du% moduli ; d%3ini2a in MODULO'

; **** pro$%dur% impor2a2% %d %/por2a2%: EXTRN .ro$+nM' ; in MODULO', pro$%dura $1iama2a da MODULO , ; /i pu9 d%3inir% /% NEAR o FAR :TA"M; .U(L+5 .ro$FAR+nM da2i ; in MODULO , pro$%dura $1iama2a da MODULO'

"E<MENT ; =ui $i /ono l% normali dir%22iv% p%r l>allo$azion% d%lla m%moria

#. = di ;

199;-0<-2=

18 ASM #i9 moduli.odt

Ing. Gabriele MONTI 1999 - 2004

Moduli ASM

www.ingmonti.it

+ndirizzoFar DD ? ; una DWORD p%r m%morizzar% un indirizzo 3ar 6ar5omun%+n D( ? ; lo$azion%, &i@ d%3ini2a .U(L+5, ; $1% v%rr@ u/a2a dal modulo /%$ondario da2i END" ; ************** +nizia un primo /%&m%n2o di $odi$% **************** $odi$% "E<MENT ; n%l /%&ui2o u/%r%mo D" p%r pun2ar% al /%&m%n2o da2i %d E" p%r Da2iE/2%rno: A""UME 5":$odi$% , D":da2i ; ****** Main pro&ram ****** inizio: ; inizio # la la4%l $1% /2a4ili/$% l>inizio d%l pro&ramma, a pa22o $1% il ; 3il% MODULO !O() /ia lin*a2o $om% il pri$ipal%, $io# il primo d%lla ; li/2a d%i 3il% da $oll%&ar%! ; m%22iamo in D" l>inizio d%l /%&m%n2o da2i MO6 AX, "E< da2i ; il load%r non $ari$a D", lo do44iamo 3ar% noi, MO6 D", AX ; pa//ando p%r AX p%r$1A MO6 D", "E< da2i non # ; po//i4il%, "E< da2i 3a pr%nd%r% dal .". ; l>indirizzo d%l /%&m%n2o d%i da2i a//%&na2o ; dal DO" al mom%n2o d%l lan$io d%l pro&ramma ; m%22iamo in E" l>inizio d%l /%&m%n2o da2i d%l modulo %/2%rno: MO6 AX, "E< 6ar5omun%+n' MO6 E", AX ; E" pun2a al primo (72% d%l /%&m%n2o da2i %/2%rno :Da2iE/2%rno; ; p%r$1A "E< 6ar5omun%+n' B "E< Da2iE/2%rno ; :6ar5omun%+n' # n%l /%&m%n2o Da2iE/2%rno; 5ALL .vi$ina+nM ; $1iama2a n%ar

5ALL FAR .TR .ro$+nM'; $1iama2a alla pro$%dura n%l modulo %/2%rno :MODULO'!A"M; ; /%nza FAR .TR non 3unzionaC 5ALL FAR .TR .ro$FARinM ; $1iama2a 3ar n%llo /2%//o /%&m%n2o

; "ALTO +ND+RETTO a .lon2anaFuori, u/o d%l primo /%&m%n2o di da2i ; pr%para in m%moria l>indirizzo p%r una 5ALL MO6 WORD .TR D+ndirizzoFarE, OFF"ET .ro$+nM' MO6 WORD .TR D+ndirizzoFar - F'1E, "E< .ro$+nM' ; $1iama2a indir%22a, ad un indirizzo 3ar $1% # in m%moria: 5ALL D+ndirizzoFarE MO6 +NT AG, H$1 ; 3in% pro&ramma ' 1

; **** pro$%dur% **** .vi$ina+nM .RO5 NEAR ; pro$%dura n%ar /$ri22a prima d%l $odi$% d%l main, n%llo /2%//o /%&m%n2o ; aum%n2a di l% varia4ili $omuni +N5 D6ar5omun%+n E ; il /%&m%n2o di 6ar5omun%+n # pun2a2o da D" +N5 E":D6ar5omun%+n'E ; il /%&m%n2o di 6ar5omun%+n' # pun2a2o da E" RET .vi$ina+nM END. .ro$FARinM .RO5 FAR ; pro$%dura 3ar n%llo /2%//o /%&m%n2o, a&&iun&% H all% varia4ili $omuni ADD D6ar5omun%+n E, H ADD E":D6ar5omun%+n'E, H RET .ro$FARinM END. $odi$% END" END inizio ; 3in% di 2u22o, /i indi$a an$1% da dov% par2ir% $on il $odi$% ; ************************* inizia il /%$ondo modulo ************************** ; MODULO'!A"M ; MODULO' # il modulo /%$ondario ; +l main pro&ram pu9 4%ni//imo %//%r% a//%n2%, da2o $1% di =u%/2o modulo ; /i u/ano l% pro$%dur%! ; .%ral2ro # al2r%22an2o l%$i2o m%22%r% un pro&ramma prin$ipal% $1% non ; vi%n% u/a2o dal modulo $1% $1iama l% pro$%dur% ma po2r%44% %//%r% u2il%, ; p%r %/%mpio, p%r po2%r provar% l% pro$%dur% d%l modulo ; /%nza il 4i/o&no di $oll%&arl% $on un pro&ramma %/2%rno! ; **** di$1iarazioni d%i nomi impor2a2i %d %/por2a2i: .U(L+5 .ro$+nM' ; in MODULO', pro$%dura $1iama2a da MODULO EXTRN .ro$FAR+nM ; in MODULO , pro$%dura $1iama2a da MODULO'

18 ASM #i9 moduli.odt

:er. 0.;.0 199;-0<-2=

#. < di ;

Ing. Gabriele MONTI

www.ingmonti.it

EXTRN 6ar5omun%+n .U(L+5 6ar5omun%+n'

; 472% in m%moria, $ondivi/o % d%3ini2o in MODULO ; 8ord in m%moria, $ondivi/a % d%3ini2a in MODULO'

; **** /%&m%n2o da2i di =u%/2o modulo: Da2iE/2%rno "E<MENT 6ar5omun%+n' DW ? Da2iE/2%rno END" ; **** /%&m%n2o $odi$% di =u%/2o modulo: 5odi$%E/2%rno "E<MENT ; **** di$1iarazion% d%ll>u/o d%i /%&m%n2i: A""UME 5":5odi$%E/2%rno .ro$+nM' .RO5 FAR ; 2o&li% a 6ar5omun%+n % a&&iun&% a 6ar5omun%+n', poi $1iama ; .ro$FAR+nM :$1% a&&iun&% H a %n2ram4i; ; non modi3i$a D" %d E", $1% /ono &i@ /i/2%ma2i n%l pro&ramma prin$ipal%! DE5 D6ar5omun%+n E ; il /%&m%n2o di 6ar5omun%+n # pun2a2o da D" +N5 E":D6ar5omun%+n'E ; il /%&m%n2o di 6ar5omun%+n' # pun2a2o da E" 5ALL FAR .TR .ro$FAR+nM RET .ro$+nM' END. 5odi$%E/2%rno END" ; il lin*%r pu9 an$1% m%22%r% a//i%m% i /%&m%n2i di du% moduli 3a$%ndoli ; div%n2ar% un uni$o /%&m%n2o &lo4al%! Iu%/2o $a/o non vi%n% illu/2ra2o ; p%r /%mpli$i2@ :v%di i moduli 5OM(+NE !A"M % 5OM(+NE'!A"M n%l 5D ROM;! END

5 i!trutti'o #ro'are "on il debugger& #a!!o #er #a!!o& ue!to #rogramma. I %ile MOK-)O1.ASM a MOK-)O2.ASM !i tro'ano nel MK-COM allegato. Il lin+er #u, e!!ere i!truito& "on le #!eudoi!tru(ioni di ."ombine.& #er "on"atenare !egmenti !e#arati nei 'ari moduli in un uni"o !egmento nel #rogramma e!eguibile. )e "ombine non !ono trattate in ue!to te!to& un e!em#io& !ia #ur non tro##o e!#li"ati'o& 2 #re!entato nei %ile !orgente del MK-COM allegatoI %ile MOMLIND1.ASM e MOMLIND2.ASM.

#. ; di ;

199;-0<-2=

18 ASM #i9 moduli.odt