• Aucun résultat trouvé

Chaie 18 gaai d

N/A
N/A
Protected

Academic year: 2022

Partager "Chaie 18 gaai d "

Copied!
6
0
0

Texte intégral

(1)

Programmation modulaire

Nousavonsvu,lorsdel'initiationàlaprogrammation,lanotiondesous-programme(éventuel-

lementsousdesnomsdiversdefontion,proédure...)etenquoilaprogrammationmodulaireest

intéressante.Nousallonsvoirommentmettreenplaelessous-programmesenlangagemahine

dumiroproesseur8086/8088.

(2)

18.1 Notions générales

Voyonsquelssontlesproblèmesposésparunprogrammeurpourlamiseenplae d'unsous-

programmeenlangagemahine.

Repéraged'unsous-programme.- Un sous-programme est repéré par un nom dans le as d'un

langageévolué.Dansleasd'unlangagemahineilserarepéréparuneadressededébut.Ils'agit

engénéraldel'adressedesapremièreinstrutionmaispastoujours:ilpeutlui-mêmeontenirdes

sous-programmesqui viennent avantlui; le sous-programmeproprement dit peut-être préédé

de(délarationde)onstantes.

Argumentsd'unsous-programme.-Contrairementauasdeslangagesévolués,unsous-program-

me en langage mahine n'a pas d'arguments. Autrement dit tous les paramètres sont passés

omme variables globales,soit à l'aide desregistres, soit omme emplaement mémoire,soit à

l'aidedelapile quenousétudierons danslehapitresuivant.

Find'unsous-programme.- Il faut évidemment indiquer la dernièreinstrution d'un sous-pro-

gramme,sinontouteslesinstrutionsquisuiventetteinstrution(onsidéréesparnousommela

dernière)seronteetuéesparlemiroproesseur(enallantenpartiulierdanslesous-programme

suivant).Un sous-programmesetermineparuneinstrutionspéialeindiquantqu'ils'agitdela

dernièreinstrution.

Adressederetour.- Lorsqu'onaterminé unsous-programme, lemiroproesseurdoit savoiroù

retourner dans le programme prinipal, autrement dit quelle est l'adresse de retour. Pour

failiterlavieduprogrammeur,etteadresseestengénéralonservéeparlemiroproesseur,au

momentdel'appeldusous-programme,surune pile(etqu'importe eque'estpourl'instant),

puis réupérée, également parle miroproesseur defaçon transparente pour le programmeur,

aumomentduretour;leprogrammeurn'apasàs'en préouper.

Plaed'unsous-programme.- Onpeut plaer le ode d'un sous-programmeoù l'on veut. Si on

neommene pasparleprogramme prinipal, il fautlefaireprééder d'unsautinonditionnel,

equi permet depasserpar-dessusleodedusous-programme.

Appeld'unsous-programme.- Onpourrait appeler un sous-programmepar unsaut mais il est

plusastuieuxd'utiliseruneinstrutionspéiale(quis'oupeentreautredeplaerl'adressede

retoursurlapile),dontl'opérandeestl'adressedusous-programme.

(3)

18.2 Cas du miroproesseur 8086/8088

18.2.1 Appel du sous-programme

Langagesymbolique.- Unsous-programmepeutêtreappelégrâeàl'instrutionCALL(appelen

anglais)dontl'opérandeestl'adressedusous-programme:

CALL adresse

Langagemahine.-Uunsous-programmepeutsetrouverdanslemêmesegmentqueleprogramme

qui l'appelle : la valeur du registre IP est alors hangée mais il est inutile de hanger elle

du registre CS. Il peut aussi se trouver dans un autre segment : les valeurs des registres IP

et CS néessitentalors d'être hangées. L'appelpeuts'eetuer de façondirete (en spéiant

l'adresseparuneonstante)ouindirete(l'adressesetrouvedansunregistreouàunemplaement

mémoire):

Dansle as d'unappel intra-segmentairediret,on préise l'adressepar undéplae-

ment(entierrelatif)parrapportàlavaleurenoursdeIP :

| 1110 1000 | déplaement bas | déplaement haut |

L'appel a lieu pour un programme ommençant en [IP℄ + déplaement, où [IP℄ est

l'adressedel'instrution suisuitl'appel.

Dansleasd'unappelinter-segmentairediret,onpréiselavaleurdeIPetégalement

elledeCS:

| 1001 1010 | IP bas | IP haut | CS bas | CS haut |

Dansleasd'un appelintra-segmentaireindiret,onpréiselavaleurdeIP:

| 1111 1111 | mod 010 r/m | | |

Dans le as d'un appel inter-segmentaire indiret, on préise la valeur de IP et de CS,

