Codage en langage mahine
Commentfaireréagirunmiroproesseurtelquele8088?Commentprogrammerenlangage
mahinesurunsystèmetelquelePC?Voiilesquestionsauxquellesnousallonsrépondredans
ehapitre.
12.1 Premières instrutions du 8088
Commençons par étudier quelques instrutions du 8088 de façon à programmer de façon
onrèteunpremierprogramme.
12.1.1 Premières instrutions de transfert du 8088
Nousavonsvu lanotionderegistre.Voyonsommentinitialiserunregistre,ommenttrans-
férerd'unregistreàunautreetommentinitialiserunélémentdemémoirevive.
12.1.1.1 Syntaxe générale d'un transfert en langage symbolique
Syntaxe.-Touteinstrutiondetransfert serareprésentéeenlangage symbolique(quipermet
unemeilleureompréhensionànous,pauvreshumains) delafaçonsuivante :
MOV destination, soure
oùMOV est unmnémoniquepourMOVe(transférer enanglais), destinationou soureest le
nomd'unregistreet l'autre(soureoudestinationsuivantleas)dépendduontexte.
Remarque.-Attentionàl'ordre,d'abordladestination,ensuitelasoure,equin'estpasnées-
sairementl'ordreauquelonpeuts'attendre.Unefaçonmnémothehniquedes'ensouvenirestde
penseràl'analogueenlangagedehautniveau:
destination := soure;
Quetransférer?.- Le8088 est unmiroproesseur16bits, 'est-à-direqueles transfertssefont
defaçonnaturellesurseizebits,soitdeuxotets.Enfait,puisquel'otetestlapluspetiteunité
12.1.1.2 Initialisationd'un registre général
Langagesymbolique.-L'instrutiond'initialisationd'unregistres'érit:
MOV reg, onstante
oùregdésigneleregistreet onstanteest uneonstante,huitouseizebits suivantlaapaité
duregistre.
Sémantique.- La signiation de ette instrution est l'initialisation du registre reg par ette
onstante.
Langagemahine.-L'instrutionenlangagesymboliquen'estlàquepournousaideràs'ensou-
venir. Il faut maitenant faire le lien ave le miroproesseur. Une telle instrution en langage
mahineexigedeuxotetsoutroisotets,suivantquelaonstanteoupeunoudeuxotets:
opode onstante [ onstante ℄
lepremierotetest appelé ode opération,abrégéenopode.
Opodesdesinitialisations.- Onpourraithoisirles odes opérationau hasard.Pour une meil-
leureergonomie(le 8088omprend plusieursentaines d'instrutions),ei n'estpas leas. Le
oded'opérationd'uneinstrutiond'initialisationest,enbinaire,surhuit bits:
1011 wreg
où:
w(pourl'anglaisword,soitmot,lenompourunedonnéededeuxotets)estunbitvalant
1silatransferts'eetuesurdeux otets(soitunmot)et 0s'il s'eetuesurunotet.
regest une suitede trois bitspermettantde déterminerle registrede lafaçon spéiée
parlagure12.1.
16 bits (
w = 1
) 8 bits (w = 0
)000 AX 000 AL
001 CX 001 CL
010 DX 010 DL
011 BX 011 BL
100 SP 100 AH
101 BP 101 CH
110 SI 110 DH
111 DI 111 BH
Figure 12.1Désignationdesregistresgénérauxdu8088
Remarquez que lesregistres desegmentn'apparaissent pasdans e tableau. Ils ne peuvent
Exerieorrigé.-Traduirel'instrution :
MOV AL, 10
en langagemahine,la onstanteétant exprimée endéimalen langagesymbolique.
D'aprèsequenousvenonsdedire,etteinstrutionsetraduitparlesdeuxotets(représentés
enbinaire):
1011 0000 0000 1010
soitB00Ahenhexadéimal.
Remarque.-Engénéralonutiliseral'hexadéimalenlangagesymbolique,'est-à-direqu'onaurait
érit:
MOV AL, 0Ah
dèsledépart.
Voabulaire.- Il est traditionnel de parler d'adressage immédiat au lieu d'initialisation des
12.1.1.3 Chargement d'un registre de segmentdepuis un registre général ou une
asemémoire
Langagesymbolique.-L'instrutiondetransfert s'érittoujours:
MOV destination, soure
equi nenousapprend pasgrandhose.
Langagemahine.-Onadeuxotetsdansleasderegistresetdeuxouquatreotetsdansleas
d'uneasemémoire:
| 1000 1110 | mod 0 reg r/m | | |
Lesdeuxbitsderegspéientleregistredesegmentsuivantletableaudelagure12.2.
Dansleasquinousintéresse,onnepeutpasavoir
reg = 01
,'est-à-direquel'onnepeut pashargerleregistredesegmentdeode.reg Segment
00 ES
01 CS
10 SS
11 DS
Figure12.2Désignationdesregistresdesegmentdu8088
lesdeuxbitsdemodetlestroisbitsder/mspéientlemoded'adressage.Nousreviendrons
plus tard sur la signiation générale.Contentons-nous ii du as où mod = 11, e qui
signiequelasoureestunregistregénéral,r/mspéiantalorsleregistregénéralsuivant
letableaudelagure12.1.
Exerieorrigé.-Traduire l'instrution:
MOV DS, AX
en langagemahine.
D'aprèsequenousvenonsdedire,etteinstrutionsetraduitparlesdeuxotetsreprésentés
enbinairepar:
| 1000 1110 | 11 0 11 000 |
12.1.1.4 Chargementd'une donnée dans unease mémoireou un registre
Introdution.-Voyonsommentinitialiserunélémentdemémoire,disonseluidontl'adresseest
11Eh,avelavaleur25h,parexemple.
Onpeutpenseràuneinstrutiondutype:
mov [11E℄,25
où, paronvention, une onstante s'érit telle quelle(en hexadéimal) et une adressemémoire
entrerohets.
Cependantlemiroproesseurn'aepterapasetteinstrutionetréagiraparuneerreur.
Pourquoi?
L'instrutionn'estpassusammentpréise:s'agit-ildel'initialisationdel'otetd'adresse11Eh
oudumotd'adresse11Eh.Lerésultatn'estpaslemême.
Ilfautdonunmoyendepréiseretteinstrution.
Syntaxeenlangagesymbolique.-Onalesinstrutions:
mov word ptr [mem℄,val
mov byte ptr [mem℄,val
pourinitialiserl'emplaementmémoired'adresse memavelavaleurval.Danslepremier asil
s'agitd'unemplaementd'unmot,dansleseondd'unemplaementd'unotet.
Exemples.-Onérit:
mov word ptr [11E℄,25
mov byte ptr [122℄,30
Langagemahine.-L'instrutionenlangagemahineomportetrois àsixotets:
| 1100 011w | mod 000 r/m | adresse bas | adresse haut | donnée | donnée haut |
où:
ommei-dessus, w est un bit valant1 si letransfert s'eetue sur deux otets(soit un
mot)et 0s'ils'eetue surunotet;
ommenousl'avonsdéjàdit,lesdeuxbitsdemodetlestroisbitsder/mspéientlemode
d'adressage.Nousreviendronsplustardsurlasigniationgénérale.Contentons-nousii
duas oùmod = 00 et r/m = 110,indiquantqu'il s'agitd'un emplaement demémoire
vivespéiéparsondéalageonstituantlesdeuxotetssuivants(d'abordl'otetdepoids
fortpuiseluidepoidsfaible).
Ladonnéeest spéiéeparledernierotet(si
w = 0
)oulesdeuxderniersotets(lorsquew = 1
),d'abordl'otetdepoidsfaiblepuiseluidepoidsfort.Exerieorrigé.-Traduirel'instrution :
move byte ptr [0400℄, 05
en langagemahine, la onstanteétant exprimé endéimal.
D'aprèsequenousvenonsdedire,etteinstrutionsetraduitparlesinqotets(représentés
enbinaire):
| 1100 0110 | 00 000 110 | 0000 0000 | 0000 0100 | 0000 0101 |
12.1.2 Instrution de retour
Notion.-Lorsqu'onfaitappel,enlangagemahine,àunsous-programme,l'adresseduprogramme
àlaquelleonsetrouve('est-à-direlesontenusdesregistresCSetIP,mêmesiedernierregistre
n'estpasvisible)est sauvegardéedefaçonàpouvoirreveniràette instrutionune foislesous-
programme exéuté. Le sous-programmedoit lui-même indiquer qu'ila terminé son travail de
façonàretourneràetteadresse.L'instrutionSTOPneonviendraitpas:elleindiqueraitquele
programmeensonentierest terminé.
Langagesymbolique.-Cetteinstrutions'érittoutsimplement:
RET
pourl'anglaisRETurn.
Langagemahine.-Cetteinstrutionestodéeparunotet1100 0011,soitC3h.
12.2 Programmer en langage mahine ave debug
Nousallonsvoirommententrerdiretementunprogrammeenodemahine(leseulquiest
ompréhensibleparlemiroproesseur)enutilisantdebug.
12.2.1 Le programme
Leproblème.-Lorsqu'onutiliseunsystèmed'exploitation,lamémoireviven'estpasentièrement
disponible pour l'utilisateur. Une partie de la mémoire vive est oupée par des variables du
système d'exploitation, une autre par la mémoiregraphique,... C'est le système d'exploitation
quidéidedel'organisation de la mémoire(memory map enanglais).
N'entrons pas dansles détails de l'organisationde lamémoiresous MS-DOS. Cherhons, à
l'aide de debug,une zone de mémoire vive non oupée et plaçons,grâe à unprogramme en
langagemahine,unevaleurdansette zone.
Ons'aperçoitquelazone ommençantà1000:400neontientquedes`KS':
C:>debug
-D 1000:400
1000:0400 4B 53 4B 53 4B 53 4B 53-4B 53 4B 53 4B 53 4B 53 KSKSKSKSKSKSKSKS
1000:0410 4B 53 4B 53 4B 53 4B 53-4B 53 4B 53 4B 53 4B 53 KSKSKSKSKSKSKSKS
1000:0420 4B 53 4B 53 4B 53 4B 53-4B 53 4B 53 4B 53 4B 53 KSKSKSKSKSKSKSKS
1000:0430 4B 53 4B 53 4B 53 4B 53-4B 53 4B 53 4B 53 4B 53 KSKSKSKSKSKSKSKS
1000:0440 4B 53 4B 53 4B 53 4B 53-4B 53 4B 53 4B 53 4B 53 KSKSKSKSKSKSKSKS
1000:0450 4B 53 4B 53 4B 53 4B 53-4B 53 4B 53 4B 53 4B 53 KSKSKSKSKSKSKSKS
1000:0460 4B 53 4B 53 4B 53 4B 53-4B 53 4B 53 4B 53 4B 53 KSKSKSKSKSKSKSKS
1000:0470 4B 53 4B 53 4B 53 4B 53-4B 53 4B 53 4B 53 4B 53 KSKSKSKSKSKSKSKS
-q
Érivonsunprogrammeenlangagemahinequi plae5àl'emplaement mémoire1000 :400.
Leprogrammeenlangagesymbolique.- Ondoit initialiserleregistrede segmentDS à1000het
plaer 5au déalage400h, sansoublier de revenirdu
hh
sous-programme
ii
.Puisqu'on ne peut
pas initialiser diretement le registreDS, on initialise le registre AX, puis on tranfère la valeur
dansDS,equidonne:
mov ax,1000
mov ds,ax
mov byte ptr [0400℄,05
ret
Tradutionduprogrammeenlangagemahine.-Lapremièreinstrutionestuneinitialisationde
registre:
1011 1 000 0000 0000 0001 0000
soitB80010h.
Les autres instrutionsontété traitées en exerie orrigé.Latradution de e programme
enodemahineestdon:
B80010
8ED8
C606000405
C3
Noussommespasséàlalignepourplusdelisibilitémais,bienentendu,leprogrammeestunesuite
12.2.2 Un aparté : examen du ontenu des registres
12.2.2.1 Examende touslesregistres
Introdution.- Commenous l'avons dit, debugpermet d'examiner et de hanger le ontenu de
lamémoire, d'entrer un programme(en langage d'assemblage) et de faireexéuterun telpro-
gramme. Par mémoire, il faut entendre mémoire vive et mémoire de masse. Si on utilise un
miroproesseur,leontenudesregistreshangesansesse;onnepeutdonpasobtenird'infor-
mation(mêmeinstantanée)surleontenudeeux-i.
L'utilitairedebugpermet ependantd'émulerlamanipulationdesregistres.
Syntaxe.- Pour visualiserle ontenu de tousles registres (del'émulateur) ave debug,il sut
d'utiliserlaommande`R'(pourRegister).
Exemple.-Ona:
C:> DEBUG <retour>
-R <retour>
AX=0000 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
CS=2377 DS=2377 ES=2377 SS=2377 IP=0100 NV UP DI PL NZ NA PO NC
2377:0100 D6 DB D6
Commentaires.-
1 o) L'utilitaire debugrépond àlaommande `R' partrois lignes: lapremière ligneindiqueleontenudesregistresgénéraux,desregistresdepointeuretdesregistresd'index;
laseondeligneindiqueleontenudesregistresdesegment,lavaleurdupointeurd'instrution
etlavaleurdehuit desindiateurs;latroisièmelignemontrel'instrutionpointéeparCS:IP.
2 o)Lavaleurd'unregistre(saufpourleregistredesindiateurs)estindiquéeen
hexadéimal, ave quatre hiresde façonsystématique (même si lavaleur ommene pardes
zéros).
3 o)Bienentendu,ommenousl'avonsdéjàdit,ilnes'agitpasdesvraiesvaleurs
desregistresmaisdeeuxdel'émulateurenequionernelapremièrreligne.Àhaqueappelde
debug,lesregistresdelapremièrelignesontremisàzéroettouslesindiateurssontpositionnés
à zéro. Les ontenus des registres de segment varient d'une session à l'autre mais on pourra
remarquer qu'ilsont tousla même valeur. Lesinstrutions exéutées par debughangerontla
valeurdesregistresommeleferaitlemiroproesseur.
4 o)Nousanalyseronsplustardlasigniationdelatroisièmeligne.
Codedesindiateurs.-Leodepourlesindiateursestlesuivant:
Indiateur Codelorsque positionné Codelorsquenonpositionné
(= 1) (= 0)
OF OV (OVerflow) NV (No oVerflow)
DF DN (DowN) UP (UP)
IF EI (Enable Interrupt) DI (Disable Interrupt)
SF NG (NeGative) PL (PLus)
ZF ZR (ZeRo) NZ (Not Zero)
AF AC (Auxiliary Carry) NA (No Auxiliary arry)
PF PE (Parity Even) PO (Parity Odd)
12.2.2.2 Changement duontenud'un registre
Syntaxe.-Pourhangerleontenud'unregistredel'émulateur(n'importequelregistreà16bits
sauf le registredes indiateurs) en utilisant debug,il sut de l'appeler ave laommande `R'
suividesonnom.Savaleurestalorsindiquée(ommenousl'avonsvui-dessus)etleprompteur
est`:'. Ilsutd'indiquerlavaleursouhaitée(enhexadéimal, suivied'unretour).
Exemple.-SionveutqueleregistreaxontienneFF01h,oneetuelesmanipulationssuivantes:
C:> DEBUG
-R AX
AX 0000
:FF01
-R AX
AX FF01
:
ladernièreommandededebugpermet devérierqu'onabien hangélavaleurduregistre.
Remarques.-
1 o)Ilestfortementreommandédenepashanger(pourl'instant)leontenudes registresdesegment.En eet esvaleursont étédonnéesparlesystème d'exploitation làoùil
y a de la plae disponible; les hanger pourrait avoirpour onséquene de modier une zone
utiliséeparailleurs.
2 o)Mêmesionmetmoinsdequatrehires(hexadéimaux),debugahetoujours
avequatrehires:
C:> DEBUG
-R CX
CX 0000
:2
-R CX
AX 0002
:
3 o)L'utilitairedebugindiqueuneerreursionessaiedeplaerunontenuàplusde
inqhires:
C:> DEBUG
-R CX
CX 0000
:12345
Erreur
ousionessaied'aéderàunregistreàhuitbits:
C:> DEBUG
-R AH
Erreur
4 o)Nousverronsplustardommenthangerleontenuduregistredesindiateurs.
5
o
)Rappelonsqu'ils'agitd'uneémulation.Leregistreneontientpasréellemntla
12.2.3 Codage en langage mahine ave debug
12.2.3.1 Introdution du programmeen mémoirevive
On va entrer le programme en langage mahine à un ertain emplaement de la mémoire
vive.Lesegmentde etemplaementestdéterminé parleregistreCS.Onvalaisser lesystème
d'exploitationetdebughoisirlavaleurdeCSànotreplae:lorsqu'onlanedebug,desvaleurs
deCS,DSet SS,touteségales,sonthoisiesparlesystèmed'exploitation.
Pourle système d'exploitationMS-DOS, on entre le programmeàpartirdu déalage100h,
les256premiersotetsétantoupésparunpréxe.
Créonsunrépertoire,disonsCOM,pouryplaerlesdiversprogrammes:
C:\>mkdir COM
C:\>d COM
C:\COM\>
Entrons donleprogrammeommenousl'avonsvui-dessus:
C:\COM\>debug
-E CS:100 B8 00 10
-E CS:103 8E D8
-E CS:105 C6 06 00 04 05
-E CS:10A C3
-
Nousavonshoisid'entrerlenombred'otetsorrespondantàuneinstrutionàhaquefoismais
nous pouvons en entrer le nombre que nous voulons. Si on setrompe (et ela risqued'arriver
souvent),ilsutdereommenerpourlaligneenquestion,ilsutmêmedelefairepourleseul
12.2.3.2 Sauvegarde du programme sur disque
Poursauvegarderunprogramme ave debug,il faut nommerunhierqui le ontiendraet
érireleprogrammedans ehier.
Nommerunhier.- On donne un nom au hier de sauvegarde. On se sert pour ela de la
ommandeN(pourName)dontlasyntaxeest:
-N <nom du fihier>
oùlenomduhiervérielesspéiationsdeMS-DOS.Cehierseraplaédanslerépertoire
depuislequelonalané debug.
Ériture.-Poursauvegarderunprogramme,il sut d'indiquer lenom duhier(à l'aidede la
ommande N), d'indiquer le nombre d'otets à sauvegarderà l'aide de BX:CX puis d'érire e
programmesurledisqueavelaommandeW(pourWrite).
Dansleasi-dessusonaura:
C:\COM\>debug
-E CS:100 B8 00 10
-E CS:103 8E D8
-E CS:105 C6 06 00 04 05
-E CS:10A C3
-R BX
BX 0000
:
-R CX
CX 0000
:0B
-N EX1.COM
-W
Eriture de 0000B otets
-Q
Remarque.- On remarquera l'extension lassique d'un hier nommé ave la ommande N, à
12.2.3.3 Exéutiondu programme
Prinipe.- Puisque ex1.omest unhierexéutable, il sut de l'appeler sur laligne deom-
mandepourl'exéuter:
C:\COM\> ex1.om
C:\COM\>
Évidemment,elanedonnepasgrandhose.Iln'y apasd'erreur,'estdéjàça.
Vériationdelabonneexéution.- Pour vérierque leprogramme abien exéutée que l'on
voulait,utilisonsànouveaudebugpourexplorerlamémoirevive:
C:\COM\>debug
-D 1000:400
1000:0400 05 53 4B 53 4B 53 4B 53-4B 53 4B 53 4B 53 4B 53 .SKSKSKSKSKSKSKS
1000:0410 4B 53 4B 53 4B 53 4B 53-4B 53 4B 53 4B 53 4B 53 KSKSKSKSKSKSKSKS
1000:0420 4B 53 4B 53 4B 53 4B 53-4B 53 4B 53 4B 53 4B 53 KSKSKSKSKSKSKSKS
1000:0430 4B 53 4B 53 4B 53 4B 53-4B 53 4B 53 4B 53 4B 53 KSKSKSKSKSKSKSKS
1000:0440 4B 53 4B 53 4B 53 4B 53-4B 53 4B 53 4B 53 4B 53 KSKSKSKSKSKSKSKS
1000:0450 4B 53 4B 53 4B 53 4B 53-4B 53 4B 53 4B 53 4B 53 KSKSKSKSKSKSKSKS
1000:0460 4B 53 4B 53 4B 53 4B 53-4B 53 4B 53 4B 53 4B 53 KSKSKSKSKSKSKSKS
1000:0470 4B 53 4B 53 4B 53 4B 53-4B 53 4B 53 4B 53 4B 53 KSKSKSKSKSKSKSKS
-q
L'emplaementmémoire1000:400abienhangédevaleur.
Remarque.-L'instrutionRETquitermineleprogrammeseontente demettreleregistreàIP,
'est-à-direqu'on se retrouveàl'instrution CS :0000.Nous avonsdéjà dit qu'ave le système
d'exploitationMS-DOS, lorsquel'interpréteurdeommandes(leprogrammequitourne pardé-
faut) renontre un exéutable .om, aratérisé par son suxe, il détermine un emplaement
mémoire videsusamment grand,renvoie sonadresse de début dans lesegmentCS, plae un
préxede256otetsdanslesegmentpuis,àpartirdudéalage100h,leodemahineontenu
danslehier.Lorsqu'ilrenontre l'instrutionRET,lamainest donpasséeaudébutdupré-
xe,oùdoit setrouverlafaçonde revenirproprementausystème d'exploitation, 'est-à-direà
12.2.3.4 Réupération d'un programme ave debug
Introdution.-Pourlire unprogramme(sauvegardéantérieurement),il sut d'indiquer lenom
duhier(toujoursàl'aidedelaommandeN),puisdedemanderdeharger(toLoadenanglais)
eprogrammegrâeàlaommandeL.
Syntaxeduhargement.-Si lehieraété nommé,ilsut d'utiliser:
L [adresse℄
pourhargerle programmeàune adressedéterminée.Si auune adressen'estindiquée,le pro-
grammeest hargéàCS:100.
Exemple.-Dansleasi-dessusonaura:
C:\COM\>debug
-N EX1.COM
-L
Il y a un petit problème à e moment-là puisque nous ne savons pas omment visualiser le
programme(ationquenousallonsvoirdanslasous-setionsuivante).
Autrefaçon.- Une autre façonde faire (il s'agit d'un raouri) onsisteà indiquer lenom du
programmeàl'appeldedebug:
C:\COM\>debug EX1.COM
12.2.4 Visualisation d'un programme
Laommande U(pourUnassemble, 'est-à-diredésassembler enanglais)permet àlafoisde
visualiserleodemahine d'unprogrammeetl'équivalentdeeodeenlangagesymboliquede
debug.
Syntaxe.-Onpeututiliserl'undesformatssuivants:
U <adresse de départ> <adresse de fin>
U <adresse de départ> <L nombre d'otets>
oùle nombred'otets est expriméen hexadéimal. Si onn'indique rien, 32otetssontahés
enommençantàl'adresseCS:IP.
Exemple.-Dansleasdel'exemplei-dessusona:
C:\COM\>debug EX1.COM
-U 100 10B
24C3:0100 B80010 MOV AX,1000
24C3:0103 8ED8 MOV DS,AX
24C3:0105 C606000405 MOV BYTE PTR [0400℄,05
24C3:010A C3 RET
12.3 Assembler ave debug
Nous avons vu l'intérêt d'érire un programme en langage symbolique avantde l'érire en
langage mahine. La tradution d'un programme en langage symbolique en langage mahine
s'appellel'assemblage.Nousavonsvuommentassembleràlamain.Celadevienttrèsvitepé-
nible.Ons'esttrèsviteaperçuqu'onpeutenonerlatâheàl'ordinateurlui-même.L'utilitaire
debugpermetetassemblage, toutaumoinsdansertainsas.
Introdutionduprogrammeenlangagesymbolique.-Pourérireunprogrammeenlangagesym-
boliqueavedebug,ilsutd'utiliserlaommande`A'(pourAssemble)dedebug:onfaitsuivre
`A' del'adressededépart (enhexadéimal)ou,mieux,de rien(l'adresseonstituéedusegment
deodehoisipardebuget dudéalage100hestprisepardéfaut);onrépondàhaqueadresse
paruneinstrutionenlangagesymbolique(eluiomprispardebug,évidemment).
Exemple.-Reprenonsnotreexemple:
C:\COM\>debug
-a
249:0100 mov ax,1000
249:0103 mov ds,ax
249:0105 mov byte ptr [0400℄,05
249:010A ret
249:010B
-
Remarque.- Sivousérivezune instrution(syntaxiquement)inorrete quedebugne peutpas
12.4 Historique
12.4.1 Les langages symboliques
PourvonNeumann,lelangagede programmationleplusparfaitet leplusuniversel estle
langagemahine.Malheureusementleerveauhumainàpartpeut-êtreeluidevonNeumann
perdrapidement pied dansette suitede 0et de1. Deplus, si l'onveutqu'un jour unnon-
informatiienpuisseommanderlemoindretravailàlamahine, ilfautbienqu'ilpuisselefaire
sanspourantantdevenirunspéialistedelastruturedel'ordinateur.
Lepremierrédateurd'unlangagedeprogrammationplusonvivialestAlanTuring,quiveut
failiterl'usageduManshesterMARK1.Cepremierlangageontientinquanteinstrutions,qui
sontautomatiquementtransritesenlangagemahineparl'ordinateurlui-même.Lamêmeidée
estreprise,parGraeHopper,surl'UNIVAC1,premierordinateurivil,quidisposed'unshort
ode;elledéveloppee quelarme appellela
hh
programmationautomatique
ii
,unprogramme
internequitransformelesinstrutionsdel'utilisateureninstrutionsmahineodéesenbinaire.
À partir de e moment, il est admis qu'un langage de programmationdoit servir àérire des
programmesd'unefaçonqui permettedeséonomiesdupointdevuedutempsd'utilisationde
lamahine.
NousavonsdéjàvulelangagesymboliqueutiliséparMaurieWilkes.
Soures.-Lestoutpremierslangagesdeprogrammationsonttraitésdans[KP-77℄:
Cetartile passe en revue l'évolution des langages de programmation de
hh
haut- niveauii
durant la première déade d'ativité de la programmation desalulateurs.
Nous disutons des ontributions de Zuse en 1945 (le
hh
Plankalkül
ii
), Goldstine et
von Neumann en 1946 (
hh
Flow Diagrams
ii
), Curry en 1948 (
hh
Composition
ii
),
Mauhly etal.en1949 (
hh
ShortCode
ii
),Burksen1950(
hh
IntermediatePL
ii
),Ru-
tishauser en1951(
hh
Klammerausdrüke
ii
),Böhmen1951(
hh
Formules
ii
),Glennie
en 1952(
hh
Autoode
ii
),Hopperetal.en1953 (
hh
A-2
ii
),LaningetZierleren1953
(
hh
Algebrai Interpreterii
),Bakus et al. en 19541957 (hh
Fortranii
), Brookeren1954 (
hh
MarkIAutoodeii
),KamyninetLîubimskiien1954 (hh ΠΠ-2 ii
),Ershoven
1955 (hh ΠΠ ii
), Grems et Porter en 1955 (hh
BACAIC ii
), Elsworth et al. en 1955
(hh
Kompiler 2 ii
),Blumen 1956 (hh
ADES ii
),Perliset al.en 1956 (hh
IT ii
), Katz
et al.en 19561958 (hh
MATH-MATIC ii
), Bauer et Samelson en 19561958 (U.S.
Patent 3047228). Lesaratéristiquesprinipales dehaqueontribution sontillus-
tréesetdisutées.Pourpouvoirlesomparer,unalgorithmepartiulierxéaétéodé
(autantquefairesepeut)danshaundeeslangages.Cettereherheestfondéesur
des soures non publiées et les auteurs espèrent qu'ils ont été apables de ompiler
12.4.2 CP/M et MS-DOS
CP/M.- Comme nous l'avons déjà dit, les premiers miro-ordinateurs n'étaient pas munis de
système d'exploitation.Puis dessystèmesd'exploitation propriétairesapparurent: unpartype
d'ordinateur.LorsqueGaryKildallintroduitCP/M,elui-idevienttrèsrapidementlesystème
d'exploitationparexellenedesmiro-ordinateursmunisd'unmiroproesseur8bits.
Gary Arlen Kildall (19421994)est né et a grandià Seattle, dans l'état de Washington,
oùsafamilletenaituneéoledemarins.Sonpère,JosephKildall,d'originenorvégienne,était
apitaineetsamère,Emma,étaitàdemi-suédoise.Garyvaàl'universitédeWashington(UW),
en espérant devenir enseignantde mathématiques, mais il est de plus en plus intéressé parla
tehnologiedesordinateurs.Unefoisdiplmé,ilremplit sesobligationsmilitairesen enseignant
àla Naval Postgraduate Shool (NPS) de Monterey, en Californie. Étant alors àune heure de
voituredelaSilionValley,Kildallentendparlerdupremiermiroproesseurommeriallement
disponible,le4004d'Intel.Ilenahèteunetommeneàériredesprogrammesexpérimentaux
pour elui-i. Pour en apprendre plus sur les miroproesseurs, il travaille hez Intel omme
onsultantàsalibération.
Ilretourne brièvementàUW oùil termineson dotoraten informatiqueen 1972et revient
enseigneràNPS.Ilpublieunartileintroduisantl'analysedesheminsdedonnéesutilisédenos
jours pour l'optimisationdes ompilateurs, touten ontinuantàeetuer desexpérienesave
lesmiro-ordinateursetlatehnologieémergeantdesdisquettes.En1973,ildévelopelepremier
langage de haut niveau pour les miroproesseurs, appelé PL/M (Programming Language for
Miroproessors).IlréeCP/M lamêmeannée pourpermettreau8080deontrlerunleteur
de disquettes. Il eetue une démonstration de CP/M pour Intel, qui est peu intéressé mais
hoisitdediuserPL/M.
Kildall et sa femme Dorothy fondent une soiété, appelée d'abord Intergalati Digital
Researh (plus tard renommée en Digital Researh, In), pour vendreCP/M en faisant de la
publiitédanslesrevues.Digital Researh venduneliene deCP/Mpourl'IMSAI8080, lone
populairedel'Altair 8800.Puis plusieursfabriantsahètentunelieneCP/M,equifaitqu'il
devient un standardde fait, qui doit s'adapter à un nombre roissantde matériels diérents.
En réponse,Kildallinvente le oneptde BIOS, unensemble deprogrammes simplesstoké
danslapartiematérielledumiro-ordinateur,equipermetàCP/Mdes'exéutersurdiérents
systèmessansmodiations.
MS-DOS.-SurlasuggestiondeBillGates,IBMontateDigitalResearhen1980pournégoier
l'ahatdelaversionàvenirdeCP/M,appeléeCP/M-86, pourl'IBMPC. Garyonelanégo-
tiationàsafemme,Dorothy,ommeilal'habitudedelefaire,alorsqueluietsonollègueTom
Rolanderutilisentl'avionprivédeGarypourlivrerdeslogiielsaufabriantBillGodbout.
Avantd'expliquerlebutdeleurvisite,lesreprésentantsd'IBMinsistentpourqueDorothysigne
un agrémentde non-diusion.Sur l'avis de l'avoat de DRI, Gerry Davis, Dorothy refuse de
le signersans l'approbation deGary. Garyrevientdans l'après-midiet essaiede revenir surla
disussionaveIBM,mais lesreprésentantstiennentbon.
IBM s'adresse alorsà Mirosoft,qui est déjà d'aord pour fournir uninterpréteur BASIC
et plusieursautres programmes pour le PC. Le représentant d'IBM, Sams, one don à Bill
Gates la tâhe de trouver un système d'exploitation utilisable. Quelques semaines plustard,
il proposed'utiliser unlone de CP/M, le 86-DOS de Seattle Computer Produts(SCP). Paul
Allen négoie une liene ave SCP, adapte 86-DOS au matériel de l'IBM PC et leprésente
ommePC-DOS.
On onnaît lesuès que onnaîtra e système d'exploitaion jusqu'en 1995, date à laquelle
il sera remplaé parWindows. Disons un mot, pournir, de e qui arrivaà Digital Researh.
mandeàGerryDavisdequelsmoyenslégauxildisposepourfairevaloirsesdroits,maiselui-i
luiexpliquequ'iln'estpaslairquelaloisur lapropriétéintelletuelles'appliqueauxlogiiels.
Aussi Kildall seontente-t-ilseulement de menaer IBMd'une ation légale, qui lui répond
enproposantd'orirCP/M-86enoptionpourlePC.Kildallaepte,pensantquelenouveau
systèmed'exploitationd'IBMn'aurapasdesuès.
12.4.3 Debug
En1980,TimPaterson,néen1956,ommeneàtravaillersurunsystèmed'exploitation16
bits(pourle8086)pourlaarteS-100Busqu'ilaonçuepourSCP(SeattleComputerProduts)
l'annéepréédente.Pourfailiterla programmationde QDOS(plus tardappelé 86-DOS), Tim
réeundébogueurtenantsurunepueROM;leodedeette versionsurROMest plaéedans
ledomainepubli.Plus tard,Tim enadapteleodeanqu'ils'exéuteentantqueprogramme
.COMsousQDOS.Illuiajoutealorslaapaitédedésassemblerduodemahine8086.Entre-
temps, Mirosoft aaheté le droitde vendre leQDOS de Tim àIBMpourleur projet`seret'
de PC. Tim est alors embauhé par Mirosoft. Lorsqu'il met au pointDOS 1.00en 1981, son
utilitaire DEBUG.COM y est inlus. Peu y a été ajouté depuis, l'exeption majeure étant la
ommanded'assemblageàpartirdeDOS2.0[Sed-04℄.
12.5 Bibliographie
[KP-77℄ Knuth,DonaldE.,TrabbPardo,Luis,TheEarlyDevelopmentofProgramming
Languages, in Belzer,J.,Holzman,A.G., andKent,A. (eds),Enylopedia
of Computer Siene and Tehnology, vol. 6, Dekker, New-York, 1977, pp.
419493.Reprintedin[Met-80℄, pp.197273.
Tradution française dans Donald E. Knuth , Élémentspour une histoire de
l'informatique,artileshoisiset traduitsparPatrikCégielski,LetureNotes
190,CSLIPubliations,Stanfordet SoiétéMathématiquedeFrane,2011,xvi +
371p.
[Met-80℄ Metropolis, N. and Howlett, J. and Rota, Gian-Carlo, eds, A History of
Computingin theTwentiethCentury, AademiPress,1980.
[Sed-04℄ Sedory,DanielB.,A Guide to Debug,2004.Téléhargeablesur: