Le langage mahine du
miroproessur 8088 : instrutions
omplémentaires
Les entiers relatifs
Nousavonsvu,dans leshapitrespréédents,lesinstrutionsfondamentales d'unmiropro-
esseur,àsavoirellesquipermettentd'émulerunemahinedeTuring.Nousallonsommener
àvoir,dans ehapitre,desnotions
hh
avanéesii
,'est-à-direnonindispensables enthéorie.Nous avonsétudiéauhapitre15les opérationssur lesentiers naturels.Cei est enthéorie
susantpourlaprogrammationpuisque,enthéorie,lesentiers relatifs,parexemple,sontému-
lables par des entiers naturels. Cette émulation onduit ependant à une implémentation des
entiersrelatifsquin'estpaseae.Lesonepteursdesproesseursâblentdondesopérations
surlesentiers relatifs.
Protonsdeehapitresurlesentiersrelatifspourvoirunomplémentsurlesentiersnaturels.
Bienqu'employantlareprésentationbinaire,lespremiersonepteursdesordinateursvoulaient
être très prohes de lareprésentation déimale. Cei aonduit àun odagedit BCD. Celui-i
est toujoursimportantpourles aluletteset les alulsnaniers. Bienqued'une importane
relative,nousl'étudieronsdansehapitre.
17.1 Entiers relatifs
17.1.1 Représentation des entiers relatifs
Nousavonsvuquelapremièreétapepourtravailleraveunensemble(dénombrable)surun
ordinateur estdeoderseséléments.Voyonsommentle fairepourlesentiersrelatifs.Ilexiste
plusieursfaçonsdelefaire,lesunesplusnaturelles,lesautrespluseaes.
17.1.1.1 Bit de signeet valeurabsolue
Lapremièreidéepourreprésenterunentiernégatifestd'utiliserunbitdesigneetlesautres
bitspourlavaleurabsolue.Ilesttraditionnelalorsderéserverlebitdepoidsleplusfortomme
bitdesigneavelaonventionsuivante:
0représentelesigneplus(+);
1représentelesignemoins (-).
Dansesonditions,l'intervalleouvertsurunotetestde:
0000 0000bà0111 1111bpourlesentierspositifs,soitde0à127;
1000 0000bà1111 1111bpourlesentiersnégatifs,soit de-0à-127.
Cetteméthodenaturelledereprésentationprésentetroisinonvénients:
Iln'yapasompatibilitéasendantelorsqu'ondéide,parexemple,depasserd'unerepré-
sentationsurunotetàunereprésentationsurdeuxotets:1000 0001breprésente-1sur
unotet;lorsqu'onluiajouteunotet(nul)àgauhe,onobtient0000 0000 1000 0001b,
soit129;sionluiajouteunotet(nul)àdroite,onobtient1000 0001 0000 0000b,soit
-257.
Zéron'apasunereprésentationuniquemaisdeuxreprésentations:0000 0000b,soit+0,
et1000 0000b,soit-0.
L'algorithmepour eetuer l'addition de deux entiers relatifsdoit distinguerquatre as
suivantlesignedehaundesdeux termes.
17.1.1.2 Complémentà un
Dénition .- Dans la représentation dite du omplément à un,le bit de poids le plusfort est
égalementlebit de signemais lesautresbitsne représententpasla valeur absolue:
Les entierspositifs sontreprésentésommedansla premièreméthode.
Lareprésentationd'unentiernégatifestlavaleurabsoluedeetentierdonthaquebitest
inversé(1estremplaépar0et0par1,soit
x
par1 − x
,d'oùlenomdelareprésentation).Exemple.- L'entier relatif -5 est représenté sur un otet par 1111 1010b, puisque 5 = 0000
0101b.
Remarque.- Il n'y a toujours pas ompatibilité asendante ave ette représentation et zéro a
toujoursdeuxreprésentations.
17.1.1.3 Complémentà deux
Prinipe.-L'algorithmed'addition des entiersrelatifs n'estpasfaile àmettre enplae ave la
représentation par (bit de) signeet valeurabsolue.On peut utiliser lefait que e ne sontpas
tousles entiers relatifsque l'onreprésente mais seulement euxqui tiennent sur
n
bits, aven
plusoumoins grand(
n
=8pourunotet).L'idée d'unereprésentationpermettantdemettre failementenplae l'additionreposealors
surlefaitqu'enarithmétiquemodulaireona:
a − b [mod c] = a + (c − b) [mod c]
Sionneonsidèrequedesentiersde
n
hiresauplusenbaser
,haqueentierestpluspetitquer n+1 etona:
a − b [mod r n+1 ] = a + (r n+1 − b) [mod r n+1 ]
Deefait,
r n+1 − b
s'appelleleomplémentà r deb
.Dansleasdubinaire,onparleradondeomplémentà deux.
Remarque.- La dénomination n'est pasbien hoisiepuisqu'elle ne fait référenequ'à la base
r
maispasaunombremaximaldehires
n
.Ilvaudraitmieuxparlerdeomplémentà r sur nbitsmaislatradition estmaintenantbienétablie.
Calulduomplémentàdeux.-Puisque :
2 n+1 − b = (2 n+1 − 1) − b + 1
etque
2 n+1 − 1
estl'entierden
hiresbinairestouségauxà1,lealulduomplémentàdeuxd'unentier(positif ounégatif)estfaile:
onalulesonomplémentàun(opérationlogiqueNOTbitàbit);
onluiajouteun.
Exemple.-Calulons lareprésentationde-5enomplémentàdeuxsurunotet:
onsidéronssavaleurabsolue :5=0000 0101b;
alulonssonomplémentàun:1111 1010b;
ajoutons-lui 1(etignoronslaretenuenalelorsqu'elleexiste): 1111 1010b + 1=1111
1011b.
Avantages.- Dansesystème zéroaune seulereprésentationet lasoustrationseramèneàune
addition (puisqu'on utilise tout simplement une arithmétique modulaire). Par ontre il n'y a
toujourspasompatibilitéasendante.
Remarques.-1
o
)Quelleestl'interprétationd'unotetlorsqu'ilreprésenteunentier?C'est l'uti-
lisateurqui hoisitunedesdeuxinterprétationssuivantessuivantleas:
S'ilnedoittravaillerqu'avedesentiers naturels,il hoisitdanseasquetouslesmots
de
n
bitsreprésententdesentiersnaturels,variantde0à2 n − 1
.S'ildoittravailleràlafois avedesentiers positifs et desentiersnégatifs,il hoisitdans
e as que tous les mots de
n
bits représentent des entiers relatifs variant de− 2 n − 1 à
2 n − 1 − 1
.Lebitdepoidsleplusfortpeutalorsenoreêtreonsidéréommebitdesigne
arilestégalà1pourlesentiersomprisentre
− 2 n − 1et − 1
etàzéropoureuxompris
entre 0et
2 n − 1 − 1
.- 2
o
) Si onproèdedeux fois suessivesàlaformation duomplémentàdeux, on
retombesur lenombrequ'on avait audépart.L'opérationdeomplémentationàdeuxestdon
17.1.2 Cas du miroproesseur 8086/8088
Le miroproesseur8086/8088possède unjeu d'instrutions spéiques pour travaillerave
lesentiersrelatifsreprésentésenomplémentàdeuxsurhuitouseizebits.
17.1.2.1 Calulde l'opposé
Prinipe.- On a vu que le alul de l'opposé
− b
d'un nombreb
en omplément à deux estfaile puisqu'il sut d'une négation bit à bit suivie d'une inrémentation. Les onepteursdu
miroproesseur8086ontâblé etteopérationdepassageàl'opposé:
NEG
souslenom denégation(NEGationenanglais)làoùonauraitpus'attendreàopposition.
Langagemahine.-Lanégationest odéesurdeuxouquatreotetspar:
| 1111 011 w | mod 011 r/m | | |
Exemple.-Vérions quel'opposé de 5surdeuxotetsestbien:
1111 1111 1111 1011b = FFFBh.
Leprogrammes'éritdelafaçonsuivanteenlangagesymbolique:
MOV AX,3000
MOV DS,AX
MOV AX,5
NEG AX
MOV [400℄,AX
RET
Laquatrièmeinstrutionestodéeenlangagemahinepar:
| 1111 011 1 | 11 011 000 |
soitF7 D8h.Latradutiondeeprogrammeenlangagemahineest don:
B8 00 30
8E D8
B8 05 00
F7 D8
A3 00 04
C3
Codonseprogramme:
C:\COM>debug
-E CS:100 B8 00 30
-E CS:103 8E D8
-E CS:105 B8 05 00
-E CS:108 F7 D8
-E CS:10A A3 00 04
-E CS:10D C3
-R BX
BX 0000
:
CX 0000
:0E
-N NEG.COM
-W
Eriture de 0000E otets
-Q
Aprèsexéutionduprogrammeneg.om,onvériequel'onabienFF FBhàl'emplaement
mémoirehoisi:
C:\COM>debug
-D 3000:400
3000:0400 FB FF 00 00 00 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 ...
-q
17.1.2.2 Additionet soustration
Introdution.- Le omplément à deux a été hoisi pour que l'addition de deux entiers relatifs
puisses'eetueravelesinstrutionsd'additionâbléesaprioripourlesentiersnaturels.Iln'y
adonpasgrandhoseàendire.L'utilisateurhoisitl'interprétationqu'ilveut:entiersnaturels
ouentiers relatifs;ileetuel'addition etilinterprètelerésultatdelafaçonqu'ilahoisie.
Pourlasoustration,onutiliselefaitque:
a − b = a + neg(b)
que
b
soit positifounégatif.Exemple.-Érivonsunprogrammequipermetd'eetuerl'additionde25hetde-12hetvérions
queela donnebien13h.
Leprogrammes'éritdelafaçonsuivanteenlangagesymbolique,enutilisantlaommutativité
del'addition:
MOV AX,3000
MOV DS,AX
MOV AX,12
NEG AX
ADD AX,25
MOV [400℄,AX
RET
Latradutiondeesous-programmeenlangagemahinedonne:
B8 00 30
8E D8
B8 12 00
F7 D8
05 25 00
A3 00 04
C3
Codonseprogramme:
C:\COM>debug
-E CS:100 B8 00 30
-E CS:103 8E D8
-E CS:105 B8 12 00
-E CS:108 F7 D8
-E CS:10A 05 25 00
-E CS:10D A3 00 04
-E CS:110 C3
-R BX
BX 0000
:
-R CX
CX 0000
:011
-N ADDNEG.COM
-W
Eriture de 00011 otets
Après exéutionduprogrammeaddneg.om,onvériequel'onabien 13h àl'emplaement
mémoirehoisi:
C:\COM>debug
-D 3000:400
3000:0400 13 00 00 00 00 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 ...
-q
Inidenesurlesindiateurs.-Nousallonsvoirl'intérêtdel'indiateurOFdansleasd'uneaddi-
tion/soustration sur lesentiers relatifs,alors que elui-i est aeté mais ne joue pas de rle
dansleasdesentiersnaturels.Eneetilfautonserverl'informationsurlesigne,quipeutêtre
perduedans deuxas:
l'indiateurCFestmis à1sansretenueajoutéeau(x)bit(s)designe,
l'indiateurCFestmis à0maisuneretenueaétéajoutéeaubitdesigne.
Considéronsquatreexemples,dansleasd'additions surunotetpoursimplier:
a) 80h+80h [=-128+(-128)=-256℄
1000 0000
+ 1000 0000
---
1 0000 0000
Iil'informationdusigneestperduesansretenueajoutéeauxbitsdesigne.Lemiroproesseur
metlesindiateursCFetOFà1.
b)80h +7Fh[=-128+127=-1℄
1000 0000
+ 0111 1111
---
0 1111 1111
Iitoutsepassebien,iln'yapasdeperted'information.LesindiateursCFetOFsontalors
misà0.
) 7Fh+7Fh[=127+127=254℄
0111 1111
+ 0111 1111
---
0 1111 1110
Ii ilypasperted'information.L'indiateurCFestmisà0maisOFestmisà1.
d)C0h+7Fh[=-64+127=63℄
1100 0000
+ 0111 1111
---
Lerésultatestorretmaisl'indiateurCFestpositionné.L'indiateurOFestalorségalement
positionnépourque
CF ⊕ OF = 0
.17.1.2.3 Multipliation
Contrairementà l'addition et àla soustration, la multipliation et la division ne seom-
portentpasdelamêmefaçonsuivantqu'ononsidèrequelesopérandessontdesentiersnaturels
oudesentiers relatifs,d'oùlanéessitéd'introduire deuxinstrutionsnouvelles.
Langagesymbolique.-Pourlamultipliation,l'instrutionest :
IMUL soure
pourInteger MULtiply, 'est-à-diremultipliation surlesentiers relatifs,oùsouredésigneun
registreouuneasemémoire.
Sémantique.-Cetteinstrutionpermetdemultiplierleontenudel'aumulateur8bitsAL(resp.
16bitsAX)parleontenud'unregistreoud'uneasemémoire8bits(resp.16bits),onsidérés
ommedesentiersrelatifs.Le résultat,qui aunetaille double, estplaé dansAX (resp.AX et
DX,e dernierpourlemotdepoidsfort).
Langagemahine.- Cette multipliation s'eetue grâe à une instrution odée sur deux ou
quatreotetssuivantleas:
| 1111 011w | mod 101 r/m | | |
onernantAXsi
w = 1
et ALsiw = 0
.Exerieorrigé.-Traduire l'instrution:
IMUL BL
en langagemahine.
D'aprèsequenousvenonsdedire,etteinstrutionsetraduitparlesdeuxotetsreprésentés
enbinairepar:
| 1111 0110 | 11 101 011 |
17.1.2.4 Division eulidienne
Langagesymbolique.-L'instrution est:
IDIV soure
(pourIntegerDIVision), oùledividendede16bits(resp.32bits)est plaédansl'aumulateur
AX(resp.AXetDX,edernierontenantlemotdepoidsfort)etlediviseurde8bitsdanssoure,
quiest unregistreouune asemémoire.
Sémantique.- Cette instrution permet d'eetuer la division eulidienne du dividende par le
diviseur,lequotientexatest plaédansAL(ouAX)et lerestedansAH (ouDX).
Contrairementàladénitionmathématique,laonventionestquelesresteestdumêmesigne
queledividende.Ainsidansleasdeladivision
hh
eulidienneii
de± 26
par± 7
,ona:− 26 = ( − 3) × 7 − 5
− 26 = 3 × ( − 7) − 5 26 = 3 × 7 + 5 26 = ( − 3) × ( − 7) + 5
e qui signie que ladivision est d'abord non signée (
26 = 3 × 7 + 5
)puis queles signessontmis:auresteenfontiondeeluidudividende,auquotientenfontiondeeuxdudividendeet
dudiviseur.
Langagemahine.- Cettedivision eulidienne s'eetue grâeà l'instrutionodéesurdeux ou
quatreotetssuivantleas:
| 1111 011w | mod 111 r/m | | |
Si
w = 0
,onadividende=[AX℄,quotient=[AL℄etreste=[AH℄.Si
w = 1
,onadividende=[DX,AX℄,quotient=[AX℄etreste=[DX℄.Exerieorrigé.-Traduirel'instrution :
IDIV BL
en langagemahine.
D'aprèsequenousvenonsdedire,etteinstrutionsetraduitparlesdeuxotetsreprésentés
enbinairepar:
| 1111 0110 | 11 111 011 |
17.2 Le déimal odé binaire
17.2.1 Notion
Un entier naturelpeutêtre représenté de diérentes façons: dans un système de représen-
tation additif, telque lanumérationenhires romains, oudansunsystème de représentation
positionnel,enutilisantleplussouventdeshiresarabes.Lanotiondebaseestimportante:nous
utilisonsleplussouventlabase dixdanslaviedetouslesjoursmaisaussiquelquefoisd'autres
bases,parexemplelabasedouzepourlesheures.L'informatiquenousahabituéàutiliserlabase
deux (nombres binaires), mieux adaptéeau matériel, et la base seize(nombres hexadéimaux),
assoiéeàlabasedeuxmaisenpluslisibleparunêtrehumain.
Pour des raisons d'eaité, tous les aluls sur ordinateurs sont eetués de nos jours en
basedeux, aveunetradution lorsdel'entréeetpourlerésultatnalensortie.
Cettefaçondefairen'apasété adoptéed'embléeauxdébutsdudéveloppementdes ordina-
teurs.Onessayait,oûte queoûte,de resterprohede lanumérationdéimale.Une représen-
tationdesentiersétait,parexemple,enDCBsurlequelnousallonsrevenir.Lemiroproesseur
i8080onserveenoredesinstrutionspouretypedereprésentation,pourdesraisonsdeom-
patibilitéasendanteaveletoutpremiermiroproesseur,lei4004.Rappelonsqueelui-iaété
onçusurommandepourréaliserdesalulatriesdebureau.L'eaitédesalulsn'étaitpas
laraisonpremièrealorsqu'on avaitàaherpratiquementlerésultatdehaquepasde alul,
d'oùl'intérêt d'unereprésentationprohedudéimal.
Dénition1.-Endéimalodébinaire(DCBenabrégéouBCDpourl'anglaisBinaryCoded
Deimal), tout hire déimal est représenté sur un quartet, 'est-à-dire quatre bits binaires
(nibbleen anglais):
Déimal DCB
0 0000
1 0001
2 0010
3 0011
4 0100
5 0101
6 0110
7 0111
8 1000
9 1001
quiest toutsimplementla représentation binaireduhireorrespondant.Lesquartetsrestants,
de 1010bà1111b, n'ontpasde signiation partiulièreen DCB.
Lapluspetiteunitédemémoireadressableparlemiroproesseuri8080estl'otetet nonle
quartet,d'oùl'intérêtduDCB ompaté.
Dénition2.-Onparle deDCBompatélorsqu'onreprésentedeuxhiresDCB surunotet
et de DCB étendu (ounormal) lorsqu'on n'en représente qu'un seul (sur le quartet de poids
17.2.2 Addition en DCB
Prinipe.-Pourtravaillerplusfailementsurlareprésentationdéimale,onreprésentelesnombres
en DCB ompaté. On exéutel'addition de façonhabituelle mais on doit orriger le résultat
obtenu. Onutilisepourelal'instrution:
DAA
(pourl'anglaisDeimalAdjust afterAddition)quidoitêtreeetuéeimmédiatementaprèsl'ins-
trutiond'addition.Cetteinstrution,entièrementhéritéedu8080,n'agitquesurl'aumulateur
d'unotet,'est-à-diresurAL.
Langagemahine.-L'instrutionDAAestodéesurunotetpar0010 0111b,soit27h.
Exemple1.-Érivonsunprogrammemahine qui additionne12 à63et plaelerésultatàl'em-
plaement mémoire1000:400.
Leprogrammes'éritdelafaçonsuivanteenlangagesymbolique:
MOV AX,3000
MOV DS,AX
MOV AL,12
ADD AL,63
DAA
MOV [400℄,AL
RET
On s'aperçoitque l'initialisationdes nombres en DCBest failepour l'utilisateur: il sut
d'entrerlesentiers ommesionpouvaittravaillerdiretementavedudéimal.Ils'agitenfait
d'hexadéimalsanspermettreleshires`A'à`F'.Demême,laleturedel'ahage(bienqu'en
hexadéimal)esttrèslisible pourl'utilisateur.
Latradutiondeesous-programmeenlangagemahinedonne:
B8 00 30
8E D8
B0 12
04 63
27
A2 00 04
C3
Codonseprogramme:
C:\COM>debug
-E CS:100 B8 00 30
-E CS:103 8E D8
-E CS:105 B0 12
-E CS:107 04 63
-E CS:109 27
-E CS:10A A2 00 04
-E CS:10D C3
-R BX
:
-R CX
CX 0000
:0E
-N DAA.COM
-W
Eriture de 0000E otets
-Q
Après exéution du programme daa.om, on vérie que l'on a bien 75h à l'emplaement
mémoirehoisi:
C:\COM>debug
-D 3000:400
3000:0400 75 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 u...
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
Exemple2.-L'instrution tientégalementompte desretenues,omme lemontrel'addition de
59etde12.
17.2.3 Soustration en DCB
Prinipe.-Commepourl'addition,enDCBompaté,onexéutelasoustrationdefaçonhabi-
tuellemaisondoitorrigerlerésultatobtenu,grâeàl'instrution:
DAS
(pour l'anglais Deimal Adjust after Substration) qui doitêtre eetuéeimmédiatement après
l'instrutiondesoustration.Cetteinstrutionn'agit quesurl'aumulateurd'unotet,'est-à-
diresurAL.
Langagemahine.-L'instrutionDASest odéesurunotetpar0010 1111b,soit 2Fh.
17.2.4 Cas de la multipliation et de la division
Comme nous l'avonsdéjà dit, la multipliationet ladivision ne sont pas implémentées sur
touslesmiroproesseurs,ar ellesexigentunâblageomplexe. Enpartiulier,ellesnelesont
passurletout premiermiroproesseur,lei4004.Onnetrouvedonriensurelles-ienBCD
ompatésurlei8080.
17.3 Historique
17.3.1 Blaise Pasal et le omplément à neuf
RappelonsqueBlaisePasalaonçul'unedestoutespremièresalulatriesméaniques.Il
nepouvaiteetuer quedesadditionssurdesentiers naturelsde 5,6ouhuithiresdéimaux
(selonlaversion).Mathématiienexpérimenté,ilpensadonàutiliserleomplémentàneufpour