Sei sulla pagina 1di 7

Ing.

Gabriele MONTI 1999 - 2004

Intro Assembly

www.ingmonti.it

1 Introduzione all'Assembly
Programmare in Assembly !i"ttosto #i$$i%ile. &na 'olta %(e) a'en#o st"#iato la sintassi #el ling"aggio si ries%e a %om!ilare regolarmente "n !rogramma) si an%ora !i"ttosto lontani #alla met* #el %ammino. +a !arte !i, #i$$i%ile in$atti non ri"s%ire a ris!ettare le regole #el ling"aggio) ma $ar s- %(e il !rogramma $a%%ia e$$etti'amente ."ello %(e #e'e $are. /"in#i molto #el tem!o !er lo s'il"!!o #i "n !rogramma #o'r* essere s!eso nella $ase #i test e) #ato %(e %on l0Assembly le sor!rese non man%ano mai) nel #eb"gging. Per a%."isire b"one %om!eten1e nella !rogramma1ione Assembly bisogna a$$inare le stesse #oti %(e sono ne%essarie a# "n b"on !rogrammatore in 2. 2ome %on il 2) !er ottenere ris"ltati si im!ongono 'olont*) #is%i!lina e 3altr"ismo3. +a 'olont* ser'e !er ottenere %on lo st"#io la %om!eten1a s"l ling"aggio e !er a%."isire la %a!a%it* #i in#i'i#"are e togliere gli errori) #estinan#o molte ore a %er%are in t"tti i mo#i #i $ar $"n1ionare i !rogrammi %(e si reali11ano. +a #is%i!lina ser'e !er non las%iarsi !ren#ere la mano) "na 'olta #i'en"ti #ei #rag(i nel ling"aggio) a non s%egliere sol"1ioni tro!!o %om!li%ate e# a non "tili11are tr"%%(i non #o%"mentati. Il re."isito #ell0altr"ismo ser'e !er $are !rogrammi leggibili. Per s%ri'ere %o#i%e %(e ris!etti la !ersona %(e lo legge bisogna sa!ersi mettere nei s"oi !anni e sa!er s!iegare i me%%anismi tramite i ."ali si gi"nti a ."ella sol"1ione. &n b"on !rogramma in Assembly) %ome "n b"on !rogramma in 2 o in ."alsiasi altro ling"aggio) risol'e in mo#o e$$i%iente il !roblema !er %"i stato s%ritto ma (a an%(e la sol"1ione !i, sem!li%e e la s!iega1ione !i, %(iara. /"ello %(e l0Assembly #* in !i,) a %(i (a la !a1ien1a #i !rati%arlo) "na %onos%en1a 3intima3 #i %ome $"n1iona "n %om!"ter) %(e ser'e molto %ome bagaglio %"lt"rale) !er ."esto 'iene insegnato nelle s%"ole) e %(e #* si%"re11a in %i4 %(e si $a. Inoltre l0Assembly !"4 ser'ire !er reali11are i !rogrammi !i, 'elo%i %(e "n !rogrammatore !ossa s%ri'ere. Per ragioni !rati%(e in ."esto %a!itolo e nel seg"ito si $ar* sem!re ri$erimento) negli esem!i e nell0im!osta1ione) all05056) an%(e se 'erranno $atte al%"ne) rare) #igressioni s" altre 2P&. +a tratta1ione #i altre 2P& sar* !resente solo !er esem!io e !er %on$ronto) sen1a al%"na !retesa #i insegnare Assembly 3stranieri3.

Vantaggi dell'Assembly
- 7'il"!!o !i, ra!i#o e migliore man"tenibilit* e #i al%"ni ti!i #i a!!li%a1ioni Per al%"ni ti!i molto !arti%olari #i a!!li%a1ioni) in !arti%olare ."elle a #iretto %ontatto %on l0(ar#ware e $ortemente #i!en#enti #alle %aratteristi%(e #ei mi%ro!ro%essori) l0Assembly il ling"aggio !i, $a%ile e 'elo%e #a "sare. - 8elo%it* In genere la 'elo%it* #i ese%"1ione #ei !rogrammi s%ritti in Assembly molto !i, alta #i ."ella #ei !rogrammi s%ritti nei ling"aggi #i !i, alto li'ello. /"esto era e# 'ero) basti !ensare ai 'i#eogio%(i) "n ti!o #i !rogramma %(e (a bisogno #i molta 'elo%it*. &n tem!o i 'i#eogio%(i erano sem!re !rogrammati in Assembly) almeno nelle !arti !i, im!ortanti1 9:;. Peraltro i 'i#eogio%(i #i oggi sono #i'en"ti %os- %om!li%ati %(e sono s%ritte in Assembly solo !arti) sem!re !i, !i%%ole) #elle librerie %(e essi "tili11ano) mentre la !arte !i, a# 3alto li'ello3 #el gio%o $atta in ."al%(e ling"aggio a# alto li'ello) s!esso in 2. - 2ontrollo 2on l0Assembly si !"4 $ar $are alla 2P& t"tto ."ello %(e essa !"4 $are) la si !"4 s!ingere al massimo #elle s"e !ossibilit* sa!en#o esattamente %osa si sta $a%en#o. 2on t"tti gli altri ling"aggi il #ettaglio #i %ome sono reali11ate le istr"1ioni a basso li'ello las%iato al %om!ilatore) bisogna 3$i#arsi3 #el %om!ilatore o!!"re) !er ottenere lo stesso %ontrollo) %onos%ere molto bene %ome esso la'ora. - O%%"!a1ione #i memoria I !rogrammi s%ritti #irettamente in Assembly ten#ono a# essere molto !i, !i%%oli #i !rogrammi analog(i s%ritti in ling"aggi #0alto li'ello e %om!ilati. - <attibilit* #i %erte o!era1ioni 2erte istr"1ioni #i I=O o #i mani!ola1ione #ei bit non sono !ossibili in molti ling"aggi a# alto li'ello. Al %ontrario t"tto %i4 %(e "na 2P& !"4 $are !"4 essere $atto nel s"o Assembly. - >sisten1a #el solo Assembly 2erti mi%ro%ontrollori) in !arti%olare ."elli #i n"o'a !ro#"1ione) !ossono #is!orre solo #el loro Assembly) i %om!ilatori a# alto li'ello !ossono non esistere o# essere tro!!o %ostosi. - +ast) b"t not least? @i#atti%a T"tti i !rogrammi 'engono eseg"iti in ling"aggio ma%%(ina. 2onos%ere il ling"aggio ma%%(ina) tramite l0Assembly) ser'e a $arsi "na %"lt"ra %(e !"4 ai"tare a s%ri'ere !rogrammi migliori an%(e %on ling"aggi #i alto li'ello. Inoltre) #ato %(e $orse la #i$$i%olt* maggiore sta nel #eb"gging) im!arare a !rogrammare in Assembly "na !alestra !er im!arare a $orm"lare i!otesi e teorie e metterle alla !ro'a) %io !er im!arare a !ensare.

