Manipulation des bits
Nous avonsvu omment aéderaux otets,qui est la pluspetite unité adressable.Cepen-
dantlapluspetitequantitéd'informationest lebit.Onararementl'oasiond'yaéder pour
eetuerdesaluls(bienqueelapuisseêtreintéressantpourprogrammerlamultipliation,par
exemple). La manipulation des bits est,par ontre, indispensable en programmation système,
pluspréisémentlorsduontrle des périphériques. En eeton asouventbesoin,dans e as,
deoderdel'information binaire:onpourraitutiliserunotetpourune telleinformationmais
onperdrait alors beauoup d'espae et,surtout,beauoup de tempslors deséhanges aveles
périphériques.On adon intérêt àoderes informations par desbits individuels, e qui per-
met l'utilisation d'un otetau lieu de huit (tout aumoins dansle as optimum). Ilfaut don
pouvoiraéder àhaundes bits individuellementpourela. C'est l'objet des instrutions de
manipulation de bits.
20.1 Instrutions logiques
20.1.1 Mise en plae
Introdution.-Lesinstrutionslogiquesorrespondentàl'implémentationdeertainsonne-
teurslogiquestelsquelanégation,laonjontionetladisjontion.Un otetpeutêtreonsidéré
ommeunotupletdebits.Lorsd'uneinstrutionlogique,onexéutelamêmeopérationlogique
enparallèlesurhaundeshuitbits,1représentantlevraiet 0lefaux.
Langagesymbolique.-Ilyaquatreinstrutionslogiquesimplémentéessurle8086/8088:lesins-
trutionslogiquesparallèles(oubitàbit)denégationNOT,deonjontionAND,dedisjontion
ORetdedisjontionexlusiveXOR(eXlusive OR):
NOT soure
AND destination, soure
OR destination, soure
XOR destination, soure
Sémantique.-Si,avantl'instrution, leontenudel'aumulateurALest :
1110 0011
et eluiduregistreBLest:
0010 0001
alors,aprèsl'instrution:
AND AL, BL
leontenudel'aumulateurALest:
0010 0001.
Langagemahine.-1
o
)L'instrutionNOTest odéesurdeuxotetspar:
| 1111 011w | mod 010 r/m |
-2
o
)L'instrutionANDpossèdetroisodagesselonlanaturedesopérandes:
a) La onjontion entre mémoire ou registreet mémoire est odée sur deux ou quatre
otetspar:
| 0010 00dw | mod reg r/m | | |
b)Laonjontionimmédiatedansl'aumulateurestodéesurdeuxoutroisotetspar:
| 0010 010w | donnée | donnée si
w = 1
|)Laonjontionimmédiateaveleontenu d'uneasemémoireouderegistreestodée
surtroisouquatreotetspar:
| 1000 000w | mod 100 r/m | donnée | donnée si
w = 1
|-3
o
)L'instrutionORpossèdetroisodagesselonlanature desopérandes:
a)Ladisjontionentremémoireouregistreetmémoireestodéesurdeuxouquatreotets
par:
| 0000 10dw | mod reg r/m | | |
b)Ladisjontionimmédiatedansl'aumulateurest odéesurdeuxoutroisotetspar:
w = 1
)Ladisjontionimmédiate ave leontenu d'uneasemémoireouderegistreest odée
surtroisouquatreotetspar:
| 1000 000w | mod 001 r/m | donnée | donnée si
w = 1
|-3
o
)L'instrutionXORpossèdetroisodagesselonlanature desopérandes:
a) Ladisjontion exlusive entre mémoireou registreet mémoire est odée surdeux ou
quatreotetspar:
| 0011 00dw | mod reg r/m | | |
b) La disjontion exlusive immédiate dans l'aumulateurest odée sur deux ou trois
otetspar:
| 0011 010w | donnée | donnée si
w = 1
|)La disjontionexlusiveimmédiateavele ontenu d'uneasemémoireou deregistre
estodéesurtroisouquatreotetspar:
| 1000 000w | mod 110 r/m | donnée | donnée si
w = 1
|Exemple.- Vérions le résultat del'exemple vu à proposde la sémantique en érivant un pro-
gramme,d'abordenlangagesymbolique:
MOV AX,3000
MOV DS,AX
MOV AL,E3
MOV BL,21
AND AL,BL
MOV [0400℄,AL
RET
puisenlangagemahine:
B8 00 30
8E D8
B0 E3
B3 21
20 D8
A2 00 04 C3
Codonseprogramme:
C:\COM>debug
-E CS:100 B8 00 30
-E CS:103 8E D8
-E CS:105 B0 E3
-E CS:107 B3 21
-E CS:109 20 D8
-E CS:10B A2 00 04
-E CS:10E C3
-R BX
BX 0000
:
-R CX
CX 0000
:F
-N AND.COM
-W
-Q
Après exéutiondu programme and.om,onvérieque l'on abien 21 =33h à l'emplaement
mémoirehoisi:
C:\COM>debug
-D 3000:400
3000:0400 21 00 03 00 0B 00 00 00-00 00 00 00 00 00 00 00 !...
3000:0410 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ...
3000:0420 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ...
3000:0430 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ...
3000:0440 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ...
3000:0450 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ...
3000:0470 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ...
3000:0470 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ...
20.1.2 Appliation des instrutions logiques
20.1.2.1 Masquagesimple
Introdution.- On veut souvent déterminer la valeur d'un ou de plusieurs bits. On pourrait
évidemmentamenerhaundeesbitsàlapremièreposition(grâeauxinstrutionsdedéalage
quenousverronsi-après)ettester.Maiseireprésentebeauoupd'instrutions.Onutilisedon
pluttlatehniquedumasquagequenousallonsdériremaintenant.
Onparledemasquage simplelorsqu'onveutonnaîtrelavaleurd'unseulbit.
Prinipe.-On utilise l'instrutionAND et onregardel'indiateur voulu du registredesindia-
teurs.Parexemple,pourdéterminersile bitsetrouvantàlaposition 3duregistreBLestégal
à1,onplae 0000 1000b,valeurappeléemasque, dansl'aumulateurALet onexéutel'ins-
trutionANDAL,BL.Ilpeutyavoirauplusun1danslerésultat:àlaposition3.Depluson
obtiente1si,etseulementsi,lavaleurdutroisièmebitdeBLestégaleà1.Ainsiletroisième
bitdeBLestégalà1si,et seulementsi,l'indiateurZFestégalà0aprèsette instrution.
20.1.2.2 Masquageettradution
Introdution.-Lemasquagepeutservirpourdéterminerlavaleurd'unbit,ommenousvenons
delevoir.Ilpeutégalementservirdansertainsasàlatradution.
Appliation.- Dans le odage ASCII,les hires `0'à`9' sontodéspar lesvaleurs 30hà39h.
Lorsqu'onréupéreleodeASCIId'unhire,pourobtenirlavaleurnumériqueorrespondante,
il sut donde soustraire30h.Cei peutêtre obtenu parune soustrationmais onpeutaussi
utiliserunetehniquedemasquage.
Supposons en eet que le ode ASCII se trouve dans le registre AL. Plaçons 0Fh, 'est-à-
dire0000 1111bdans leregistreBL. AlorsANDAL,BLdonne lavaleurnumériqueduhire
orrespondant.
20.1.2.3 Masquagemultiple
On peut vouloirtester plusieursbits. On peut le faireun par un. On peut aussi lestester
tousàlafois,maisuniquementpoursavoirs'ilssonttousprésents(avexor)ousiaumoinsl'un
d'euxest présent(aveor).
20.1.2.4 Initialisationà zéro
Onavuommentinitialiserl'aumulateuràzérogrâeàl'instrution:
MOV AX, 0
quisetraduitpartroisotetsenlangagemahine.Pourgagnerdelaplaedansl'espaeréservé
auode,lesprogrammeursutilisentsouventl'astuesuivante:
XOR AX, AX
quiréaliselamêmehosemaisest odésurdeuxotetsenlangagemahine.
20.1.2.5 Test à zéro
Onavuommenttestersil'aumulateurestnulgrâeàl'instrution:
CMP AX, 0
qui setraduitpartrois otetsen langagemahine. Pourlamême raison quei-dessus,les pro-
grammeursutilisentsouvent:
20.2 Les déalages logiques
Introdution.- Puisqueles miroproesseursmanipulent desnombresen binaire,ils peuventef-
fetuer failementune multipliationou une division pardeux, en déalanttousles bitsd'une
positionàgauhe(éventuellementaveundébordement)ouàdroite(enperdantlepremierbit).
Ceiexpliquel'intérêtdesdéalages.
Les onepteurs du miroproesseur 8080, puis eux du 8086/8088, ont implémenté deux
famillesdedéalages:l'unepourmultiplieretdiviserpardeuxlesentiersnaturels(appelésdé-
alageslogiques)etl'autrepourlesentiersrelatifs(appelésdéalagesarithmétiques).Nous
allonsnousintéresseraupremiertypededéalagesdansette setion.
Langagesymbolique.-1
o
)L'instrution :
SAL soure
(pourl'anglaisShift ArithmetiLeft)ou:
SHL soure
(pourl'anglaisSHiftLeft)déaletouslesbitsd'unregistreoud'uneasemémoired'uneposition
verslagauheet plaeunzéroommebit leplusàdroite, equiéquivautàunemultipliation
pardeux.Lorsqu'ilyadébordement,l'indiateurdedébordementCFestpositionnéàun.L'in-
diateur dedépassement deapaité OFest misà1si lebit depoidsfort(eluide signepour
lesentiers relatifs)esthangé(pertedel'informationdesiggne),sinonilest misà0:
CF
← ← 0
Cedéalageàgauhepeutavoirlieuplusieursfois,lenombredefoisétantleontenudeCL.
2
o
)L'instrution :
SHR soure
(pourl'anglaisSHiftRight)déaletouslesbitsd'unregistreoud'uneasemémoired'uneposition
versladroite et plaeun zérodans le bit leplus àgauhe,e qui équivautàune division par
2non signée.Le bitde droiteest plaé ommeindiateurdedébordementCF. L'indiateurde
dépassementdeapaité OF estmis à1sile bitdepoidsfortest diérentdupréédent(perte
del'informationdesigne),sinon ilestmisà0:
0 → →
CFCedéalageàdroitepeutavoirlieu plusieursfois,lenombredefois étantleontenu deCL.
3
o
)L'instrution :
SAR soure
(pour l'anglais Shift Arithmeti Right) déale les 7ou 15 bits de poids faible d'un registreou
d'uneasemémoired'unepositionversladroiteetplaeunzéroommeseptièmeouquinzième
bit, equi équivautàunedivision par2signée. Lebit dedroiteest plaéommeindiateurde
débordementCF.L'indiateurdedépassementdeapaitéOF estmisà0.
Langagemahine.-1
o
)Ledéalageàgauheest odésurdeuxouquatreotetspar:
| 1100 00vw | mod 100 r/m | | |
ave
v = 0
pourundéalageetv = 1
pourplusieursdéalagesdontlenombreestontenudans CL(dontlavaleurn'estpasdétruite).-2
o
)LedéalagelogiqueàdroiteSHRestodésurdeuxouquatreotetspar:
| 1101 00vw | mod 100 r/m | | |
ave
v = 0
pourundéalageetv = 1
pourplusieursdéalagesdontlenombreestontenudans CL(dontlavaleurn'estpasdétruite).-3
o
)LedéalagearithmétiqueàdroiteSARestodésurdeuxouquatreotets
par:
| 1101 00vw | mod 111 r/m | | |
ave
v = 0
pourundéalageetv = 1
pourplusieursdéalagesdontlenombreestontenudans CL(dontlavaleurn'estpasdétruite).Exemple.- Vérionsqueledéalagelogique àdroitede 8Fh,soit 1000 1111b,donne bien 0100
0111b,soit 47h.Érivonsunprogramme,d'abordenlangagesymbolique:
MOV AX,3000
MOV DS,AX
MOV AL,8F
SHR AL,1
MOV [0400℄,AL
RET
puisenlangagemahine:
B8 00 30
8E D8
B0 8F
D0 E8
A2 00 04
C3
Codonseprogramme:
C:\COM>debug
-E CS:100 B8 00 30
-E CS:103 8E D8
-E CS:105 B0 8F
-E CS:107 D0 E8
-E CS:109 A2 00 04
-E CS:10C C3
-R BX
BX 0000
:
-R CX
CX 0000
:D
-N SHR.COM
-W
Eriture de 0000D otets
Aprèsexéutionduprogrammeshr.om,onvériequel'onabien47hàl'emplaementmémoire
hoisi:
C:\COM>debug
-D 3000:400
3000:0400 47 00 03 00 0B 00 00 00-00 00 00 00 00 00 00 00 G...
3000:0410 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ...
3000:0420 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ...
3000:0430 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ...
3000:0440 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ...
3000:0450 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ...
3000:0470 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ...
3000:0470 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ...
-q
20.3 Les rotations
Lorsqu'on eetue un déalage àgauhede 4 bits, les 4bits les plus àgauhesontperdus
pour un déalage sur un otet (à part l'un d'eux qui peut être réupéré dans l'indiateur de
débordement).Dansertainsas,onneveutpasperdreesbits.Lafamilledesinstrutionsde
rotationpermetderéarrangerlesbitssanslesperdre:lebitquiestexpulséd'untéréapparaît
del'autreté.
Ilexistedeuxtypesderotations:l'uneneonernequel'otetoulemotsurlequelontravaille,
l'autrefaitintervenirl'indiateurderetenue.
20.3.1 Les rotations sur un otet ou un mot
Langagesymbolique.- Les instrutions derotation duontenu d'un registreou d'unease mé-
moiren'aetentque les huit ou seize bits de lasoure, le bit sortant étant envoyé àlafois à
l'autreextrémitéet dansl'indiateur dedébordementCF:
ROL soure, n
ROR soure, n
respetivementpour
n
rotationsàgauhe(pourl'anglaisROtateLeft)etàdroite(pourl'anglais ROtateRight).Lorsquelenombrede rotationsest1,l'indiateur dedépassementde apaitéOF est signi-
atif: il est misà1si lebit deplusfort poids est hangé('est-à-diresi lesigneest hangé),
sinonilest misà0.
Langagemahine.-1
o
)Larotationàgauheestodéesurdeuxàquatreotets:
| 1101 00vw | mod 000 r/m | | |
ave
v = 0
pour une rotation etv = 1
pour plusieursrotations,n
étant alors le ontenu du registreCL(dontlavaleurneserapasdétruite).-2
o
)Larotationàdroiteest odéesurdeuxàquatreotets:
| 1101 00vw | mod 001 r/m | | |
ave
v = 0
pour une rotation etv = 1
pour plusieursrotations,n
étant alors le ontenu du registreCL(dontlavaleurneserapasdétruite).Exemple.- Vérionsque larotationàdroitede 8Fh,soit 1000 1111b,donne bien 1100 0111b,
soitC7h.Érivonsunprogramme, d'abordenlangagesymbolique:
MOV AX,3000
MOV DS,AX
MOV AL,8F
ROR AL,1
MOV [0400℄,AL
RET
puisenlangagemahine:
B8 00 30
8E D8
B0 8F
D0 C8
A2 00 04
Codonseprogramme:
C:\COM>debug
-E CS:100 B8 00 30
-E CS:103 8E D8
-E CS:105 B0 8F
-E CS:107 D0 C8
-E CS:109 A2 00 04
-E CS:10C C3
-R BX
BX 0000
:
-R CX
CX 0000
:D
-N ROR.COM
-W
Eriture de 0000D otets
-Q
Aprèsexéutionduprogrammeror.om,onvériequel'onabienC7hàl'emplaementmémoire
hoisi:
C:\COM>debug
-D 3000:400
3000:0400 C7 00 03 00 0B 00 00 00-00 00 00 00 00 00 00 00 ...
3000:0410 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ...
3000:0420 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ...
3000:0430 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ...
3000:0440 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ...
3000:0450 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ...
3000:0470 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ...
3000:0470 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ...
20.3.2 Les rotations sur un otet ou un mot et l'indiateur CF
Langagesymbolique.- Dansune rotationsurleontenud'un registreoud'unease mémoireet
l'indiateurCF, lebit expulséd'untéest plaé dansl'indiateur CFet lebit del'indiateur
estplaé danslasouredel'autreté.Ils'agitdond'unerotationsurneufoudix-septbits :
RCL soure, n
RCR soure, n
respetivementpourune rotationàgauhe (pour l'anglais Rotate with Carry Left) et à droite
(pourl'anglaisRotatewithCarry Right).
Lorsquelenombrederotationsest1,l'indiateurdedépassementdeapaitéestsigniatif:
ilestmisà1lorsquelebitdeplusfortpoidshangedevaleur('est-à-diresilesigneesthangé),
sinonilest misàzéro.
Langagemahine.-1
o
)Larotationàgauheestodéesurdeuxàquatreotets:
| 1101 00vw | mod 010 r/m | | |
ave
v = 0
pour une rotation etv = 1
pour plusieursrotations,n
étant alors le ontenu du registreCL(dontlavaleurn'estpasdétruite).-2
o
)Larotationàdroiteest odésurdeuxàquatreotets:
| 1101 00vw | mod 011 r/m | | |
ave
v = 0
pour une rotation etv = 1
pour plusieursrotations,n
étant alors le ontenu du registreCL(dontlavaleurn'estpasdétruite).Exemple.- Sileontenu del'aumulateurALest 0100 0011b,soit43h,et eluidel'indiateur
deretenueCFest0,vérionsquelarotationàdroitedonnebien0010 0001b,soit21h.Érivons
unsous-programme,d'abordenlangagesymbolique:
MOV AX,3000
MOV DS,AX
SUB AL,AL
MOV AL,43
RCR AL,1
MOV [0400℄,AL
RET
puisenlangagemahine:
B8 00 30
8E D8
28 C0
B0 43
D0 D8
A2 00 04
C3
Codonseprogramme:
C:\COM>debug
-E CS:100 B8 00 30
-E CS:103 8E D8
-E CS:107 B0 43
-E CS:109 D0 D8
-E CS:10B A2 00 04
-E CS:10E C3
-R BX
BX 0000
:
-R CX
CX 0000
:F
-N RCR.COM
-W
Eriture de 0000F otets
-Q
Aprèsexéutionduprogrammerr.om,onvériequel'onabien21hàl'emplaementmémoire
hoisi:
C:\COM>debug
-D 3000:400
3000:0400 21 00 03 00 0B 00 00 00-00 00 00 00 00 00 00 00 !...
3000:0410 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ...
3000:0420 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ...
3000:0430 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ...
3000:0440 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ...
3000:0450 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ...
3000:0470 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ...
3000:0470 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ...
20.4 Changer l'indiateur de retenue
Comme le bit 0 duregistredes indiateurs, l'indiateur de retenueCF, est souvent utilisé.
Troisinstrutionsluisontonsarées.
Langagesymbolique.-L'instrution:
STC
(pourl'anglaisSeT Carry)plae1dansl'indiateurCF.L'instrution:
CLC
(pourl'anglaisCLearCarry)plae0dansl'indiateurCF.L'instrution:
CMC
(pourCoMplement Carry)inverselavaleurdel'indiateurCF.
Langagemahine.-1
o
)Lepositionnementdel'indiateurCFestodésurunotetpar1111 1001,
soitF9h.
-2
o
)L'annihilationdel'indiateurCFestodéesur unotetpar1111 1000,
soitF8h.
-3
o
)L'inversiondel'indiateurCFestodéesurunotetpar1111 0101,soit
F5h.
20.5 Historique
Le premier ordinateur (EDSAC, 1949; voir hapitre??) n'utilise qu'une seule instrution
logique:leANDsouslaformedel'instrutionollate. Lesinstrutionsdedéalagesontunpeu
ompliquées:poursimplierlamiseenplae matérielle,lenombredepositionsàdéalern'est
pasdonnéeparlavaleurduhampd'adressedel'instrutionmaisparlapositiondubitleplusà
doite;ainsil'instrutionL 8 Sapouronséquenequeleontenude l'aumulateurestdéalé