Sei sulla pagina 1di 18

Ing.

Gabriele MONTI 1999 - 2005

Calcoli

www.ingmonti.it

1 Istruzioni per l'elaborazione


In que to ca!itolo tratteremo "elle i tru#ioni c$e er%ono !er &calcolare&' nel en o !i( %a to "el termine. In !articolare !ieg$eremo le %arie i tru#ioni aritmetic$e e le altre c$e !ro"ucono il loro ri ultato econ"o una )un#ione combinatoria.

1.1 Istruzioni aritmetiche


*e o!era#ioni aritmetic$e e))ettuate "ai %ari ti!i "i C+, ono molto %arie. *e C+, !i( em!lici "i !ongono olo "elle o!era#ioni "i omma e ottra#ione )ra numeri interi' mentre quelle !i( o)i ticate $anno i tru#ioni !er tutte le o!era#ioni aritmetic$e' anc$e con i numeri a %irgola mobile' e !er)ino i tru#ioni !eciali##ate' utili nei calcoli !er la gra)ica e !er le telecomunica#ioni' c$e e eguono contem!oraneamente !i( "i un-o!era#ione aritmetica. +er quanto riguar"a la )amiglia ./0' nel &ca!o ti!ite& erano !re enti tutte le o!era#ioni aritmetic$e or"inarie )ra numeri interi' com!re e molti!lica#ione e "i%i ione. Inoltre il co!roce ore "ell-/0/0 1/0/23 u!!orta%a tutte le o!era#ioni aritmetic$e )ra numeri a %irgola mobile. I co"ici mnemonici "i tutte le i tru#ioni "el &)loating !oint co!roce or& ini#iano !er 4. 5al 6/0 in !oi' il co!roce ore 7 tato inclu o all-interno "elle C+,' !er cui le i tru#ioni a %irgola mobile )anno !arte a tutti gli e))etti "el et "-i tru#ioni ./0. *e ultime %er ioni "i C+, ./0' ia Intel 1+entium3 c$e 8M5 190' 8t$lon3' $anno e te o igni)icati%amente il numero "elle i tru#ioni aritmetic$e' ia nel cam!o "ei numeri interi 1MM.3' c$e in quello "ei numeri a %irgola mobile 1MM. II' 8M5 now:3. In que to ca!itolo trattiamo olamente le i tru#ioni aritmetic$e !er i numeri interi.

1.1.1

Cambio "i egno

*-i tru#ione N;G e egue il com!lemento a "ue "el uo unico o!eran"o. NEG <OperandoDestinazione> ; Negate ; funzionamento: ; <OperandoDestinazione> <- ComplementoAdue (<OperandoDestinazione>) *-e))etto "ella N;G< come ricor"a il uo mnemonico' 7 la commuta#ione "el egno a" un numero con egno. 5i con eguen#a il uo u o con un numero en#a egno 7 "el tutto con igliabile. *-i tru#ione mo"i)ica tutti i )lag aritmetici. ; em!io=
.. ; non so se "numero" positivo o no, devo fare cose diverse in base al ; segno ma comunque devo cambiare il segno del numero. Allora lo faccio ; subito, poi potr saltare sul flag di segno: NEG numero! "# $raEnegativo ; se l%&o trasformato in negativo, salto l' $raEpositivo: ; se arrivo qui ora numero positivo .. +er il com!lemento a 2 in 8 embl> i u a la N;G. ?i !otrebbe u are anc$e una NOT 1o anc$e .O@3 eguita "a una 855' anc$e e il )lag "i carr> arebbe in%ertito ri !etto alla N;G=

con NOT=
N$( A) A** A), + ; ,, -./$0(AN(E: il flag di carr1 dopo questa A** fun2iona al contrario ,,

Nelle C+, a !artire "al A/0 l-o!eran"o !uB e ere "i A2 bit.

1.1.2

?omme e ottra#ioni "i interi

*e i tru#ioni !er omma e ottra#ione )ra numeri interi ono 855 e ?,C' ri !etti%amente. *a loro inta i 7 la eguente= ADD <OperandoDestinazione> <Operando!orgente> ; Add (to add signifi"a #sommare#) ; funzionamento: ; <OperandoDestinazione> <- <OperandoDestinazione> $ <Operando!orgente> !%& <OperandoDestinazione> ; !u'tra"t (sottrai) 09 ;labora#ioni. Dw <Operando!orgente>

Eer. 0.9.0 2005-10-1A

!. 1 "i 1/

Ing. Gabriele MONTI

www.ingmonti.it

; funzionamento: ; <OperandoDestinazione> <- <OperandoDestinazione> - <Operando!orgente> *e "ue i tru#ioni ono otto!o te ai con ueti %incoli !er quanto riguar"a le o!era#ioni in memoria 1u o "i un olo o!eran"o in memoria' regi tri alcuni regi tri )anno "a !untatori ..3. Naturalemente i "ue o!eran"i "e%ono a%ere lo te o numero "i bit' nelle C+, a !artire "al A/0 !o ono e ere "i A2 bit. +er %ia "elle &magic$e& !ro!rietF "el com!lemento a "ue 855 e ?,C !o ono )un#ionare utili##an"o in"i))erentemente numeri con egno o en#a egno. *e i tru#ioni 855 e ?,C non cono cono la "i))eren#a )ra i "ue ti!i "i numero' !er cui il controllo e il ri ultato 7 giu to 7 a))i"ato e clu i%amente al !rogrammatore. ?e il !rogramma "e%e controllare la corrette##a "el ri ultato "i omme e ottra#ioni il !rogrammatore "e%e c$ie"er i' a" ogni 855 o ?,C' e ta trattan"o con numeri con o en#a egno e" utili##are la giu ta Gum! !er il controllo. ?i ricor"a c$e e il numero 7 en#a egno l-errore in 855 o ?,C 7 egnalato "al )lag "i carr>' mentre i u a il )lag "i o%er)low !er i numeri con egno' in com!lemento a "ue. 5o!o un-i tru#ione 855 o ?,C il %alore "i tutti i )lag aritmetici 7 em!re "eterminato in ba e al ri ultato "ell-o!era#ione e eguita.
*-e ecu#ione "i un-i tru#ione ?,C $a una !articolaritF c$e riguar"a il )lag "i carr>. ,na ?,C %iene e eguita utili##an"o gli te i circuiti elettronici "e"icati alla 855. +er cui !er una ?,C la C+, e egue tre &!a i&' come in"icato nella 4igura 1.

4igura 1= i tru#ioni equi%alenti "ella ?,C +rima cambia "i egno al econ"o o!eran"o' !oi gli omma il !rimo. In)ine cambia il %alore "el )lag "i carr> 1CMC' !er i "ettagli %e"i oltre in que to ca!itolo3. Ee"iamo la ragione "i que t-ultima o!era#ione' e))ettuan"o la ottra#ione in colonna' co H come la )arebbe la C+,. ?u!!oniamo c$e iano= Io!1J K 10 e Io!2J K A

N;G Io!2J Io!2J 0 1 Io!2J 1 0 1 1 0 1 1 0 1 1 0 1 1 0 1 1 1 0 0 1 0 1 1 NOT L

855 Io!1J'Io!2J @i!orto Io!1J Io!2J Io!1J 1 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 1 0 0 1 1 1 0 1 0 1 1 L

?i !uB notare come il ri!orto i ia !ro!agato )ino in )on"o' anc$e e l-o!era#ione non 7 errata e" il ri ultato in o!1 7 e atto 110 M A K 23. Nue to ucce"e em!re e" il carr> "ell-o!era#ione 7 em!re &ro%e ciato& ri !etto al ca o "ella 855. +erc$O 855 e ?,C )un#ionino nello te o mo"o la C+, e egue em!re' alla )ine "ella ?,C' l-equi%alente "i una CMC 1com!lement carr>3.

CMC Carr> )lag 0

INC e DEC
Nue te i tru#ioni e))ettuano un-a""i#ione o" una ottra#ione "el numero 1. (NC <OperandoDestinazione> ; (n"rement ; <OperandoDestinazione> <- <OperandoDestinazione> $ ) DEC <OperandoDestinazione> !. 2 "i 1/ 2005-10-1A 09 ;labora#ioni. Dw

Ing. Gabriele MONTI 1999 - 2005

Calcoli

www.ingmonti.it

; De"rement ; <OperandoDestinazione> <- <OperandoDestinazione> - ) INC e 5;C non $anno %antaggi in termini "i %elocitF "i e ecu#ione ma ric$ie"ono un o!eran"o in meno' "ato c$e l-1 7 im!licito. CiB !uB com!ortare una certa "iminu#ione "ella quantitF "i memoria occu!ata "al !rogramma' "ato c$e l-aggiunta "i 1 a" un numero 7 molto )requente. ; em!io= I tru#ione 855 8.' 1 *ing. macc$ina I tru#ione 05 INC 8. 01 00 *a 855 u a tre b>te' la INC ne u a uno. *ing. macc$ina 60$