Svantaggi dell'Assembly
- >0 #i$$i%ile #a !rogrammare.
1 Negli "ltimi tem!i il 'antaggio #ella maggiore 'elo%it* #i $atto 'en"to meno) almeno ella !rogramma1ione !er P2. 2i4 !er%( le 2P& !i, mo#erne %(e sono state !ensate !i, !er essere !rogrammate %on %om!ilatori ottimi11anti %(e %on l0Assembly.

0A Intro#"1ione all0Assembly.sBw

8er. 0.9.0 200A-10-11

!. 1 #i C

Ing. Gabriele MONTI

www.ingmonti.it

Pi, %(e #i$$i%ile 3#i'erso3. 2(i abit"ato al Pas%al non a'r* !roblemi %on il DA7I2 nE tro!!e #i$$i%olt* %on il 2) %(e t"tto sommato sono abbastan1a simili) mentre ne a'r* #i !i,) !er esem!io) %on il +I7P o# il Prolog %(e sono #el t"tto #i'ersi. Parallelamente) %(i sa "sare l0Assembly 5056 non a'r* gran#i !roblemi %on gli Assembly #i altre 2P&. - >0 #i$$i%ile #a leggere. 2ome 'e#remo meglio in seg"ito) il $l"sso #el !rogramma !"4 essere %ontrollato solo %on istr"1ioni #i salto) !er %"i i !rogrammi) %ostit"iti #i #e%ine #i salti an%(e lontani $ra loro) #i'engono #isor#inati. Per ."esto leggibilit* #i "n !rogramma Assembly sen10altro bassa. Peraltro molto #i!en#e #alla sem!li%it* #ella sol"1ione e #alla b"ona e#"%a1ione #el !rogrammatore %(e (a s%ritto il !rogramma. An%(e in 2) se non si mantiene "na stretta #is%i!lina) !ossibile s%ri'ere !rogrammi illeggibili. - Non ser'e !er%(E %on ma%%(ine 'elo%i e memoria !o%o %ostosa si !ossono s%ri'ere !rogrammi ine$$i%ienti. Mentre %i4 !"4 essere !ar1ialmente 'ero !er %erti ti!i #i !rogrammi) %0 #a rile'are !er4 %(e nel %orso #ella storia #ell0In$ormati%a la 'elo%it* #elle 2P& sem!re an#ata a"mentan#o 'ertiginosamente) e!!"re le a!!li%a1ioni sono sem!re sembrate lente) %i4 signi$i%a %(e s%ri'ere !rogrammi e$$i%ienti non an#r* mai $"ori mo#a. - +0Assembly non 3!ortabile3 /"esto 'ero sen1a #is%"ssioni. &n !rogramma s%ritto !er "n 5056 non !otr* mai $"n1ionare s" "n PowerP2 o s" "n Al!(a. 20 !er4 #a #ire %(e !i, #el 90F #elle 2P& esistenti nel mon#o #ella $amiglia 50G56) o!!"re !ossono em"larlo in mo#o e$$i%iente) %ome il PowerP2.

Assembly
Per molti as!etti l0Assembly "n ling"aggio #i !rogramma1ione %ome gli altriH %i4 %(e lo #isting"e il $atto %(e (a "na strettissima %orris!on#en1a %on il ling"aggio ma%%(ina #ella 2P& !er %"i s%ritto. Ogni %o#i%e o!erati'o #el set #0istr"1ioni #i "na 2P& (a "na %orris!on#ente istr"1ione nel s"o Assembly. Inoltre ogni istr"1ione Assembly !"4 essere tra#otta in "na istr"1ione #i ma%%(ina) an%(e se !er%(E %i4 sia 'ero ne%essario #are "na #e$ini1ione #i 3istr"1ione3 "n !o0 restritti'a) %ome s!ieg(eremo !resto. Almeno in linea #i !rin%i!io si !"4 !er%i4 a$$ermare %(e $ra Assembly e ling"aggio ma%%(ina %0 "na %orris!on#en1a bi"ni'o%a 9o 1 - 1; 9'e#i <ig"ra 1? %orris!on#en1a 1-1 $ra istr"1ioni in Assembly e in ling"aggio ma%%(ina;. +a %onseg"en1a !rin%i!ale #ella stretta %ommistione $ra Assembly e ling"aggio ma%%(ina %(e ogni ti!o #i 2P& (a il s"o Assembly. +e #i$$eren1e $ra i 'ari Assembly !ossono essere molto signi$i%ati'e) ma il mo#o #i !rogrammare rimane simile. 2(i im!ara a !rogrammare %on "n Assembly non #o'rebbe a'ere !roblemi a# ini1iare a !rogrammare %on "n altro. 7"%%essi'amente) %on il tem!o e la !rati%a) !otr* a%."isire le %om!eten1e !i, s!e%i$i%(e !er la n"o'a 2P&. @ato %(e l0Assembly s!e%i$i%o #i ogni $amiglia #i 2P& esso il ti!o #i ling"aggio meno !ortabile.

Figura 1: corrispondenza 1-1 fra istruzioni in Assembly e in linguaggio macchina

1.0.1

Diagrammi di flusso

Nella !rogramma1ione Assembly im!ortante "sare te%ni%(e #i #o%"menta1ione %(e ai"tino an%(e nella $ase #i analisi e !rogetta1ione #ell0algoritmo. +a !i, ti!i%a #i ."este te%ni%(e ."ella #ei #iagrammi #i $l"sso) %(e in Assembly sono !arti%olarmente "tili !er%(E molto !i, #i$$i%ile %(e %on gli altri ling"aggi %a!ire a !rima 'ista il $"n1ionamento #ei !rogrammi. Il diagramma di flusso "no s%(ema %(e (a il %om!ito #i ill"strare gra$i%amente il $"n1ionamento #i "n algoritmo) e'i#en1ian#o la se."en1a #ei !assi %(e si #e'ono %om!iere nel s"o s'olgimento. >sso %om!ren#e al%"ni ti!i #i blo%%(i) entro i ."ali 'engono s%ritte $rasi o es!ressioni %(e #es%ri'ono l0algoritmo. I blo%%(i sono %ollegati #a $re%%e. <re%%e +e $re%%e #i "n #iagramma #i $l"sso ill"strano l0or#ine #i ese%"1ione #ei blo%%(i. Pro!rio !er%(E #e'ono s!iegare l0or#ine #i ese%"1ione esse non !ossono essere ar%(i o segmenti ma #e'ono essere 'ere e !ro!rie $re%%e orientate) %on "na %o#a %(e in#i%a %i4 %(e a''iene !rima e "na !"nta %(e !orta a %i4 %(e a''iene #o!o. Dlo%%(i #i ini1io e $ine Ogni algoritmo #e'e a'ere "n !"nto #i ini1io) #al ."ale !arta il s"o $l"sso. Nel #iagramma in#i%(eremo %on "n %er%(io il !"nto #i ini1io. All0interno #el %er%(io s%ri'eremo 3Ini1io3) o!!"re 3I3. !. 2 #i C 200A-10-11 0A Intro#"1ione all0Assembly.sBw

Ing. Gabriele MONTI 1999 - 2004

Intro Assembly

www.ingmonti.it

In ogni istante il $l"sso #i "n !rogramma !"4 essere in "n solo !"nto) !er %"i #a "n blo%%o #i ini1io !"4 "s%ire "na sola $re%%ia. @ato %(e il blo%%o #i ini1io il !rimo al s"o interno non !"4 entrare ness"na $re%%ia. Ogni algoritmo #e'e gi"ngere alla s"a %on%l"sione in "n n"mero $inito #i !assi) !er %"i #o'r* essere !resente "n blo%%o %(e in#i%a %(e il !ro%e#imento terminato. Per ."esto s%o!o "seremo "n blo%%o #i $ine) %(e #isegneremo %on "n %er%(io) s%ri'en#o all0interno 3<ine3 o 3<3. @ato %(e l0algoritmo !"4 terminare in ogni momento il s"o $l"sso !"4 saltare #a ogni !"nto a# "n blo%%o #i $ine) !er %"i in "n blo%%o #i $ine !ossono entrare !i, #i "na $re%%ia. I blo%%(i #i $ine !resenti nel #iagramma !ossono essere !i, #i "no) ma %e ne #e'e essere almeno "no. Nat"ralmente #a "n blo%%o #i $ine non #o'r* "s%ire ness"na $re%%ia.

Iiman#i P"4 a%%a#ere %(e "n #iagramma #i $l"sso non si !ossa #isegnare t"tto nella stessa $a%%iata #i "n $oglio. In ."esto %aso ne%essario ri%orrere a #ei riman#i) %(e in#i%(eremo %on "n %er%(io %(e ra%%(i"#e "n simbolo "ni'o%o) %(e 'iene ri!reso an%(e #a "n altro blo%%o #i riman#o. Il $l"sso %(e entra in "n blo%%o #i riman#o es%e #all0altro blo%%o %(e !orta lo stesso simbolo) !er %"i #"e blo%%(i #i riman#o %(e %ontengano lo stesso simbolo sostit"is%ono "na $re%%ia) %ome in#i%ato nella seg"ente $ig"ra?

Dlo%%(i #i assegna1ione Ia!!resentiamo i blo%%(i #i assegna1ione %ome rettangoli. All0interno #ei blo%%(i #i assegna1ione s%ri'iamo "na lista #i es!ressioni %(e 'engono eseg"ite nell0or#ine #all0alto 'erso il basso. +e es!ressioni in#i%ano %(e "n elemento #i memoria 9registro o lo%a1ione; 'iene mo#i$i%ato. +e es!ressioni sono %om!oste #i #"e !arti) se!arate #a "na $re%%ia. @alla !arte !"ntata #alla $re%%ia si s%ri'e l0elemento #i memoria %(e #e'e essere mo#i$i%ato) #all0altra !arte "na es!ressione aritmeti%a) il %"i 'alore 'iene %al%olato e %o!iato nell0elemento #i memoria in#i%ato. In#i%(iamole lo%a1ioni #i memoria $ra !arentesi ."a#re e# i registri %on il loro nome 9!.es. J10K o AG;. @iamo an%(e nomi simboli%i alle lo%a1ioni #i memoria) in mo#o #a non #o'erne s!e%i$i%are l0in#iri11o e #a !oter "tili11are "n nome %(e s!ieg(i a %osa ser'e ."ella lo%a1ione. Nel seg"ente esem!io

+e es!ressioni signi$i%ano? - s%ri'i il n"mero 25 nella lo%a1ione #i memoria %(e %(iamo I - s%ri'i nella lo%a1ione #i in#iri11o 9 il #o!!io #el 'alore #ella lo%a1ione %(e (a nome 2) %"i aggi"ngi 6 0A Intro#"1ione all0Assembly.sBw 8er. 0.9.0 200A-10-11 !. L #i C

Ing. Gabriele MONTI

www.ingmonti.it

- s%ri'i nel registro AG il 'alore %onten"to all0in#iri11o C molti!li%ato !er 6 Gli elementi #i memoria mo#i$i%ati 'engono so'ras%ritti. 2i4 signi$i%a %(e i 'alori 'e%%(i #i ."egli elementi #i memoria sono !er#"ti. Dlo%%(i %on#i1ionali I blo%%(i %on#i1ionali) o #i %ontrollo) sono gli "ni%i %(e (anno #"e $re%%e in "s%ita. In$atti in ."esti blo%%(i il $l"sso #ell0algoritmo si #irama) in base al 'eri$i%arsi o meno #i "na %on#i1ione logi%a. +a %on#i1ione #e'e essere s!e%i$i%ata all0interno #el blo%%o stesso. Potremo es!rimerla in $orma generi%a) %ome "na #oman#a %"i si !ossa ris!on#ere solo s- o no) o %ome "na 'era e !ro!ria es!ressione logi%a. Per %omo#it* nel #isegno "seremo s!esso in l"ogo #el rombo "n esagono irregolare) %(e (a il !regio #i "sare meno area nel $oglio) ."an#o le %on#i1ioni sono l"ng(e.

Dlo%%(i non s!e%i$i%ati Molto s!esso i #iagrammi #i $l"sso non si #isegnano !er s!e%i$i%are $ino in $on#o il $"n1ionamento #ell0algoritmo) ma !i"ttosto !er #are "n0in#i%a1ione generale s" %ome $"n1iona) las%ian#o il #ettaglio al %o#i%e in ling"aggio #i !rogramma1ione. @isting"eremo i blo%%(i 3generali3 #a ."elli #i assegna1ione #isegnan#o #"e barre s"i lati #estro e sinistro.

&na $rase s%ritta entro il blo%%o in#i%(er* la s"a $"n1ione. &n blo%%o generale ra!!resenta "na serie #i istr"1ioni non s!e%i$i%ate) %(e !ossono an%(e essere "n intero 3sotto!rogramma3. Per !arti%olari ti!i #i sotto!rogrammi) #etti !ro%e#"re) intro#"rremo "n #i'erso ti!o #i blo%%o.

1.0.2

Istruzioni

e pseudoistruzioni

2ome t"tti i ling"aggi #i !rogramma1ione an%(e l0Assembly (a le s"e !arole %(ia'e) %(e 'engono 3%a!ite3 #al %om!ilatore. >sso ris!on#e a !arole %(ia'e #i'erse $a%en#o %ose #i'erse. @ato il ra!!orto #iretto %(e %0 $ra l0Assembly e# il ling"aggio ma%%(ina !ossibile $are "na #istin1ione) %(e negli altri ling"aggi non a!!li%abile) $ra i #i'ersi 3%oman#i3 #ell0Assembly. 2(iamiamo 3istruzioni3 ."elle !arole %(ia'e #el ling"aggio Assembly %(e im!li%ano l0aggi"nta #i "n %o#i%e o!erati'o #i ma%%(ina al $ile .ODM. /"in#i "n0istr"1ione si tra#"%e in "n %o#i%e #i ma%%(ina %(e 'iene !reso #alla memoria a r"ntime) in $ase #i $et%() !er essere s"%%essi'amente #e%o#i$i%ato e# eseg"ito #alla 2&. 2(iamiamo 3pseudoistruzioni3) o an%(e 3direttive3) ."elle !arole %(ia'e #el ling"aggio Assembly %(e sono solamente %oman#i !er il %om!ilatore. Il loro ris"ltato mo#i$i%(er* 3globalmente3 il $ile .ODM) !er%(E in %onseg"en1a #i "na #iretti'a il %om!ilatore si %om!orta in mo#o #i'erso. Peraltro "na !se"#oistr"1ione non aggi"nger* %o#i%i o!erati'i all0ODM e# il s"o e$$etto sar* $inito %on la $ine #ella %om!ila1ione. @"n."e le istr"1ioni Assembly %orris!on#ono ai %o#i%i mnemoni%i #elle istr"1ioni #i ma%%(ina #i ."el ti!o #i 2P& e #eterminano il %om!ortamento #ella 2P&) mentre le !se"#oistr"1ioni sono le altre !arole %(ia'e #i ."ell0Assembly e# in$l"en1ano il %om!ortamento #el %om!ilatore. In sintesi? "n0istr"1ione "n or#ine #ato alla 2P&) mentre "na #iretti'a "n or#ine #ato al %om!ilatore. 2ome esem!io #i "n0istr"1ione Assembly !ren#iamo "na MO8) la !i, %om"ne istr"1ione 5056?
MOV AX, 1

!. 4 #i C

200A-10-11

0A Intro#"1ione all0Assembly.sBw

Ing. Gabriele MONTI 1999 - 2004

Intro Assembly

www.ingmonti.it

."esta istr"1ione aggi"nge al %o#i%e oggetto i n"meri D5 01 00 9esa#e%imali; Al %ontrario la !se"#oistr"1ione?


MiaLocazione DB (?)

<ar* s- %(e il %om!ilatore riser'i "n byte #i s!a1io in memoria %(e nel seg"ito #el !rogramma sar* %(iamato 3Mia+o%a1ione3. Il $ile .ODM %onterr* "n byte in !i,) #estinato a 3Mia+o%a1ione3) ma non 'err* aggi"nto ness"n %o#i%e o!erati'o) #ato %(e 3Mia+o%a1ione3 $ar* !arte #i "n0area #i #ati e non #i %o#i%e.

Istr"1ioni @iretti'e

>$$etto Aggi"nta #i %o#i%i o!erati'i all0ODM Mo#i$i%(e globali all0ODM

<ine #ell0e$$etto I"n time 2om!ile time

2orris!on#en1a %on ling"aggio Ma%%(ina 7No

1.0.3

Formato delle istruzioni Assembly

Il $ormato #elle istr"1ioni !"4 essere #i'erso #a Assembly a Assembly. 8e#iamo "n $ormato molto "tili11ato) %(e ."ello %(e si "sa an%(e nell05056) in !arti%olare !er ."el %(e rig"ar#a l0or#ine #i #estina1ione e sorgente 9:;. <ormato #i "na !se"#oistr"1ione Assembly 9::;? [<Etichetta>] <DirettivaAssembly> [; <Commento>]

<ormato #i "na istr"1ione Assembly? [<Etichetta>:] <CodiceMnemonico> [; <Commento>] [<Destinazione>] [, <Sor ente>] !

Nell0Assembly #ell05056 ogni singola istr"1ione #e'e stare in "n0"ni%a linea #el $ile sorgente. /"esta non "na limita1ione signi$i%ati'a) !er%(E le istr"1ioni Assembly sono sem!re !i"ttosto %orte.
9:;

In altri Assembly) %ome !er esem!io !er le 2P& 65000) l0or#ine #i #estina1ione e sorgente in'ertito In ."esto !aragra$o si intro#"%e !er la !rima 'olta la nota1ione "sata in t"tto il resto #el libro !er !resentare la sintassi #elle istr"1ioni #ei ling"aggi #i !rogramma1ione. Nella legen#a all0ini1io #el 'ol"me si !"4 tro'are "na s!iega1ione #elle %on'en1ioni "sate.
9::;

N>ti%(ettaO 9label; "n nome ."al"n."e) #e$inito #all0"tente e #i'erso #a t"tte le !arole %(ia'e #el ling"aggio. >0 sem!re "n ri$erimento a# "n in#iri11o. 7"lla %osa torneremo !i, a'anti ma #e'0essere ben %(iaro $in #a ora %(e ogni nome #e$inito #all0"tente) %ome !.es. ."el 3Mia+o%a1ione3 'isto ."al%(e riga !i, so!ra) sem!re e solo "n mo#o %omo#o !er in#i%are "n in#iri11o #ella memoria !rin%i!ale. Il nome #i "na eti%(etta !"4 essere soggetto a restri1ioni) la !i, ti!i%a #elle ."ali %(e #ebba ne%essariamente ini1iare %on "na lettera. Al%"ni Assembler (anno limita1ioni signi$i%ati'e s"l n"mero #ei %aratteri #elle eti%(ette. 2ome in#i%ato #alla s%ritt"ra $ra !arentesi ."a#re) nelle linee #i %o#i%e Assembly N>ti%(ettaO non obbligatorio? si mette solo se ser'e. N@iretti'aAssemblyO "n %oman#o ri'olto al %om!ilatore) 'e#remo molti esem!i !er l0Assembly 5056. N2o#i%eMnemoni%oO "n simbolo al$an"meri%o %(e $a !arte #elle !arole %(ia'e #el ling"aggio e %(e in#i%a ."ale istr"1ione #i ma%%(ina il %om!ilatore #e'e mettere nel !rogramma oggetto. 0A Intro#"1ione all0Assembly.sBw 8er. 0.9.0 200A-10-11 !. A #i C

Ing. Gabriele MONTI

www.ingmonti.it

Ogni %o#i%e mnemoni%o #ell0Assembly #i "na 2P& (a %orris!on#en1a #iretta %on "n %o#i%e o!erati'o #el ling"aggio #i ma%%(ina #i ."ella 2P&. Per il %om!ilatore sem!li%e sostit"ire al %o#i%e mnemoni%o il relati'o %o#i%e o!erati'o. N@estina1ioneO e N7orgenteO sono gli o!eran#i #ell0istr"1ione) %io i n"meri %(e l0istr"1ione #e'e elaborare. 7ono se!arati #a "na 'irgola. N@estina1ioneO il registro o la lo%a1ione #i memoria #a #o'e 'iene !reso "no #egli o!eran#i #ell0istr"1ione e #o'e $inis%e il ris"ltato. 7e si es%l"#ono al%"ne rare e%%e1ioni l0ese%"1ione #ell0istr"1ione mo#i$i%a il %onten"to #ell0o!eran#o #estina1ione) so'ras%ri'en#olo. 2i4 signi$i%a %(e il 'alore %(e a'e'a l0o!eran#o #estina1ione !rima #ell0ese%"1ione #ell0istr"1ione !er#"to !er sem!re. 7e non si '"ole 3#imenti%arlo3 ne%essario mantenerlo #a ."al%(e !arte) !er esem!io in "n altro registro. +a #estina1ione 3o!1ionale3 nel senso %(e al%"ne istr"1ioni) %ome !er esem!io la NOP #ell05056) non (anno al%"n o!eran#o. N7orgenteO "n o!eran#o #ell0istr"1ione. P"4 essere "n registro) "na lo%a1ione #i memoria o# "n n"mero $isso. +0o!eran#o sorgente non 'iene mai mo#i$i%ato #all0istr"1ione. Al%"ne istr"1ioni !ossono a'ere "n solo o!eran#o. In ."esto %aso N7orgenteO o N@estina1ioneO man%a. Per esem!io) nell05056) si !"4 !ren#ere la M&+ %(e (a solo l0o!eran#o sorgente) mentre la #estina1ione sem!re ."ella) im!li%ita) e non 'iene mai in#i%ata. N2ommentoO ogni istr"1ione Assembly ammette #ei %ommenti) %io %aratteri %(e non sono anali11ati #al %om!ilatore. In Assembly 5056 il simbolo %(e in#i%a "n %ommento 3H3 9!"nto e 'irgola;. /"an#o l0Assembler in%ontra "n !"nto e 'irgola ignora t"tti i %aratteri s"%%essi'i s"lla stessa linea e ri!ren#e a# anali11are il sorgente solo #alla linea s"%%essi'a. Non sono !re'isti %ommenti %(e %o!rano !i, #i "na linea) nei %ommenti 'ol"minosi ogni linea #o'r* %omin%iare %on !"nto e 'irgola. +e istr"1ioni #ell05056 (anno "n n"mero #i o!eran#i %(e 'a #a 0 a 2. Al%"ne 2P& !i, mo#erne (anno istr"1ioni a tre o!eran#i) nelle ."ali si !ossono s!e%i$i%are #"e sorgenti e# "na #estina1ione #i'ersi. Nella seg"ente $ig"ra sono in#i%ati al%"ni esem!i #i #iretti'e e# istr"1ioni) %(e 'erranno ill"strate in #ettaglio nel seg"ito?

<ig"ra 2? esem!i #i #iretti'e e# istr"1ioni

1.0.4

Formato dei programmi Assembly

I ling"aggi #i alto li'ello stabilis%ono %on'en1ioni #a seg"ire !er stabilire #o'e s%ri'ere nel !rogramma sorgente le #i%(iara1ioni e #o'e le istr"1ioni #i %o#i%e. Per esem!io il Pas%al ren#e obbligatorio s%ri'ere t"tte le #i%(iara1ioni !rima #elle !arti #i %o#i%e. In Assembly non si 'in%olati a# al%"n $ormato) istr"1ioni e #ati !ossono essere mes%olati a !ia%imento) a !atto %(e t"tto $"n1ioniP

!. 6 #i C

200A-10-11

0A Intro#"1ione all0Assembly.sBw

Ing. Gabriele MONTI 1999 - 2004

Intro Assembly

www.ingmonti.it

@i%(iara1ioni 9#ati;

2o#i%e 9istr"1ioni;

2o#i%e 9istr"1ioni;

2o#i%e 9istr"1ioni;

@i%(iara1ioni 9#ati;

7ta%Q

2o#i%e 9istr"1ioni;

7ta%Q

@i%(iara1ioni 9#ati;

7ta%Q

Figura 3: tre esempi mostrano che non c' un ordine obbligatorio per istruzioni e dati. >0 %om"n."e sem!re "na b"ona i#ea #arsi "no stan#ar# e# "sare sem!re le stesso. In %asi !arti%olari) al%"ni #ei ."ali 'e#remo molto !i, a'anti) im!ortante l0or#ine %on %"i istr"1ioni e #ati 'engono allo%ati in memoria) !er %"i non la stessa %osa s%ri'ere in "n or#ine o# in "n altro. In$atti l0or#ine #i s%ritt"ra %orris!on#e all0or#ine %on il ."ale il !rogramma 'err* %om!ilato e %ari%ato in memoria. 7e si s%ri'e !rima il %o#i%e) esso 'err* sistemato agli in#iri11i !i, bassi) se si s%ri'ono !rima i #ati saranno loro a# a'ere gli in#iri11i !i, bassi.
Si tenga per presente che a quest'affermazione si pu fare eccezione usando particolari direttive dell'Assembly, che permettono di stabilire in quale ordine ed a quali posizioni di memoria l'Assembler deve allocare le parti di programma. In questo libro faremo solo un breve cenno, pi avanti, a direttive di questo tipo.

1.0.5

Gli Assembler per 80 8!

In genere i !ro#"ttori #elle 2P& 'en#ono an%(e "n Assembler) e# "n %om!ilatore 2) %ome s"!!orto allo s'il"!!o #i !rogrammi !er il loro (ar#ware. In genere la sintassi #ell0Assembly 'iene stabilita #al !ro#"ttore #ella 2P&) %(e %onos%e bene le %aratteristi%(e #el mi%ro!ro%essore e le s"e !ossibilit*. Per le 2P& %(e a%."isis%ono "n mer%ato %onsi#ere'ole an%(e i !ro#"ttori #i str"menti #i s'il"!!o so$tware entrano in gio%o) reali11an#o %om!ilatori !er i 'ari ling"aggi. Per ."anto rig"ar#a le 2P& G56 gli Assembler !i, "tili11ati sono MA7M 9Mi%roso$t Assembler; e TA7M 9T"rbo Assembler) #ella Dorlan#;) %(e (anno %aratteristi%(e molto simili.) tanto %(e il %o#i%e sorgente s%ritto !er "n %om!ilatore !"4 essere %om!ilato %on l0altro sen1a mo#i$i%(e. In altri ambienti #i s'il"!!o l0Assembly !"4 essere molto #i'erso) an%(e !er la stessa $amiglia #i 2P&. Per esem!io l0Assembler GN& !er G56) "tili11ato !er %om!ilare i !rogrammi in +in"B) (a "na sintassi %om!letamente #i'ersa #a MA7M e TA7M) e #e$inis%e "n $ormato %(e age'ola 3!ortabilit*3 s" #i'erse $amiglie #i 2P&. >siste an%(e "n Assembler grat"ito) NA7M 9 etwi#e Assembler;) reali11ato 3s" Internet3 #a "n team interna1ionale. NA7M !"4 %om!ilare $ile oggetto !er @O7H Rin#ows e +in"B) molto simile a MA7M-TA7M) ma non #el t"tto %om!atibile. +a s"a sintassi im!e#is%e al%"ne ambig"it* !resenti in MA7M-TA7M e !"4 ri%(ie#ere "n %erto la'oro s"l %o#i%e sorgente 9'e#i (tt!?==www.%ryogen.%om=Nasm;. In$ine !resente in rete il MA7ML2) str"mento basato s"l %om!ilatore MA7M a L2 bit #i Mi%roso$t) %(e #is!onibile grat"itamente e %(e stato 3ri'estito 3 #i %o#i%e e librerie #a "n team #i 'olontari in Iete. 2om!ilatore) librerie e #o%"menta1ione sono #is!onibili on line a? GGGG 9PPPPaggi"ngere; In ."esto testo la tratta1ione #ella sintassi #elle istr"1ioni Assembly in%entrata s" TA7M-MA7M !er la !rogramma1ione a 16 bit in M7-@O7) e s"l MA7ML2 !er la !rogramma1ione a L2 bit in Rin#ows.

0A Intro#"1ione all0Assembly.sBw

8er. 0.9.0 200A-10-11

!. C #i C