Le langage mahine du
miroproesseur 8088 : instrutions
fondamentales
Les instrutions de transferts
Nousavonsvuquelquesinstrutionsdetransfertdanslehapitrepréédentdefaçonàpouvoir
donnerunpremierprogrammeonret.Cependanttouteslespossibilitésdetransfertn'ontpas
étéexplorées.Nousallonspoursuivrel'explorationdestransfertspossiblesdansehapitre,sans
en voir toutes les possibilités (en partiulier sur l'adressage indexé, que nous aborderons au
hapitre23).Commençons,avantela,parleprinipedustokagedesmots.
13.1 Prinipe du stokage des mots hez Intel
Un mot(deseizebits)estonstituédedeuxotets:unappelé otetde poids fort(MSB
pour l'anglais Most Signiant Byte) et l'autre otet de poids faible (LSB pour l'anglais
LeastSigniantByte).Ladénominationprovientdeeque,lorsqueemotreprésenteunentier
naturel,onveutque:
val ( w ) = 256 × val ( M SB ) + val ( LSB ) .
Commentoder
w
:parMSBLSBouparLSB MSB?Ils'agitd'unevieilledisussionentre informatiiens,labatailledespetitsboutiens(littleendianenanglais)ontrelesgrandsboutiens(greatendian enanglais),parréféreneauxVoyages deGulliver deDanielDefoedanslesquels
ondisuteommentasserun÷ufpourlegober: parlegrandboutoulepetitbout.
Cela dépend desonepteurs demiroproesseur. Intela hoisi l'ordreLSB MSB,qui n'est
pasnéessairementl'ordreauquelonpourraits'attendre.
Ilyadondeuxfaçonsdestokerunmotdedeuxotets,disonsAB,àl'adresse
n
: LatehniquepetitboutienneplaeBàl'adressen
etAàl'adressen + 1
.LatehniquegrandboutienneplaeAàl'adresse
n
et Bàl'adressen + 1
.Tous les miroproesseurs Intel et plusieurs mini-ordinateurs, tels que les VAX de Digital,
utilisentlatehniquepetitboutienne.LesmiroproesseursMotorola(utilisésdanslespremiers
Maintosh)et lesgrandssystèmes utilisentlatehniquegrandboutienne.
Remarque.-Cettediérenedansleodagedesmotsposeunproblèmepourtraduireunlogiiel
d'unsystèmeàl'autre.
13.2 Autres instrutions de transfert
13.2.1 Classiation des instrutions de transfert
La modélisation desordinateurs quenous avonsdonnéei-dessusnous onduitàdistinguer
quatretypesd'instrutionsdetransfert :
l'initialisationd'unregistrequipermetdedonnerdiretementunevaleuràunregistre;
lestransfertsentreregistresquipermettentdetransférerunevaleurd'unregistredans
unautre;
lesaès à la mémoirevivequi omprennent,d'unepart,l'initialisationd'unélément
demémoireviveet,d'autrepart,le transfert d'unevaleurd'un registreversunélément
demémoirevive,ouvie-versa;
lesentrées-sortiesqui permettentde transférer une valeurd'un registreversun péri-
phérique,ouvie-versa.
Nous avonsdéjà vu l'initialisation d'un registregénéral, le transfert entre registreset l'ini-
tialisation d'un élément de mémoire vive. Nous étudierons les entrées-sorties dans le hapitre
suivant.Voyonsdansehapitrelesautrestypesdetransfert.
13.2.2 Stokage du ontenu de l'aumulateur dans un élémentde mé-
moire vive
Langagesymbolique.- L'instrution destokageduontenude l'aumulateurdans unélément
demémoirevives'érit:
MOV [dealage℄, A
oùA désignel'undes registresAL ouAXet dealagele déalagedel'adresse, qui est unentier
deseizebits.Lesegmentpardéfaut estlesegmentdedonnées.
Sémantique.-Lasigniationdeetteinstrutionestlaopieduontenudel'aumulateurdans
l'élémentdemémoirevived'adressespéiée.
Langagemahine.-Cetransfertseodesurtroisotets:
| opode | faible | fort |
oùfaibleestl'otetdepoidsfaibledudéalagedel'adresse,fortl'otetéventueldepoidsfort
etopodeest :
1010 001w
ave,évidemment,wégalà0pourALet à1pourAX,soitA2houA3h.
Exerieorrigé.-Traduire l'instrution:
MOV [A900h℄, AX
en langagemahine.
Nous prendrons à partir de maintenant la onvention debug pour le langage symbolique,
qui onsisteàérire touslesentiers en hexadéimal. D'aprèse quenous venonsde dire,ette
instrutionsetraduitparlestroisotets:
| 1010 0011 | 0000 000 | 1010 1001 |
enbinaire,soitA300A9h.
Voabulaire.-Ilesttraditionneldeparlerd'adressagediret,d'adressageabsoluoud'adres-
sageétendudansleasdeopieentreaumulateuret mémoire.
13.2.3 Chargement d'unélémentdemémoirevivedans l'aumulateur
Langagesymbolique.- L'instrution de hargement d'un élément de mémoirevive dans l'au-
mulateurs'érit:
MOV A, [dealage℄
oùA désignel'undes registresALou AXet dealagele déalagede l'adresse,qui est unentier
deseizebits.Lesegmentpardéfautestlesegmentdedonnées.
Sémantique.-Lasigniationdeetteinstrutionestlaopieduontenudel'élémentdemémoire
vived'adressespéiéeversl'aumulateur.
Langagemahine.-Cetransfert seodesurtrois otets:
| opode | faible | fort |
oùfaibleestl'otetdepoidsfaibledudéalagedel'adresse,fortl'otetéventueldepoidsfort
et opodeest:
1010 000w
ave,évidemment,wégalà0pourALet à1pourAX,soitA0houA1h.
Exerieorrigé.-Traduirel'instrution :
MOV AX, [A900℄
en langagemahine.
D'aprèsequenousvenonsdedire,ette instrutionseodeparlestrois otets:
| 1010 0001 | 0000 000 | 1010 1001 |
enbinaire,soitA100A9h.
13.2.4 Transfert entre registres ou registre et ase mémoire
Langagesymbolique.- L'instrution detransfert entre registresouregistreet asemémoires'é-
rit:
MOV destination, soure
equi nenousapprend pasgrandhose.
Langagemahine.-Cetteinstrutionseodepardeuxotetsdansleasderegistresetpardeux
ouquatreotetsdansleasd'uneasemémoire:
| 1000 10dw | mod reg r/m | | |
Danslepremierotet d'opode,lebit d(pour Destination)est égalà1si ladestination
est un registre général : elui-i est alors spéié par le hamp reg du deuxième otet
d'opode.Lebitwestégalà0pourletransfertd'unotetetà1pourletransfertdedeux
otets(un mot).
Le deuxième otet du ode opération, que nous retrouverons souvent, spéie le mode
d'adressageetleoulesregistresonernés:
Lestroisbitsduhampregspéientleregistredansleasd'untransfertentreregistre
etasemémoireet leregistrededestinationdansleasd'untransfertentreregistres.
Lasigniationdeehampestdéterminéeparletableau,déjàrenontré,delagure
12.1.
lesdeuxbitsduhampmodet lestrois bitsduhampr/mspéientlemoded'adres-
sage:
Simod = 11,ils'agitd'untransfertentreregistresgénéraux:lehampr/mspéie
leseondregistresuivantletableaudelagure12.1.
Si mod = 00, on a un transfert entre registre et ase mémoire (rappelons que le
sensest déterminé par le bit d du premier otet), l'adresse eetive AE de la
asemémoire étantspéiée par r/msuivant le tableau de lagure 13.1. Seul le
asr/m = 110nousintéresserapourl'instant.Danseas,ledéplaement(sur16
bits)doitêtrespéiépardeuxotetssupplémentaires.Nousétudieronslesautres
asplus tard;ontentons-nousdedire que, parexemple,[BX℄signie leontenu
duregistreBX.
r/m AE
000 [BX℄ + [SI℄
001 [BX℄ + [DI℄
010 [BP℄ + [SI℄
011 [BP℄ + [DI℄
100 [SI℄
101 [DI℄
110 déplaement
111 [BX℄
Figure13.1Modesd'adressagedu8088lorsquemod = 00
Les modes mod = 01 et mod = 10 ne nous intéresseront pas pour l'instant : le
déalageestlasommedeontenusderegistresetd'undéplaementspéiésurun
oudeuxotets.
Exerieorrigé1.-Traduirel'instrution:
MOV BX, AX
en langagemahine.
D'aprèsequenousvenonsdedire, etteinstrutionseodeparlesdeuxotetsreprésentés
enbinairepar:
| 1000 1011 | 11 011 000 |
soit8BD8h.
Voabulaire.-Ilesttraditionnel deparlerd'adressageimpliiteoud'adressage de registre
dansleasdeopieentreregistres.Lenomd'adressageimpliiteprovientdeequelesopérandes
(lesdeuxregistresonernés)nesontpasindiquésparunotetdistint:'estleoded'opération
quiontient(quiimplique)lesnomsdesregistresonernés.
Exerieorrigé2.-Traduirel'instrution:
MOV BX, [10h℄
en langagemahine.
D'aprèsequenousvenonsdedire,etteinstrutionseodeparlesquatreotetsreprésentés
enbinaire:
| 1000 1011 | 00 011 110 | 0001 000 | 0000 0000 |
soit8B1D1000h.
13.2.5 Choix du segment
Nousvenonsdevoirommenttransférerleontenudel'aumulateurenmémoire.Onspéie
ledéalage et,pardéfaut,le segmentest lesegmentDS desdonnées.Ils'agiteetivementdu
segmentleplusapproprié.Sien'estpasequel'ondésire,ilfautl'indiquerexpliitement.
Langagesymbolique.-L'instrutiongénéraledetransfertdel'aumulateuràunélémentdemé-
moirevives'érit:
MOV SEG:[dealage℄, A
où SEG est l'un des registres de segment CS ou SS, A désigne l'un des registres AL ou AX et
dealageledéalagedel'adresse,qui estunentierdeseizebits.
Langagemahine.- Dans e as, il faut faire prééder l'instrution par un otet spéiant le
segmentdésiré,appelépréxe de hangementde segment(override prex enanglais):
001 sreg 110
oùlesdeuxbitsduhampsregdésignentleregistredesegmentonformémentautableau,déjà
renontré,delagure12.2.
Exerieorrigé.-Traduire l'instrution:
MOV CS:[A900h℄, AX
en langagemahine.
Ilsut d'ajouterlepréxe001 01 110àl'instrutionquenousvenonsdevoir,equidonne
2EA300A9h.
13.3 Historique
Stephen Morse regrettedans [Edw-08℄ que,lors de laoneption dujeu d'instrutionsdu
8086,iln'aitpaspuhangerlefaitdeplaerl'otetdepoidsfaibleavantl'otetdepoidsfort,par
ompatibilitéavele8080.Ilexpliquel'originedelatehniquepetitboutiennedumiroproesseur
8008etdesesdesendants:undesbutsdu8008estdemimerleomportementd'unproesseur
onçu parDatapointdontlesbits arriventensérie, etnon enparallèle.Dansuntelproesseur,
ondoitvoirlesbitsdepoidsfaibleavantlesbitsdepoidsfortdefaçonàtraitereaementles
problèmesderetenue.
13.4 Bibliographie
[Edw-08℄ BenjEdwards,StephenMorse:Father ofthe8086Proessor,PCWorld,Jun17,
20087:00am.Disponibleenligne:
http://www.pworld.om/artile/146917/stephen_morse_father_of_the_
8086_proessor.html