,na !articolaritF "i INC e 5;C "egli /0./0 7 c$e non mo"i)icano il )lag "i carr>. Nue to !uB e ere utile nei cicli !er incrementare il contatore "i controllo en#a ro%inare il carr> "i un-i tru#ione !rece"ente. +eraltro !uB com!ortare errori e ci i )i"a "el carr> in u cita "a que te i tru#ioni. ?e er%e %eri)icare il carr> "o!o a%er aggiunto 1' bi ogna u are la 855. Ee"iamo un e em!io nel quale il )atto c$e la INC non mo"i)ic$i il carr> i ri%ela %antaggio o. ?u!!oniamo "i %oler tro%are a quale elemento "i un %ettore "i C>te la omma "ei %alori "egli elementi "i%enta maggiore "i 255. +er )ar ciB "obbiamo & correre& il %ettore continuan"o a ommare in un regi tro' )ino a c$e non catta il )lag "i carr>. Ee"iamo una reali##a#ione con 855' con)rontata a" una reali##a#ione con INC=
/rogramma con A** .. .$4 5), 6 ; in A7 la somma degli elementi del vettore 4 .$4 A7, 6 Giro8inoAl3arr1: A** A7, 4 9 5)! "3 Esci A** 5), + "./ Giro8inoAl3arr1 Esci: /rogramma con -N3 .. .$4 5), 6 .$4 A7, 6 Giro8inoAl3arr1: A** A7, 4 9 5)! -N3 5) "N3 Giro8inoAl3arr1

Mentre nella %er ione con 855 iamo co tretti alla PC ubito "o!o la 855 8*' QE L C.R' !erc$O la 855 ucce i%a ro%ina il )lag "i carr>' nella %er ione con INC !o iamo !o tici!are la Gum! con"i#ionata a "o!o l-incremento' "ato c$e la INC non ro%ina il )lag "i carr> i temato "alla 855 8*' QE L C.R. Nue to ci !ermette "i ri !armiare una Gum!.

Numeri con molti bit (ADC e SBB)


+otrebbe ucce"ere "i "o%er e eguire calcoli aritmetici con numeri !i( gran"i "i quelli c$e i regi tri a no tra "i !o i#ione !o ono contenere. In que to ca o arF nece ario u are !i( "i un regi tro !er memori##are ogni o!eran"o e" ogni riultato. *e o!era#ioni aritmetic$e ono ancora !o ibili a !atto "i o er%are alcune !recau#ioni1. +er ommare numeri !i( gran"i "ei regi tri i o!era come e i tratta e una normale o!era#ione in colonna' )atta ulla carta. ?i "e%e cominciare a ommare le !arti ba e< il ri ultato c$e i ottiene 7 la !arte ba a "el ri ultato. ?e la omma com!orta un ri!orto e o "e%e e ere !ro!agato alle !arti alte. *a omma "elle !arti !i( alte "o%rF !erciB tenere conto "el carr> "ella omma !rece"ente. Con alcune i tru#ioni "i co"ice i !otrebbe %eri)icare e il carr> )lag 7 ON e" aggiungere uno alla omma "ella !arti !i( alte. ; em!io & ulla carta&< nel eguente c$ema ommiamo "ue numeri a A2bit= 80415801$ L A020A650$= @i!orti 8 A 5 1 0 0 2 4 2 1 1 1 0 2 1 5 A 1 8 0 0 0 5 5 1 0 0 L K

Nello c$ema ono e%i"en#iate le "ue wor" c$e co titui cono i "ue numeri "a ommare e" il ri ultato. Nel ca o !eci)ico la omma )ra le wor" ba e genera un carr> 1e%i"en#iato nello c$ema3' c$e "e%e e ere ommato alla omma "elle !arti alte !er ottenere il ri ultato corretto. Nell-/0/0 e i tono i tru#ioni !eci)ic$e' !er la omma e la ottra#ione' c$e ren"ono em!lici ima la !ro!aga#ione "el ri!orto. ; e ono la 85C e la ?CC.

nelle eguenti argomenta#ioni con i"eriamo l-i tru#ione "i omma' !er la ottra#ione il "i cor o arF "el tutto analogo.

09 ;labora#ioni. Dw

Eer. 0.9.0 2005-10-1A

!. A "i 1/

Ing. Gabriele MONTI *a loro inta i 7 la eguente= ADC <OpDestinazione> <Op!orgente> ; Add *it+ "arr, (somma "on riporto) ; <OpDestinazione> <- <OpDestinazione> $ <Op!orgente> $ "arr, !&& <OperandoDestinazione> <Operando!orgente> ; !u'tra"t *it+ 'orro* (sottrai "on prestito) ; <OpDestinazione> <- <OpDestinazione> - <Op!orgente> $ "arr,

www.ingmonti.it

; e' oltre a" e eguire una &normale& 855 o ?,C' ommano al ri ultato anc$e il %alore corrente "el )lag "i carr>. ; em!io=
; la somma di due numeri a :; bit viene memori22ata ; nel primo dei due: /rimoNumero ** <=> #econdoNumero ** <=> .. ; somma delle parti basse #EN?A il carr1: .$4 A), @$0* /(0 #econdoNumero! A** @$0* /(0 /rimoNumero!, A) ; somma delle parti alte, c&e in memoria sono due b1te "piA in l'", ; somma anc&e l%eventuale carr1 c&e proviene dalla prima A** .$4 A), @$0* /(0 #econdoNumero 9 ;! ; .$4 non modifica i flag, A*3 @$0* /(0 /rimoNumero 9 ;!, A) ; A*3, "3 Numero/iuGrande*i:;bit ..

85C )un#iona anc$e con numeri con egno

1.1.A

Molti!lica#ioni e "i%i ioni "i interi

+er le o!era#ioni "i molti!lica#ione e "i%i ione l-/0/0 mette a "i !o i#ione i tru#ioni !eci)ic$e c$e' a "i))eren#a "ella 855 e "ella ?,C' "e%ono e ere "i%er e e l-o!era#ione 7 con o en#a egno. +erciB' a "i))eren#a "ella 855' c$e era unica !er tutti i ti!i "i numeri interi' nelle C+, ./0' e" in tutte le altre' e i tono ia l-i tru#ione M,* 1!er i numeri en#a egno3 c$e la IM,* 1integer M,* !er i numeri con egno3. Nelle M,* e nelle 5IE il regi tro 8. %iene u ato nel mo"o e%ocato "al uo nome' cio7 come &accumulatore&. *-accumulatore 7 in)atti un regi tro c$e non %iene in"icato e !licitamente )ra gli o!eran"i "elle i tru#ioni ma %iene u ato automaticamente "all-i tru#ione te a. 5ato c$e un o!eran"o 7 em!re 8. o una ua !arte' e o non %iene in"icato< M,* e 5IE ric$ie"ono un olo o!eran"o. Il com!ortamento "i que te i tru#ioni "i!en"e "alla "imen ione "ell-o!eran"o' c$e !uB e ere a /' 10 o' "al A/0 in !oi' a A2 bit.

MU e IMU a un operan!o
Ee"iamo la loro inta i= -%./&01E 2134 <Op !orgente Da 5 'it> ; unsigned -ultipli"ate (moltipli"azione a 5 'it) ; A6 <- A. 7 <O p !orgente Da 5 'it> -%./8O3D 2134 <Op !orgente Da )9 'it> ; unsigned -ultipli"ate (moltipli"azione a )9 'it) ; funzionamento: ; <temp a :; 'it> <- A6 7 <Op !orgente Da )9 'it> ; A6 <- <temp a :; 'it parte 'assa> ; D6 <- <temp a :; 'it parte alta> -%./D8O3D 2134 <Op !orgente Da :; 'it> ; solo :59 e > ; unsigned -ultipli"ate (moltipli"azione a :; 'it) ; funzionamento: ; <temp a 9< 'it> <- EA6 7 <Op !orgente Da )9 'it> ; EA6 <- <temp a 9< 'it parte 'assa> ; ED6 <- <temp a 9< 'it parte alta> *imita#ioni= M,* non accetta un o!eran"o imme"iato nelle C+, !rece"enti al 2/0. ; em!i= :::: 48@; !. 6 "i 1/ 2005-10-1A 09 ;labora#ioni. Dw

Ing. Gabriele MONTI 1999 - 2005

Calcoli

www.ingmonti.it

*e M,* u ano regi tri &!iccoli& !er gli o!eran"i e memori##ano il ri ultato in regi tri !i( &gran"i&. ; e )un#ionano in mo"o "i%er o in ba e alla "imen ione "ell-o!eran"o orgente. ?e l-o!eran"o 7 "a / bit il ri ultato 7 me o in 8. 110 bit3< e l-o!eran"o 7 "a 10 bit i memori##a a A2 bit 15. contiene la !arte alta' 8. la !arte ba a3< e l-o!eran"o 7 a A2 bit il ri ultato 7 "i 06 bit 1;5. !arte alta' ;8. !arte ba a3. ;- intere ante notare c$e il )atto c$e nella molti!lica#ione ra""o!!i il numero "ei bit "el ri ultato non ren"e !o ibile l-errore aritmetico in molti!lica#ione. +er ca!irlo u!!oniamo "i e))ettuare una molti!lica#ione )ra i "ue numeri !i( gran"i "i / bit' en#a egno. Il ri ultato 255 S 255 K 05025 7 minore "i 055A5' c$e 7 il ma imo intero en#a egno ra!!re entabile in 8.' "i 10 bit. ?iccome que to %ale anc$e !er le IM,* con egno' e i con i"era il ri ultato &gran"e& "ell-i tru#ione' non c-7 mai errore aritmetico nelle molti!lica#ioni. ?e in%ece i con i"era la ola &metF ba a& "el ri ultato' cio7 un ri ultato c$e $a lo te o numero "i bit "ell-o!eran"o e !licito' allora errore ci !uB e ere' eccome. I )lag acce i "alle M,* con i"erano !ro!rio que ta !o ibilitF "i errore aritmentico. In)atti il )un#ionamento "ei "lag nelle i tru#ioni M,* e IM,* 7 !articolare. *a C+, mette a #ero ia il )lag "i carr> c$e quello "i o%er)low e il ri ultato 7 ancora &!iccolo&. 8ltrimenti li mette a uno. I )lag "i%er i "a C4 e O4 a umono %alori in"eterminati. Gli altri )lag ono in"e)initi. In !articolare la M,* mette a #ero C4 e O4 e la !arte alta "el ri ultato 18T' 5. 1o anc$e ;5. "al A/033 7 nulla. IM,* mette a #ero C4 e O4 e la !arte alta 7 com!o ta "a tutti #ero' in ca o "i ri ultato !o iti%o' o tutti uno' e il ri ultato 7 negati%o 1 i ricor"a c$e un numero negati%o &!iccolo& 7 com!o to "a tutti uno nella ua !arte alta 1e . M2 a 10 bit K 1111111111111110 3. Il )atto c$e la M,* ia un-i tru#ione un !o- ati!ica !uB e ere !ericolo o nella !rogramma#ione 8 embl>. Ee"iamo un e em!io nel quale M,* %iene u ata im!ro!riamente=
.$4 A), ;66+& .$4 57, + .C7 57 AB A7 ;6 6+ A) = 6+ 5) ; moltiplica A7 D + per 57 D +; il risultato + :E>, c&e finisce in A) ; anc&e se piccolo, 66 6+ A) AB A7

?e non i )a atten#ione la M,* !uB a%ere e))etti collaterali in"e i"erati. Nell-e em!io il %alore 20$ c$e era tato critto in 8T 7 tato o%ra critto "alla M,*. ?e quel 20$ era utile al !rogramma' e o mal)un#iona. 8ncora !i( )acile bagliare con la M,* a 10 bit' c$e %a a" &in%a"ere& un altro regi tro 15.3. Ci ogna tenere !re ente c$e' in"i!en"entemente "al ri ultato "ell-o!era#ione' la M,* a 10 bit cri%e qualco a in 5.. +rima "ella M,* 7 nece ario al%arne il contenuto' e non i !uB !er"erlo.

IMUL 8086
*-i tru#ione IMU "ell-/0/0 1Integer Multi!lication3 $a la te a inta i "ella M,*< la "i))eren#a 7 c$e o!era con numeri con egno 1i numeri interi con egno %engono "etti &Integer&' que ta 7 quin"i la Integer M,*3. (-%. <Op !orgente Da 5 )9 o :; 'it> ; (nteger -ultipli"ate ("ome la -%. ma "on segno) ; funzionamento: ; il funzionamento della (-%. ad un solo operando = del tutto ; analogo alla -%. a 5 )9 e :; 'it ma >iene effettuata una ; moltipli"azione fra numeri "on segno

IMUL 386
5al A/0 la IM,* !uB )un#ionare con "ue o a""irittura tre o!eran"i. (-%. <3egistro destinazione da )9 o da :; 'it> ; solo :59 e > ; ; ; ; (nteger -ultipli"ate (moltipli"azione "on segno a due operandi ) gli operandi de>ono essere della stessa dimensione funzionamento: <3egistro Destinazione> <- <3egistro Destinazione> 7 <!orgente> <!orgente 5?)9?:;>

(-%. <3egistro destinazione )9?:;> <Operando memoria )9?:;> <Operando immediato 5?)9?:;> ; solo :59 e > ; (nteger -ultipli"ate (moltipli"azione "on segno a tre operandi ) ; funzionamento: 09 ;labora#ioni. Dw Eer. 0.9.0 2005-10-1A !. 5 "i 1/

Ing. Gabriele MONTI ; <3egistro Destinazione> <- <-emoria> 7 <(mmediato>

www.ingmonti.it

*e i tru#ioni a "ue o!eran"i $anno come "e tina#ione un regi tro qual ia i e non &in%a"ono& altri regi tri. ; e molti!licano i "ue o!eran"i metten"o il ri ultato nel !rimo "ei "ue. *-o!eran"o orgente !uB e ere ottenuto con un acce o in memoria o !uB e ere un numero in imme"iato. Il numero in imme"iato !uB e ere "i un numero "i bit minore "ella "e tina#ione. In tal ca o la C+, e))ettuerF automaticamente un-eten ione "el egno. ; em!i=
-.C7 *), #; fra registri di +F bit, risultato #$7$ in *) -.C7 A), 51te /(0 +6 ; moltiplica2ione con sorgente da G bit in immediato ; la 3/C procede all%estensione del segno di +6 ; il risultato finisce #$7$ in A) -.C7 E3), *Hord /(0 :+! ; risultato in E3), opera2ione sen2a estensione del ; segno di :+! < gi' a :; bit> -.C7 E5/, 51te /(0 ;G ; estensione del segno, ;G viene trasformato da G a :; bit

*e IM,* contr o!eran"i e eguono la molti!lica#ione )ra i "ue o!eran"i' memori##an"o il ri ultato in un altro regi tro' "i%er o "ai "ue o!eran"i. Gli o!eran"i !o ono e ere un numero !rele%ato "alla memoria e" un altro in imme"iato. ; em!i=
-.C7 *), 4ar+F!, 51te /(0 +6 -.C7 *), 4ar+F!, @ord /(0 +6 -.C7 E*), 4ar:;!, 51te /(0 I -.C7 E*), 4ar:;!, *Hord /(0 I ; 4ar+F a +F bit, 4ar:; a :; ; ; ; ;

Non ono !o ibili tutte le combina#ioni nelle "imen ioni "egli o!eran"i e "ei regi tri "i "e tina#ione. +er il "ettaglio "i ciB c$e 7 !o ibile i %e"a l-i tru#ione IM,* in a!!en"ice .... 1 et "-i tru#ioni ./03 .

DI# e IDI#
*e i tru#ioni "i "i%i ione )anno il contrario "elle molti!lica#ioni. +arten"o "a numeri &gran"i& !ro"ucono numero &!i( !iccoli&. 8nc$e le 5IE $anno un )un#ionamento "i))eren#iato econ"o la "imen ione "ell-o!eran"o' come i !uB a!!re##are anali##an"one la inta i= D(@/&01E 2134 <Op !orgente Da 5 'it> ; unsigned Di>ision (di>isione a 5 'it) ; A. <- A6 A <Op !orgente Da 5 'it>) ; BB "on A si intende la di>isione intera ; BB in A. >a il Cuoziente della di>isione intera ; AD <- A6 mod <Op !orgente Da 5 'it> ; BB "on mod si intende il resto di>isione intera BB ; BB in AD >a il resto della di>isione intera D(@ /8O3D 2134 <Op !orgente Da )9 'it> ; unsigned Di>ision (di>isione a )9 'it) ; A6 <- (D6 A6 A <Op !orgente Da )9 'it>) ; D6 <- (D6 A6) mod (<Op !orgente Da 5 'it>) ; BB "on D6 A6 si intende un numero di :; 'it "+e +a ; BB D6 "ome parte alta ed A6 "ome parte 'assa D(@ /D8O3D 2134 <Op !orgente Da :; 'it> ; solo :59 e > ; unsigned Di>ision (di>isione a :; 'it) ; EA6 <- (ED6 EA6 A <Op !orgente Da )9 'it>) ; ED6 <- (ED6 EA6) mod (<Op !orgente Da 5 'it>) ; BB "on ED6 EA6 si intende un numero di 9< 'it "+e +a ; BB ED6 "ome parte alta ed EA6 "ome parte 'assa *imita#ioni= 5IE non ammette o!eran"o imme"iato in ne uno "ei !roce ori "ella )amiglia ./0. ,nici ti!i "i o!eran"i !o ono e ere regi tri e !o i#ioni "i memoria. 5IE 20 = %ietata= o!eran"o in imme"iato Il "i%i"en"o "ell-o!era#ione 5IE 7 !i( gran"e "el ri ultato. Il ri ultato com!ren"e la !arte intera 1quo#iente3' c$e %iene me a nella !arte ba a "ell-accumulatore-ri ultato' e" il re to "ella "i%i ione intera 1mo"ulo3' c$e %iene me o nella !arte alta. !. 0 "i 1/ 2005-10-1A 09 ;labora#ioni. Dw

Ing. Gabriele MONTI 1999 - 2005

Calcoli

www.ingmonti.it

?e il "i%i ore 7 "a / bit il "i%i"en"o 7 "a 10 bit e ta in 8.' la !arte intera "el ri ultato %a in 8*' mentre il re to 1mo"ulo3 %a in 8T. Con "i%i ore "a 10 bit il quo#iente 7 contenuto nei "ue regi tri 5. e" 8.< in 5. la !arte !i( igni)icati%a' in 8. la !arte meno igni)icati%a. I ri ultati %anno= in 8. la !arte intera' in 5. il re to. Come IM,*' IDI# 1Integer Di$i ion3 )un#iona con integer 1numeri con egno3. I5IE $a la te a inta i e )un#ionamento "i 5IE. 8nc$e l-i tru#ione 5IE cambia la "imen ione "ei uoi ri ultati' !er cui anc$e con que ta i tru#ione il !rogrammatore "o%rF e ere attento .. Ee"iamo un e em!io "ei !ericoli c$e i corrono=
; questo brano di programma dividerebbe A) D JG per 5) D F ; <se fun2ionasse,> .$4 *), + .$4 A), JG .$4 5), F *-4 5) 66 66 66 ;A 66 6+ ;3& 6F 5; 66 *) A) 5) A) *) ; N$N quello c&e volevo, ; <mi aspettavo G,> ; il resto della divisione c&e non volevo fare,

?!ecie quan"o i numeri ono !iccoli' come in que to ca o' ci i !uB "imenticare c$e la 5IE a 10 bit non la%ora olo con 8.' ma anc$e con 5.' c$e 7 la !arte alta "el "i%i"en"o. In que to brano "i !rogramma in 5. c-7 1' !er cui la "i%i ione e eguita non 7 66 = 0 K 2 col re to "i 2' ma 01002C$ = 0 K 28C2$ con il re to "i 0. 8 "i))eren#a "ella M,*' c$e non "F mai errore aritmetico e i con i"era tutto il ri ultato' l-i tru#ione 5IE !uB "are errore in "ue ca i= la "i%i ione !er #ero e l-o%er)low. ?e i !ro%a a "i%i"ere !er #ero la C+, "e%e comunicare un errore "i "i%i ione !er #ero. *-altro errore occorre quan"o un numero tro!!o gran"e %iene "i%i o !er uno tro!!o !iccolo. In que to ca o il ri ultato !uB e ere !i( gran"e "el regi tro "e tinato a contenerlo' la qual co a genera un errore. ?e i o er%a la tabella "elle i tru#ioni in 8!!en"ice .... i !uB notare c$e 5IE e I5IE la ciano tutti i )lag aritmetici in con"i#ioni non "eterminate. 5unque non 7 !o ibile u are i )lag !er a!ere e una "i%i ione 7 an"ata a buon )ine. Il meccani mo con il quale la C+, comunica un errore "i "i%i ione %iene "etto &eccezione& e %errF %ilu!!ato nel eguito. +er ora ba ti a!ere c$e nel ca o cattino que ti errori la C+, 7 in gra"o "i )ar !artire automaticamente un !articolare otto!rogramma' "etto &ecce#ione&' c$e ge ti ce l-errore' olitamente c$iu"en"o in antici!o il !rogramma. 5unque' )ra le tante "i un ./0' e i tono l-&ecce#ione "i o%er)low in "i%i ione& e quella "i &"i%i ione !er #ero&.

Casting ed estensione del segno


Nell-e))ettuare le "i%i ioni !uB e ere in"i !en abile )ar "i%entare &!i( gran"i& i numeri con cui i ta la%oran"o. In)atti la 5IE utili##a come "i%i"en"o numeri c$e $anno il "o!!io "i bit ri !etto al "i%i ore' !er cui 7 !robabile c$e ia nece ario i temare la !arte alta "el numero &gran"e& in mo"o c$e ia &#ero&. ?e il numero c$e i "e%e "i%i"ere 7 en#a egno la !romo#ione non 7 un !roblema= la !arte alta "el numero &!i( gro o& "e%e e ere em!licemente me a a #ero. Ee"iamo un e em!io=
; divisione di A per B, numeri da 32 bit senza segno, con un 386: A DD (?) B DD (?) .. MOV EAX, [A] ; il numero da dividere deve essere da 64 bit! MOV EDX, 0 ; allora la parte alta deve essere zero ; ora posso dividere il numero da 64 bit EDX, EAX ; per B: DIV [B] ; ora salvo il risultato in A (la parte alta non conta perch ; era zero ed ora A pi piccolo o uguale a prima) MOV [A], AX

?e i numeri $anno il egno il "i cor o cambia' !erc$O !er !romuo%ere il numero bi ognerebbe )are o!era#ioni "i%er e in ba e al egno. Il et "-i tru#ioni ./0 com!ren"e i tru#ioni c$e age%olano que ta o!era#ione. +er e em!io nell-/0/0 l-i tru#ione CCU 1Con%ert B>te to %or"3 con%erte un numero con egno "i / bit contenuto nel regi tro 8* 1 olo 8*' accumulatore3 in uno "i 10' contenuto nel regi tro 8.' e ten"en"one il egno. *e tre i tru#ioni "i !romo#ione "el egno ono le eguenti= C&8 ; Con>ert &,te to 8ord 09 ;labora#ioni. Dw Eer. 0.9.0 2005-10-1A !. 2 "i 1/

Ing. Gabriele MONTI ; A6 <- EstensioneDel!egno(A.) ; "on>ersione di numero "on segno da 5 a )9 'it C8D ; Con>ert 8ord to Dou'le8ord ; D6 A6 <- EstensioneDel!egno(A6) ; "on>ersione di numero "on segno da )9 a :; 'it CDE ; Con>ert Dou'le8ord to Euad8ord ; ED6 EA6 <- EstensioneDel!egno(EA6) ; "on>ersione di numero "on segno da :; a 9< 'it ; :59 >

www.ingmonti.it

Nue te o!era#ioni ono en#a o!eran"i !erc$O la%orano im!licitamente ui regi tri c$e )anno "a accumulatore. *e i tru#ioni co!iano il bit !i( igni)icati%o "ell-o!eran"o &!iccolo& in tutti i bit "ella !arte alta. ,n e em!io analogo al !rece"ente' ma con numeri con egno=
; divisione di C per D, numeri da 32 bit con segno, con un 386: C DD (?) D DD (?) .. MOV EAX, [C] ; il numero da dividere deve essere da 64 bit! CDQ ; Convert Double to Quad ; ora posso dividere il numero con segno da 64 bit ; contenuto in EDX, EAX per D: DIV [D] ; ora salvo il risultato in C MOV [C], AX

+er age%olare le o!era#ioni "i !romo#ione "i %ariabili e" e ten ione "el egno e i tono' "al A/0 in !oi' "ue i tru#ioni c$e caricano un o!eran"o orgente "i una certa "imen ione in un o!eran"o "e tina#ione "i "imen ione "i%er a. MOEV. Io!1J' Io!2J 1Mo$e wit$ zero e&ten"3' carica l-o!eran"o &!iccolo& in quello &gran"e& come numero en#a egno 1#ero eDten"3' aggiungen"o tutti #eri nella !arte alta. MOE?. Io!1J' Io!2J 1Mo$e wit$ sign e&ten"3' carica l-o!eran"o &!iccolo& in quello &gran"e& come numero con egno 1 ign eDten"e"3' aggiungen"o il bit "el egno in tutta la !arte alta. Io!2J !uB e ere a / o 10 bit' Io!1J "a 10 o A2 bit. +er conclu"ere le i tru#ioni aritmetic$e ricor"iamo c$e e i tono !eci)ic$e i tru#ioni !er l-aritmetica "ecimale in CC5< egue un elenco en#a ulteriori commenti' tante la raritF "ell-u o "i que te i tru#ioni. 588 5ecimal 8"Gu t )or 8"" 58? 5ecimal 8"Gu t )or ?ubtract 888 8?CII 8"Gu t )or 8"" 88? 8?CII 8"Gu t )or ?ubtract 88M 8?CII 8"Gu t )or Multi!l> 885 8?CII 8"Gu t )or 5i%i"e Nue te i tru#ioni non $anno o!eran"i !erc$O la%orano tutte ull-accumulatore 18*' ono tutte i tru#ioni a / bit3.

Moltiplicazioni e divisioni fra numeri "grandi"


*a molti!lica#ione i !uB e eguire co H come la i )arebbe ulla carta' mentre la "i%i ione 7 ancora !i( com!licata. Il co"ice !er que te o!era#ioni 7 !iutto to com!licato e non lo tratteremo qui. Il "ettaglio i !uB tro%are in te ti !eciali##ati 1%e"ere !.e . &T$e 8rt o) 8 embl>&' libro gratuito re!eribile in @ete' ca!itolo 93

