• Aucun résultat trouvé

Chaie 12 Cdage e

N/A
N/A
Protected

Academic year: 2022

Partager "Chaie 12 Cdage e "

Copied!
18
0
0

Texte intégral

(1)

Codage en langage mahine

Commentfaireréagirunmiroproesseurtelquele8088?Commentprogrammerenlangage

mahinesurunsystèmetelquelePC?Voiilesquestionsauxquellesnousallonsrépondredans

ehapitre.

(2)

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é

(3)

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

(4)

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

(5)

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 |

(6)

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(lorsque

w = 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 |

(7)

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.

(8)

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

(9)

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)

(10)

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

(11)

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)

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, à

(13)

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à

(14)

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

(15)

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

(16)

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- niveau

ii

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 Interpreter

ii

),Bakus et al. en 19541957 (

hh

Fortran

ii

), Brookeren

1954 (

hh

MarkIAutoode

ii

),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

(17)

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.

(18)

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:

Références

Documents relatifs

le nez offre des arômes de petits fruits rouges avec des

Langage mahine.- Uun sous-programme peut se trouver dans le même segment que le programme. qui l'appelle : la valeur du registre IP est alors hangée mais il est inutile de

de la routine de servie de l'interruption se trouve à l'adresse 4 × n pour le type n : les deux otets de IP se trouvent à l'adresse 4 × n et les deux otets de CS à l'adresse 4 × n +

Pour une valeur se trouvant à l'adresse (de mémoire vive) désignée par le ontenu d'uno. registre (de seize bits, puisque 'est la taille du déplaement), on indique le nom de

Langage mahine.- L'éhange peut avoir lieu entre registres ou registre et ase mémoire :.

Cei doit être eetué à partir d'une page pour laquelle les adresses virtuelles sont. égales aux adresses physiques ( hh identity mapped ii

Lorsque deux droites sont perpendiculaires à une même troisième alors elles sont parallèles donc (AB) et (FE) sont parallèles... 2) Dans le triangle OFE, (AB) et (FE) sont parallèles

moins chaque année, du plan des réseaux pour les extensions, réhabilitations et renouvellements de réseaux (en l'absence de travaux, la mise à jour est considérée comme