ontenusdansunemplaementmémoire(un registren'estpassusant):

| 1111 1111 | mod 011 r/m | | |

ave

mod 6 = 11

.Danseas[IP℄et[CS℄sontremplaésparlesontenusdesasesmémoire (16bits)déniesparl'adresseeetiveetl'adresseeetive+2.

18.2.2 Retour d'un sous-programme

Langagesymbolique.- Un sous-programme doit ontenir au moins une instrution RET (pour

RETurn ou RETour), indiquant la n du sous-programme (et don le retour au programme

prinipal)defaçoninonditionnelle:

RET

pourleretourd'unsous-programmeintra-segmentaireet :

RETF

(aveFpourFar,lointainenanglais)pourleretourd'unsous-programmeinter-segmentaire.

Langagemahine.-Ilexistedeuxinstrutionsderetour:

leretourourtest odésurunotetpar1100 0011,soitC3h;

(4)

18.2.3 Un exemple

Érivonsunprogrammeenlangagemahinequivaherherunentiernaturel

n

,omprisentre 0et255,àl'adresse3000:402etquiplaelavaleurdel'otetfaiblede

2 n +n

àl'adresse3000:404.

Lealuldeettefontioneetuégrâeàunsous-programmeéritenlangagemahine.

Nous avonsdéjà éritunprogramme enlangage mahine permettantde alulerl'exponen-

tiation

x n

. Nous retrouverons ainsi souvent desparties deprogramme déjà érites. Autantles plaerdansdessous-programmeset lesréutiliser.

De façonàréutiliseraumieux notresous-programmed'exponentiation vupréédemment,le

programme prinipal plaera 2 à l'adresse 3000 :400, fera appel au sous-programme de alul

de l'exponentielle,quiplae le résultatàl'adresse &H0004,puisajouterale ontenu delaase

mémoire3000:402àeluideelle d'adresse3000:404.

Leprogrammes'éritdelafaçonsuivanteenlangagesymbolique:

MOV AX,3000

MOV DS,AX

MOV WORD PTR [0400℄,2

CALL EXP

MOV AX,[0402℄

ADD [0404℄,AX

RET

EXP: MOV CX,[0402℄

MOV BX,[0400℄

MOV AX,1

DEBUT: MUL BX

DEC CX

JNZ DEBUT

MOV [0404℄,AX

RET

L'appel,et donleretour,dusous-programmeduprogrammeen langagemahinepeutêtre

ourt.

Traduisons maintenant e programme érit en langage symbolique en langage mahine, en

reopiantpourlesous-programmeleprogrammeérit pourl'exponentiation:

B8 00 30

8E D8

C7 06 00 04 02 00

E8 08 00

A1 02 04

01 06 04 04

C3

8B 0E 02 04

8B 1E 00 04

B8 01 00

F7 E3

49

75 FB

A3 04 04

(5)

Codonseprogramme:

C:\COM>debug

-E CS:100 B8 00 30

-E CS:103 8E D8

-E CS:105 C7 06 00 04 02 00

-E CS:10C E8 08 00

-E CS:10E A1 02 04

-E CS:111 01 06 04 04

-E CS:115 C3

-E CS:116 8B 0E 02 04

-E CS:11A 8B 1E 00 04

-E CS:11E B8 01 00

-E CS:121 F7 E3

-E CS:123 49

-E CS:124 75 FB

-E CS:126 A3 04 04

-E CS:129 C3

-R BX

BX 0000

:

-R CX

CX 0000

:02A

-N EXPADD.COM

-W

Eriture de 0002A otets

-Q

Si onplae 3ommedonnée:

C:\COM>debug

-E 3000:402 03

-q

C:\COM> EXPADD.COM

après exéution du programme expadd.om, on vérie que l'on a bien

2 3 + 3 = 11

= Bh à l'emplaementmémoirehoisi:

C:\COM>debug

-D 3000:400

3000:0400 02 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 ...

-q

(6)

18.3 Historique

Lesmodèlesdealul,dontlamahinedeTuring,utilisentlanotiondesous-programme

Comme nous l'avonsvu au hapitre 15, le premier langage symbolique (EDSAC, 1949) ne

prévoitpasd'instrutionspartiulièrepourmanipulerlessous-programmes.Unsous-programme

est utilisé dès le premier programme proposé, elui sur le alul des arrés. Le méanisme de

sous-programmeest alorsentièrementgéréparl'utilisateur.

Références

Documents relatifs

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

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

Comme pour les récréations, certaines écoles mettent à la disposition des jeunes, qui utilisent le service de surveillance du midi, du matériel leur permettant de jouer

Next, to each operator of the Chronogram Language (generation of intervals, rows, columns, multicolumns, time diagrams, etc.) corresponds an operation on languages

Lorsque vous jouez vos cartes avec une capacité de Blocage, votre adversaire ne peut plus jouer de cartes supplémentaires pour dépasser le nouveau coût de votre Personnage.. Le

L’ASPM sera sélectionné(e) selon la procédure de recrutement d’un consultant individuel (CI) en accord avec les procédures définies dans le « Règlement de

On peut dire que nous sommes tous les quatre de grands gourmands, et que nous avons besoin de partager et de laisser parler les enfants que nous ne cessons d’être.. La pâtisserie