1.1.6

Mani!ola#ione "ei )lag

Nella !rogramma#ione !uB e ere nece ario cambiare il contenuto "i alcuni )lag. *e i tru#ioni c$e e i tono !er que to co!o ono ?;T )lag' c$e li mette ON' C*;8@ )lag' c$e li !egne e COM+*;M;NT )lag c$e ne commuta il contenuto

Impostazione !i "lag (set)


Nue ta i tru#ione mette a uno il )lag< la ua inta i= !1<flag> ; !et <flag> ; <flag> <- ) <flag> :F C G D G ( !. / "i 1/ 2005-10-1A 09 ;labora#ioni. Dw

Ing. Gabriele MONTI 1999 - 2005

Calcoli

www.ingmonti.it

Mette a 1 il )lag !eci)icato "alla lettera c$e egue ?T. ?i !uB u are olo u tre )lag= Carr>' Direction e Interrru!t 4lag. 5i con eguen#a ono !erme e olo le eguenti= ?TC' ?T5' ?TI ; em!io= ?TC < mette a 1 il bit "i carr>

Azzeramento !i "lag 1clear3


;- il contrario "ella ?TI)lagJ e mette a #ero= C.<flag> ; !et <flag> ; <flag> <- ) <flag> :F C G D G ( 4un#iona olo ugli te i )lag "ella ?TI)lagJ= Carr>' Direction e Interrru!t 4lag In tru#ioni !erme e= C*C' C*5' C*I 1Clear Carr>' Direction' Interrru!t )lag3 ; em!io= C*I < mette a 0 il )lag "i interru!t 1%e"i !ro imo %olume3

Commutazione !i "lag 1CMC3


C-C ; Complement Carr, ; <"arr,> <- NO1 <"arr,> Nue ta i tru#ione' c$e e i te olo !er il )lag "i carr>' lo )a commutare< e 7 0 "i%enta 1' e 17 1 "i%enta 0.

SE'
5i !onibile olo "al A/0 in !oi' !ermette "i mettere 1 o!!ure 0 in un qual ia i regi tro "a un b>te o loca#ione "i memoria' in ba e "el %alore corrente "el )lag in"icato con la ua lettera. ?i u a !er im!lementare il ti!o boolean nei linguaggi a" alto li%ello. ?inta i= !E1<""> <Destinazione 5 'it> ; !et destination on flag ; <Destinazione 5 'it> <- <""> <""> :F O G ! G A G 2 G C G 1 G ( G D IccJ 7 la lettera "el )lag' una "i quelle in"icate o!ra. I5e tina#ione / bitJ !uB e ere anc$e in memoria.
Esempi: #E(3 A7 ; mette + in A7 se il flag di carr1 + ; <in A7, da G bit, va il numero + cio 6666666+b> ; oppure mette 6 se il flag di carr1 + #E($ n3on#egno! ; pu fun2ionare anc&e in memoria <in questo caso con ; il flag di overfloH>

ettura e mo!i"ica !i tutto il registro !ei "lag


+er mo"i)icare i )lag c$e non !re%e"ono una !eci)ica i tru#ione "el ti!o ?TI)lagJ o C*I)lagJ e i tono' )in "all-/0/0' "ue i tru#ioni c$e caricano tutti i )lag nel regi tro 8T o cri%ono nei )lag cio7 c$e 7 attualmente in 8T. .ADH ; .oad AD *it+ flags ; AD <- !H IH JJ AH ; non modifi"a i flag

JJ

2H

JJ

CH

*8T4 carica nel regi tro 8T 1 oa" in A(3 gli / bit "el regi tro "i tato /0/0 1)*8G?3. *a !o i#ione "ei ingoli )lag 7 in"icata nel eguente c$ema= Cit )lag 2 ?ign 0 Vero 5 .. 6 A 8uD. .. carr> 2 +arit> 1 .. 0 Carr>

!ADH ; !tore AD into flags ; !H IH JJ AH JJ 2H 09 ;labora#ioni. Dw

JJ

CH <- AD Eer. 0.9.0 2005-10-1A !. 9 "i 1/

Ing. Gabriele MONTI

www.ingmonti.it

?8T4 )a il contrario "i *8T4= cri%e nel regi tro "i tato 4*8G? il contenuto "i 8T. In que to mo"o mo"i)ica' tutti inieme' tutti i )lag /0/0. ?i noti c$e non e i tono le i tru#ioni corri !on"enti !er caricare i )lag "el regi tro "i tato e te o "el A/0 1;4*8G?3. Come e em!io cancelliamo il )lag "i #ero' c$e non !uB e ere cambiato con la C*I)lagJ=
LAHF ; caricamento di tutti i flag ; segue un'istruzione di mascheramento (vedi il paragrafo successivo) ; che lascia tutti i bit di AH come sono, tranne il bit 6, che ; corrisponde al flag di Zero e che viene messo a zero: AND AH, 10111111b ; azzera il bit del posto di peso 6 SAHF ; salva tutti i flag, Zero Flag stato azzerato

8ltre i tru#ioni c$e al%ano o mo"i)icano i )lag ono +,?T4' +O+4' +,?T45 e +O+45' c$e %e"remo in eguito.

1.2 Istruzioni per la manipolazione dei bit (bitwise operations)


Nell-ultimo e em!io "el !aragra)o !rece"ente c-era la nece itF "i a##erare un ingolo bit in un b>te' en#a c$e gli altri bit )o ero in)luen#ati in alcun mo"o. Nue ta 7 un-e igen#a c$e ca!ita !e o nella !rogramma#ione 8 embl>' !ecie nei !rogrammi c$e utili##ano "i !o iti%o "i IWO 1!er que to le i tru#ioni "i que to !aragra)o aranno utili##ate molto "i )requente nel !ro imo %olume3. +er trattare i ingoli bit "i un numero binario abbiamo a "i !o i#ione molte i tru#ioni e !o iamo )are molti trucc$i' c$e "e cri%iamo in que to ca!itolo.

1.2.1

NOT= com!lemento a uno

?e 7 nece ario commutare tutti i bit "i un numero' i u a l-i tru#ione NOT' c$e $a la eguente inta i= NO1 <Destinazione> ; Negazione in "omplemento a uno ; <Destinazione> <- NO1 <Destinazione> ; BB non modifi"a i flag BB Ogni bit a 1 "i I5e tina#ioneJ "i%iene uno 0' e %ice%er a. Nota im!ortante= come i %e"e anc$e nella tabella in a!!en"ice' l-i tru#ione NOT non mo"i)ica i )lag. +er cui bi ogna e%itare "i mettere una Gum! con"i#ionata "o!o una NOT. ; a )un#ionerebbe con i )lag !rece"enti: *-e em!io )atto !er la N;G' in 1.1.1 a !agina 1' non )un#ionerebbe con una NOT.

1.2.2

Ma c$eramenti

Nue te i tru#ioni er%ono !er mo"i)icare uno qual ia i "ei bit "i una loca#ione en#a cambiare gli altri. +er )are i ma c$eramenti i u ano i tru#ioni c$e e eguono bit !er bit le )un#ioni logic$e elementari' 8N5' O@ e .O@. *a inta i generale "elle i tru#ioni "i ma c$eramento 7 la eguente= <-nemoni"o istruzione di mas"+eramento> <destinazione> <mas"+era>

<-nemoni"o istruzione di mas"+eramento> :F AND G O3 G 6O3 *e i tru#ioni "i ma c$eramento $anno "ue o!eran"i. ; e ono tre= 8N5' O@ e .O@. *-o!eran"o "i "e tina#ione 7 il %alore c$e i "e%e mo"i)icare' cambian"o qualcuno "ei uoi bit' mentre il econ"o o!eran"o' c$e %iene comunemente "etto &masc*era&' 7 un numero c$e !ermette "i ele#ionare quali ono i bit "a mo"i)icare. *e i tru#ioni "i ma c$eramento e eguono ugli o!eran"i una )un#ione logica. *a )un#ione %iene %alutata bit !er bit' econ"o la tabella "i %eritF "elle )un#ioni 8N5' O@ o .O@. +er e em!io' e l-i tru#ione 7 8N5' il bit meno igni)icati%o "el ri ultato arF l-8N5 )ra il bit meno igni)icati%o "ella "e tina#ione e" il bit meno igni)icati%o "ella ma c$era' e co H %ia !er tutti gli altri bit. Nella !iega#ione in "ettaglio "elle i tru#ioni "i ma c$eramento in"ic$eremo em!re uno c$ema mnemonico' conce!ito !er ricor"are come )un#ionano que te i tru#ioni. In que t-e em!io u!!oniamo !er un momento "i a%ere un micro!roce ore "a 6 bit' c$e e egua le o!era#ioni "i ma c$eramento ui "ue o!eran"i O!1 e O!2' e c$e il ri ultato )ini ca in O!1.

AND
*a )un#ione logica 8N5 $a la tabella "i %eritF in"icata nello ?c$ema 1. *-i tru#ione 8 embl> 8N5 e egue la )un#ione logica 8N5 !er cia cuno "ei bit "ei "ue o!eran"i coin%olti. *a inta i 7 la eguente= !. 10 "i 1/ 2005-10-1A 09 ;labora#ioni. Dw

Ing. Gabriele MONTI 1999 - 2005

Calcoli

www.ingmonti.it

AND <destinazione> <mas"+era> ; reset dei 'it "+e sono a zero nella mas"+era <destinazione> <- <destinazione> AND <mas"+era> 5e tina#ione 1!rima3 Ma c$era @i ultato 15e tina#ione "o!o3 0 1 0 1 1 1 0 0 0 1 0 0 AND K Tabella "i %eritF "i 8N5= 0 1 0 0 0 1 0 1

Sc*ema 1+ AND sc*ema mnemonico e tabella !i $erit, +er )are lo c$ema mnemonico )ingiamo "i a%ere un regi tro "a 6 bit e "i "o%er mo"i)icare con una ma c$era il numero 0101b. ?e u iamo la ma c$era 1100b !ro%iamo tutte le combina#ioni e !o iamo %e"ere co a ucce"e al !rimo o!eran"o. ?e anali##iamo l-o!era#ione 8N5 %e"iamo c$e nei !o ti "ella ma c$era "o%e c-7 #ero 1a "e tra nello c$ema mnemonico3 il ri ultato 7 comunque #ero' mentre "o%e c-7 1 il ri ultato 7 i"entico a !rima. +erciB 8N5 er%e !er mettere a #ero i bit c$e nella ma c$era $anno 0. I bit con 1 nella ma c$era non cambiano. 8N5 nell-/0/0 ammette i con ueti o!eran"i< in !articolare Ima c$eraJ !uB e ere un o!eran"o in imme"iato' una loca#ione "i memoria o un regi tro. ; em!i=
AN* *), ++++++6+b AN* *7, 6666++++b ; cancella il bit di peso ;;

; cancella il nibble piA significativo e ; mantiene intatto quello meno significativo AN* E3), 6888888886& ; cancella il nibble meno significativo di E3) AN* 5K(E /(0 #-!, +6666b ; cancella tutti i bit tranne il bit di peso ;J

8N5 i u a molto !e o !er %eri)icare quanto %ale un ingolo bit "i un numero. ?e' !er e em!io' i %uole %eri)icare e il econ"o bit !i( igni)icati%o "i ?I 7 1' i !uB )are co H=
AN* *-, J6& "N? Luel5itEraCno ; cancella tutti i bit tranne il bit di peso ;F ; salta se il bit quattro uno

Nue to mo"o "i %eri)icare il %alore "i un bit 7 intere ante !erc$O "o!o la 8N5 i !uB u are ubito una Gum!' en#a )ar !rima con)ronti. In)atti il ri ultato "ella 8N5 !uB e ere olamente 0 o!!ure 60$ 101000000$3' !er cui i !uB altare ubito e i u a una PV o" una PNV. Il controllo en#a com!are !uB e ere )atto anc$e u !i( "i un bit alla %olta< %e"iamo come )acciamo a controllare e i bit c$e ci intere ano ono tutti a #ero=
AN* A7, +6+6666b ; mi interessano il bit ;Je ;F ; dopo la AN* A7 6 oppure +6+6666b, salto sul flag 2ero: "? #ono(uttiA2ero

;- im!ortante tenere bene a mente c$e l-i tru#ione 8N5 &"i trugge& l-o!eran"o "e tina#ione' c$e non 7 !i( uguale a !rima. +er que to' e il %alore "ell-o!eran"o "e tina#ione 7 nece ario anc$e nel !ro ieguo "el !rogramma' arF nece ario al%arlo !rima 1o!!ure u are T;?T' come i %e"rF !re to ..3. ?i ricor"a c$e l-i tru#ione 8N5 bit !er bit 7 quella c$e in C %iene e !re a con X' mentre XX ra!!re enta l-8N5 &logico& "a u ar i nelle e !re ioni logic$e' come quelle "elle i tru#ioni &i)&.

TE T
Nue ta i tru#ione 7 come una 8N5' ma non memori##a il ri ultato. Mo"i)ica olo i )lag' c$e !o ono e ere u ati !er una Gum! ubito "o!o. Ei to c$e T;?T non mo"i)ica ne una &"e tina#ione& 7 )acile )arne una equen#a' !er reali##are trutture "i controllo imili alle &Ca e& o alle & witc$& "ei linguaggi a" alto li%ello. 1E!1 <operando> <mas"+era> ; 1est 'it <operando> AND <mas"+era> ; em!io=
(E#( A7, +66++6+b "? #ono(uttiA2ero ; se arrivo qui almeno un bit a uno. $ra guardo qual :

09 ;labora#ioni. Dw

Eer. 0.9.0 2005-10-1A

!. 11 "i 1/

Ing. Gabriele MONTI


(E#( A7, 6666+66b "N? 5it;vale+ ; il bit di peso ; vale + (E#( A7, 666+666b "N? 5it:vale+ ; il bit di peso : vale + (E#( A7, +666666b "N? 5itIvale+ ; il bit di peso + vale + ; se arrivo qui + il bit di peso 6

www.ingmonti.it

T;?T 7 come 8N5 ma non mo"i)ica regi tri o memoria.

-.
8nc$e l-i tru#ione O@ e egue la )un#ione O@ bit !er bit. *a tabella "i %eritF "i O@ 7 in"icata nello ?c$ema 2. O3 <destinazione> <mas"+era> ; set dei 'it "+e sono a uno nella mas"+era <destinazione> <- <destinazione> O3 <mas"+era> 5e tina#ione 1!rima3 Ma c$era @i ultato 15e tina#ione3 0 1 1 1 1 1 0 0 0 1 0 1 -. K Tabella "i %eritF "i O@= 0 0 1 1 1 1

0 1

Sc*ema /+ -. sc*ema mnemonico e tabella !i $erit, 5allo c$ema mnemonico i !uB ca!ire c$e' quan"o nella ma c$era c-7 0 1a "e tra nello c$ema mnemonico3 i bit "el !rimo o!eran"o rimangono uguali' mentre quan"o c-7 1 "i%engono 1. Nuin"i O@ mette a 1 i bit ele#ionati con un 1 nella ma c$era' la cia come ono i bit con lo 0. ; em!i=
$0 *), ++++++6+b ; mette tutti a uno, tranne il bit di peso ;; ; c&e rimane com%era $0 *7, 6666++++b ; mette tutti + nel nibble meno significativo e ; mantiene intatto quello piA significativo $0 E3), 68& ; mette nel nibble meno significativo di E3) $0 5K(E /(0 #-!, +6666b ; mette + nel il bit di peso ;J

?i !uB notare c$e le ma c$ere c$e i u ano nelle O@ ten"ono a" e ere il contrario "i quelle c$e i u erebbero in una 8N5. In)atti 8N5 non $a ne un e))etto ui bit a 1 "ella ma c$era' mentre !er O@ ciB acca"e ui bit a 0. ; em!io=
0eset5it: ELC ++++6+++b #et5it: ELC +666b .. ; qui devo cancellare il bit : di A7, lasciando gli altri come sono: AN* A7, 0eset5it: .. ; qui devo impostare il bit : di A7, lasciando gli altri come sono: $0 A7, #et5it: ..

*a O@ non !uB e ere utili##ata !er )are em!lici te t ui ingoli bit. ?e i %uole )are "i imile a quanto illu trato !er la 8N5' i "e%e u are una CM+ in !i(=
; voglio vedere se il bit ;; +, con $0 $0 A7, +++6++++b ; quo A7 vale +++6++++b oppure ++++++++b ; il flag di 2ero non aiuta, come nella AN*, ; devo fare una 3./: 3./ A7, 688& "E 3MeraMCno 3MeraM?ero: .. parte del programma c&e tratta il "caso 2ero" "./ 3ontinua 3MeraMCno: .. parte del programma c&e tratta il "caso uno"

!. 12 "i 1/

2005-10-1A

09 ;labora#ioni. Dw

Ing. Gabriele MONTI 1999 - 2005


3ontinua:

Calcoli

www.ingmonti.it

,n e em!io intere ante "i u o "i 8N5 e O@ 7 la &)u ione& "i "ue nibble "a regi tri "i%er i=
AN* A7, ++++6666b ; a22era il nibble basso di A7 AN* 57, 6666++++b ; a22era il nibble alto di 57 $0 A7, 57 ; "fonde" in A7 i due nibble ; ora nel nibble alto di A7 c% il nibble alto di 57, mentre nel nibble ; basso c% ancora lo stesso nibble basso di prima.

0-.
*a )un#ione "i O@ e clu i%o $a una tabella "i %eritF imile alla O@' olo c$e quan"o entrambi i bit ono a 1 il ri ultato 7 0. 6O3 <destinazione> <mas"+era> ; toggle dei 'it "+e sono a uno nella mas"+era <destinazione> <- <destinazione> 6O3 <mas"+era> 5e tina#ione 1!rima3 Ma c$era @i ultato 15e tina#ione3 0 1 1 1 1 0 0 0 0 1 0 1 0-. K Tabella "i %eritF "i .O@= 0 1 0 0 1 1 1 0

.O@ la cia i bit come ono quan"o la ma c$era 7 #ero' mentre cambia 1&toggle&3 il %alore "ei bit c$e $anno 1 nella mac$era. ; em!io=
.. ; cambio il bit di peso ; di A) ; se non ci fosse la )$0 dovrei fare cosN: (E#( A7, +665 "? Era?ero EraCno: ; lo faccio diventare 2ero: $0 A7, +66b "./ 3ontinua Era?ero: AN* A7, +++++6++b 3ontinua: ..

,n u o !articolare "ella .O@' molto "i))u o' 7 il eguente=


.$4 A), 6 )$0 A), A) ; a22eramento di un registro ; un modo veloce per a22erare un registro

Il ri ultato c$e "elle "ue i tru#ioni !rece"enti 7 e attamente lo te o. *a "i))eren#a 7 c$e l-o!era#ione con .O@ a%%iene tutta )ra regi tri e non coin%olge o!eran"i imme"iati "a caricare in )a e "i )etc$. +er que to l-i tru#ione occu!a meno memoria e" 7 !i( %eloce "a caricare in )a e "i )etc$' come i !uB %e"ere "al con)ronto "ei co"ici "i macc$ina "el eguente e em!io= I tru#ione MOE 8.' 0 *ing. Macc$ina I tru#ione C/$ .O@ 8.' 8. 00 00 *ing. Macc$ina AA$ C0$

,n altro mo"o "i a##erare un regi tro !otrebbe e ere il eguente=


AN* A7, 6

ma que to non "F ne un %antaggio ri !etto alla MOE 8.' 0 e" 7 molto meno com!ren ibile "i que t-ultima. Come con eguen#a "i quanto "etto !rece"entemente que te trane i tru#ioni non )anno &nulla&=
AN* A7, 688& ; questa istru2ione cambia solo i flag $0 A7, 6 ; questa istru2ione cambia solo i flag )$0 A7, 6 ; questa istru2ione cambia solo i flag

09 ;labora#ioni. Dw

Eer. 0.9.0 2005-10-1A

!. 1A "i 1/

Ing. Gabriele MONTI

www.ingmonti.it

In %eritF' "ato c$e cambiano i )lag' e e !o ono e ere u ate !er %eri)icare e un regi tro 7 #ero o e 7 negati%o' anc$e e i %antaggi non ono molto gran"i e" il co"ice "i%enta molto !i( o curo. Ee"iamo ora un e em!io "i u o un !o- !i( com!licato "elle i tru#ioni "i mani!ola#ione "ei ingoli bit. Il eguente brano "i !rogramma' c$e 7 utile nella %i uali##a#ione "ei numeri in e a"ecimale' mette nel regi tro 8* il co"ice 8?CII "ella ci)ra e a"ecimale meno igni)icati%a "el numero c$e era contenuto ini#ialmente in 8*.
.. ; in A7 c% il numero da convertire .$4 57, A7 ; copia A7 in 57, perc&O ora devo ; distruggere A7 AN* A7, ++++5 ; cancella il nibble alto ; ora in A7 c% il numero binario della cifra esadecimale meno significativa ; se la cifra fra 6 e P devo mettere in A7 un codice A#3-- fra "6" e "P"; ; se la cifra fra +6 e +Q devo mettere in A7 un codice A#3-- fra "A" e "8" 3./ A7, P ; se maggiore di P DR 7ettera: "A A#3--lettera A#3--cifra: ; se arrivo qui devo mettere in A7 il codice A#3-- della cifra A** A7, "6" "./ Avanti A#3--lettera: A** A7, "A" S +6 ; in A7 va "A" se prima era +6, ; "5" se era ++ .. "8" se era +Q Avanti: ..

1.2.A

?!o tamenti e rota#ioni

*-8 embl> /0/0 mette a "i !o i#ione alcune i tru#ioni c$e !ermettono "i !o tare i bit "i un numero in %ari mo"i.

S*i"t
*-i tru#ione "i $i)t !o ta a "e tra' %er o le ci)re meno igni)icati%e' o a ini tra' %er o le !i( igni)icati%e' tutti i bit "el uo o!eran"o. Naturalmente que to !o tamento crea un bit libero "a una !arte e ne e !elle un alto "all-alta !arte. Il bit c$e %ene &e !ul o& )ini ce nel )lag "i carr>' mentre nel bit libero entra uno #ero.

)igura /+ s*i"t a sinistra e a !estra *a 4igura 2 illu tra il )un#ionamento "elle i tru#ioni "i $i)t' c$e $anno la eguente inta i= !D3 <destinazione> ; !+ift 3ig+t ; s+ift a destra di ; Cuanto <numero di ; <destinazione> <<numero di spostamenti> tutti i 'it di <destinazione> tante >olte spostamenti> <destinazione> >>

!D. <destinazione> <numero di spostamenti> ; !+ift .eft ; s+ift a sinistra di tutti i 'it di <destinazione> tante >olte ; Cuanto <numero di spostamenti> ; <destinazione> <- <destinazione> << <numero di spostamenti> :F <numero in immediato> G C. !. 16 "i 1/ 2005-10-1A 09 ;labora#ioni. Dw

Ing. Gabriele MONTI 1999 - 2005

Calcoli

www.ingmonti.it

,na ingola i tru#ione ./0 !uB )are !i( "i uno !o tamento o rota#ione' anc$e e ciB 7 otto!o to al limita#ioni nell-/0/0. Il numero "i !o tamenti i !uB mettere nel regi tro C* o in"icare in imme"iato nell-i tru#ione Nell-/0/0 l-unico numero c$e i !uB u are in imme"iato 7 1' !er cui e i %uole )are !i( "i uno !o tamento bi ogna u are C*. ,na $i)t "a 6 !o tamenti 7 mo trata in 4igura A.

4igura A= $i)t &multi!la& a ini tra 12/0J3 ; em!i=


#B0 A7, + ; s&ift a destra di + posto in A7 #B7 A!, 37 ; s&ift a sinistra in memoria del numero di posti c&e c% in 37 #B0 E*), +; ; s&ift a destra di +; posti ; ,, A((EN?-$NE: 7A /0$##-.A 8CN?-$NA #$7$ 3$N 3/C *A77%G6;GF -N /$-,, #B7 3), J ; s&ift a sinistra di J ,, #$7$ ;GF R ,, #B7 ;+!, 3) ; 4-E(A($, non 3), #B7 EA), A7 ; 4-E(A($, solo 37,

,na bella !ro!rietF aritmetica "ei numeri binari 7 quella "i ren"ere molto )acili le molti!lica#ioni e "i%i ioni !er 2' 6' / e !er tutte le !oten#e "i "ue. Come nei numeri in ba e 10 la molti!lica#ione !er 10 i ottene%a aggiungen"o alla "e tra "el numero una nuo%a ci)ra "i %alore #ero' co H acca"e nel i tema binario !er molti!licare !er "ue. *-aggiunta "i un bit a #ero alla &"e tra& "i un numero binario 7 una molti!lica#ione !er "ue. ; em!i= 110b K 0 < aggiungo uno #ero a "e tra= 1100b K 0 S 2 K 12 1001b K 9 < aggiungo uno #ero a "e tra= 10010b K 9 S 2 K 1/ 110b K 0 < aggiungo "ue #eri a "e tra= 11000b K 0 S 6 K 26 ,n "i cor o analogo alla molti!lica#ione i !uB )are !er la "i%i ione !er !oten#e "i "ue. Togliere un bit alla &"e tra& "i un numero binario equi%ale a "i%i"erlo !er "ue. ; em!i= 1010b K 10 < tolgo uno #ero a "e tra= 101b K 10 W 2 K 5 1001b K 9 < tolgo un ,NO a "e tra= 100b K 6 con re to "i 1 1il bit &tolto& a "e tra "el numero3. 1100b K 12 < tolgo "ue ci)re a "e tra= 11b K 12 W 6 K A 1010b K 10 < tolgo "ue ci)re a "e tra= 10b K 10 W 6 K 2 con re to "i 2 110b &tolto& a "e tra3 ?i !uB conclu"ere c$e' con i"eran"o normali numeri binari' cio7 numeri en#a egno' l-o!era#ione "i $i)t a ini tra "i n !o ti equi%ale alla molti!lica#ione !er 2n' mentre lo $i)t a "e tra 7 una "i%i ione !er 2n. ?e un numero 7 con egno e" $a egno negati%o' le co e cambiano' !erc$O entra in gioco il com!lemento a "ue. *-o!era#ione !uB comunque e ere ri olta con uno !o tamento "i bit' !er cui ono tate intro"otte "ue i tru#ioni !eci)ic$e c$e "i%i"ono e molti!licano !er !oten#e "i "ue i numeri con egno. *e "ue i tru#ioni in que tione ono ?8@ e ?8*' le o!era#ioni "i & $i)t aritmetico&. !A3 <destinazione> <numero di spostamenti> ; !+ift Arit+meti"all, 3ig+t ; di>ide <destinazione> per ;K<numero di spostamenti> ; <destinazione> <- <destinazione> ? ;K<numero di spostamenti> !A. <destinazione> <numero di spostamenti> ; !+ift Arit+meti"all, .eft ; moltipli"a <destinazione> per ;K<numero di spostamenti> ; <destinazione> <- <destinazione> 7 ;K<numero di spostamenti> 09 ;labora#ioni. Dw Eer. 0.9.0 2005-10-1A !. 15 "i 1/

Ing. Gabriele MONTI <numero di spostamenti> :F <numero in immediato> G C.

www.ingmonti.it

?8@ e ?8* !o tano i bit e" aggiungono uno o #ero in mo"o c$e il ri ultato ia' aritmeticamente' una "i%i ione o" una molti!lica#ione con egno !er una !oten#a "i "ue.

.otazioni
*-o!era#ione "i rota#ione non $a igni)icato aritmetico ma !uB e ere utile quan"o 7 nece ario !o tare i bit ma non i %uole !er"ere quelli c$e %errebbero &e !ul i& "a una $i)t. @otate )un#iona come una $i)t' con la "i))eren#a c$e non &entra& em!re un bit "i %alore 0' ma &ricircolato& quello c$e e ce "all-altra !arte e c$e %iene anc$e co!iato nel carr>. 3O3 <destinazione> <numero di spostamenti> ; 3otate 3ig+t ; ruota i 'it a destra 3O. <destinazione> <numero di spostamenti> ; 3otate .eft ; ruota i 'it a sinistra <numero di spostamenti> :F <numero in immediato> G C. *a 4igura 6 illu tra il )un#ionamento "ell-i tru#ione rotate' i numeri in"icano c$e &!rima& i )a lo !o tamento "i tutti i bit' !oi i co!ia il %alore c$e e ce ia nel carr> c$e nel !rimo bit. )igura 1+ rotazioni semplici

,n-i tru#ione imile alla rotate ma c$e la &e ten"e& anc$e al carr> 7 la rotate con carr>' c$e )a &entrare& il %alore c$e 7 nel )lag "i carr> !rima "ell-i tru#ione. Nella 4igura 5 7 illu trato il )un#ionamento. I numeri igni)icano c$e il %alore "el carr> c$e %iene co!iato nel bit c$e entra 7 quello c$e %i era !rima "ell-e ecu#ione "ell-i tru#ione. 5o!o l-e ecu#ione "ell-i tru#ione il )lag "i carr> a ume il %alore "el bit u cito !er lo !o tamento. 3C3 <destinazione> <numero di spostamenti> ; 3otate *it+ Carr, 3ig+t ; ruota i 'it a destra "ol "arr, 3C. <destinazione> <numero di spostamenti> ; 3otate *it+ Carr, .eft ; ruota i 'it a destra "ol "arr, <numero di spostamenti> :F <numero in immediato> G C.

!. 10 "i 1/

2005-10-1A

09 ;labora#ioni. Dw

Ing. Gabriele MONTI 1999 - 2005

Calcoli

www.ingmonti.it

4igura 5= rota#ioni con carr> ,n e em!io "i u o "i @C* 7 in"icato nel eguente co"ice=
.. ; una "s&ift" di J bit in A) in cui "entrano" + invece di 2ero: .$4 3), J ; quattro "s&ift" Luattro5it: #(3 ; #et 3arr1, mette 38 D + 037 A), + ; "s&ift" in cui entra un + <38 D +> 7$$/ Luattro5it ..

Ora un trucco !er cambiare l-or"ine "ei bit "i una wor"=
.. ; cambio l%ordine dei bit di A) .$4 3), +F ; A) &a +F bit GET #edici5it: #B7 A), + ; sbatto fuori i bit piA significativi, c&e ; vanno, uno alla volta, nel carr1 030 5), + ; dal carr1 vengono messi, uno alla volta, ; in 5), spingendo dall%altra parte 7$$/ #edici5it .$4 A), 5) ..

Ee"iamo ora un e em!io c$e com!leta uno "ei !rece"enti e %i uali##a tutte le ci)re e a"ecimali "i un numero "i 10 bit. In que to e em!io i !uB %e"ere anc$e un u o "ell-i tru#ione @O*.
.;GF ; utili22er una 0$7 da J, .. ; in A) un numero da visuali22are in esadecimale ; si lavora su quattro nibble, user la 0$7 J volte: .$4 3), J LuattroNibble: 0$7 A), J ; copio il numero "girato" in *) cosN lo posso distruggere con AN* ; <uso *) perc&O mi serve la sua parte bassa *7> .$4 *), A) ; lascio solo il nibble meno significativo: AN* *), ++++b 3./ *7, P "A A#3--lettera ; una cifra: gli aggiungo il codice A#3-- della prima cifra: A** *7, "6" "./ #crivo#u.onitor A#3--lettera: ; una lettera: gli aggiungo il codice A#3-- della prima lettera, ; ma devo togliergli +6 perc&O quando il numero +6 devo stampare ; la lettera A: A** *7, "A" E +6 #crivo#u.onitor: ; salvo A) perc&O viene rovinato dal servi2io *$# c&e visuali22a ; il carattere:

09 ;labora#ioni. Dw

Eer. 0.9.0 2005-10-1A

!. 12 "i 1/

Ing. Gabriele MONTI


/C#B A) ; salva A) nello stacU <vedi relativo capitolo> .$4 AB, 6; ; servi2io di visuali22a2ione del carattere ; il cui codice A#3-- in *7 -N( ;+& ; c&iamata del servi2io *$# /$/ A) ; ripristina A) dallo stacU <vedi relativo capitolo> 7$$/ LuattroNibble ; all%uscita, a for2a di "girare" A), tornato uguale all%ini2io ..

www.ingmonti.it

Scansione !ei bit !i un numero


*e i tru#ioni "i can ione "i bit ono !re enti "al A/0 e !ermettono "i ricercare in un regi tro e c-7 un uno o" uno #ero. ?inta i= &!H <3egistroDestinazione> <!orgente> < Bit Scan )orwar" 1A/0J3 < can ione "ei bit "i I orgenteJ "a "e tra a ini tra &!3 <3egistroDestinazione> <!orgente> < Bit Scan .e%er e 1A/0J3 < can ione "ei bit "i I orgenteJ "a ini tra a "e tra I@egi tro5e tina#ioneJ !uB e ere un regi tro a 10 o a A2 bit' I?orgenteJ !uB e ere un regi tro o" una loca#ione "i memoria' a 10 o a A2 bit. *-i tru#ione C?4 can"i ce' "al bit 0 &in a%anti& 1)orwar"3' l-o!eran"o orgente e a##era il bit "i carr> e tutto il orgente 7 #ero. ?e in%ece c-7 almeno un bit a uno il bit "i carr> %iene me o a uno e nell-o!eran"o "i "e tina#ione )ini ce il !e o "el !rimo bit c$e 7 tato tro%ato a uno. C?@ 1Bit Scan .e%er e3 )a la te a can ione "i C?4' olo c$e l-or"ine "i can ione 7 "al bit !i( igni)icati%o al meno igni)icati%o 1re%er e3. +er reali##are le o!era#ioni com!iute "a C?4 o C?@ con un /0/0 arebbe tato nece ario cri%ere co"ice !iutto to com!le o' come nell-e em!io eguente 1l-e em!io 7 comunque i trutti%o ulle tecnic$e "i !rogramma#ione con le i tru#ioni "i !o tamento e rota#ione3=
; codice G6GF equivalente a 5#0 A), 5) <:GFR> .$4 3), +F ; contatore dei bit del ciclo /er(utti-bit: .$4 A), + ; masc&era ini2iale (E#( 5), A) ; guarda se a uno il bit di 5) c&e corrisponde a quello a uno ; della masc&era "N? (rovato #B7 A) ; sposta a sinistra l%uno della masc&era 7$$/ /er(utti-bit Non(rovato: ; se giungo qui nessun bit di 5) $N $0 3), 68888&; solo perc&O il flag ? sia 2ero <il risultato diverso da 2ero> ; <si modifica anc&e 3), ma il suo valore non ci interessa piA> "./ /rosegui (rovato: ; se salto qui vuol dire c&e in 3) c% il numero del bit trovato 9 + *E3 3) ; 3) VE numero del bit trovato .$4 A), 3) ; alla fine quel numero deve andare in A) )$0 3), 3) ; istru2ione per mettere $N il flag di 2ero ; <cancella anc&e 3), ma non importa> $0 3), + ; solo perc&O il flag ? sia uno si cancella 3), ma ; non importa> /rosegui: ; il risultato identico a quello dell%istru2ione 5#0 A), 5), ; l%unica differen2a c&e questo codice mette S+ nel registro 3) ; se 5) era a 2ero e vi mette 6 altrimenti

!. 1/ "i 1/

2005-10-1A

09 ;labora#ioni. Dw