72
© Alexandre Parodi - 20 TITRE SOUS-PROGRAMME voir l'animation: Diaporama / Visualiser ... avancer: Barre d'espace reculer: p

© Alexandre Parodi - 2005 TITRE SOUS-PROGRAMME voir l'animation: Diaporama / Visualiser... avancer: Barre d'espace reculer: p

Embed Size (px)

Citation preview

Page 1: © Alexandre Parodi - 2005 TITRE SOUS-PROGRAMME voir l'animation: Diaporama / Visualiser... avancer: Barre d'espace reculer: p

© A

lexa

ndre

Par

odi -

200

5

TITRE

SOUS-PROGRAMMESOUS-PROGRAMME

voir l'animation: Diaporama / Visualiser ...avancer: Barre d'espace reculer: p

Page 2: © Alexandre Parodi - 2005 TITRE SOUS-PROGRAMME voir l'animation: Diaporama / Visualiser... avancer: Barre d'espace reculer: p

© A

lexa

ndre

Par

odi -

200

5

DEFINITION

Un sous-programme ("subroutine" ou "subprogram")est une séquence d'instructions

que l'on veut pouvoir utiliser plusieurs fois.

Page 3: © Alexandre Parodi - 2005 TITRE SOUS-PROGRAMME voir l'animation: Diaporama / Visualiser... avancer: Barre d'espace reculer: p

© A

lexa

ndre

Par

odi -

200

5

SEQUENCE A REUTILISER

précédente1ère instruction Séquence2ème instruction à ré-utiliser

...suivanteencore

Page 4: © Alexandre Parodi - 2005 TITRE SOUS-PROGRAMME voir l'animation: Diaporama / Visualiser... avancer: Barre d'espace reculer: p

© A

lexa

ndre

Par

odi -

200

5

APPEL & RETOUR

précédente ProgrammeSaut au

sous-programmePrincipal

suivanteencore

1ère instruction2ème instruction Sous

... ProgrammeRetour du

Sous-Programme

Adresse de retour

Adresse du sous-programme

Signifie ici:"saute vers"

"branche sur"

Signifie ici:"saute vers"

"branche sur"

Page 5: © Alexandre Parodi - 2005 TITRE SOUS-PROGRAMME voir l'animation: Diaporama / Visualiser... avancer: Barre d'espace reculer: p

© A

lexa

ndre

Par

odi -

200

5

APPEL

Le saut au sous-programme("Jump to SubRoutine")

est souvent appeléAppel au sous-programme

("Call").

Page 6: © Alexandre Parodi - 2005 TITRE SOUS-PROGRAMME voir l'animation: Diaporama / Visualiser... avancer: Barre d'espace reculer: p

© A

lexa

ndre

Par

odi -

200

5

USAGE EN POO

Les fonctions-membre ou méthodes des objets des langages orientés objet

(e.g. JAVA, C++, C#, Eiffel ...) sont implémentées par des sous-programmes.

appelle le sous-programme "boost"de l'objet "toto".

toto.boost() ;

Page 7: © Alexandre Parodi - 2005 TITRE SOUS-PROGRAMME voir l'animation: Diaporama / Visualiser... avancer: Barre d'espace reculer: p

© A

lexa

ndre

Par

odi -

200

5

UTILISATION MULTIPLE

précédente 11ère instruction Séquence2ème instruction utilisée

... 1ère foissuivante 1encore 1

précédente 21ère instruction Séquence2ème instruction utilisée

...... 2ème foissuivante 2encore 2

Page 8: © Alexandre Parodi - 2005 TITRE SOUS-PROGRAMME voir l'animation: Diaporama / Visualiser... avancer: Barre d'espace reculer: p

© A

lexa

ndre

Par

odi -

200

5

APPELS CONSECUTIFS

précédente 1 Programmesaut au sous-progr. principal

suivante 1encore 1

précédente 2 Suitesaut au sous-progr. programme

suivante 2 principalencore 2

1ère instruction2ème instruction Sous-

... Programmeretour sous-prog.

Adresse de retour 1

Adresse du sous-programme

Adresse de retour 2

Comment savoir où revenir ?

- ou -Comment savoir où revenir ?

- ou -

Page 9: © Alexandre Parodi - 2005 TITRE SOUS-PROGRAMME voir l'animation: Diaporama / Visualiser... avancer: Barre d'espace reculer: p

© A

lexa

ndre

Par

odi -

200

5

ADRESSE DE RETOUR

Pour retourner à l'instruction suivant l'appel dans le programme principal, il faut avoir d'abord sauvegardé son adresse.

Elle s'appelle "adresse de retour"

Page 10: © Alexandre Parodi - 2005 TITRE SOUS-PROGRAMME voir l'animation: Diaporama / Visualiser... avancer: Barre d'espace reculer: p

© A

lexa

ndre

Par

odi -

200

5

APPELS CONSECUTIFS

précédente 1 Programmesaut au sous-progr. principal

suivante 1encore 1

précédente 2 Suitesaut au sous-progr. programme

suivante 2 principalencore 2

1ère instruction2ème instruction Sous-

... Programmeretour sous-prog.

Adresse de retour 1

Adresse du sous-programme

Adresse de retour 2

Mémorisation retour :

Adresse de retour 1Adresse de retour 2

Page 11: © Alexandre Parodi - 2005 TITRE SOUS-PROGRAMME voir l'animation: Diaporama / Visualiser... avancer: Barre d'espace reculer: p

© A

lexa

ndre

Par

odi -

200

5

SAUVEGARDE DE L'ADRESSE DE RETOUR

Sauvegarde de l'adresse de retour dans un registre ou une case mémoire fixe:

Et si l'on appelle un sous-programme depuis le sous-programme ?

Page 12: © Alexandre Parodi - 2005 TITRE SOUS-PROGRAMME voir l'animation: Diaporama / Visualiser... avancer: Barre d'espace reculer: p

© A

lexa

ndre

Par

odi -

200

5

APPELS IMBRIQUES

précédente 1 Programmesaut sous-progr. 1 principal

suivante 1encore 1

instruction(s)saut sous-progr. 2

suivante 2 Sous-retour sous-prog. Programme 1

1ère instruction2ème instruction Sous-

... Programme 2retour sous-prog.

Adresse de retour 1

Adresse du sous-programme

Adresse de retour 2

CE QUI DEVRAIT ARRIVER

Page 13: © Alexandre Parodi - 2005 TITRE SOUS-PROGRAMME voir l'animation: Diaporama / Visualiser... avancer: Barre d'espace reculer: p

© A

lexa

ndre

Par

odi -

200

5

Adresse de retour 1

IMBRICATION +MEMORISATION

précédente 1 Programmesaut sous-progr. 1 principal

suivante 1encore 1

instruction(s)saut sous-progr. 2

suivante 2 Sous-retour sous-prog. Programme 1

1ère instruction2ème instruction Sous-

... Programme 2retour sous-prog.

Adresse de retour 1

Adresse du sous-programme

Adresse de retour 2

Mémorisation retour :

Adresse de retour 2

CE QUI ARRIVE

Page 14: © Alexandre Parodi - 2005 TITRE SOUS-PROGRAMME voir l'animation: Diaporama / Visualiser... avancer: Barre d'espace reculer: p

© A

lexa

ndre

Par

odi -

200

5

SAUVEGARDE DE L'ADRESSE DE RETOUR

On sauvegarde l'adresse de retour sur la pile.

Page 15: © Alexandre Parodi - 2005 TITRE SOUS-PROGRAMME voir l'animation: Diaporama / Visualiser... avancer: Barre d'espace reculer: p

© A

lexa

ndre

Par

odi -

200

5

IMBRICATION + PILE

précédente 1 Programmesaut sous-progr. 1 principal

suivante 1encore 1

instruction(s)saut sous-progr. 2

suivante 2 Sous-retour sous-prog. Programme 1

1ère instruction2ème instruction Sous-

... Programme 2retour sous-prog.

Adresse de retour 1

Adresse du sous-programme

Adresse de retour 2

Adresse de retour 1

Adresse de retour 2

L'adresse de retour est pointéeL'adresse de retour est pointée

Page 16: © Alexandre Parodi - 2005 TITRE SOUS-PROGRAMME voir l'animation: Diaporama / Visualiser... avancer: Barre d'espace reculer: p

© A

lexa

ndre

Par

odi -

200

5

RE-ENTRANCE et RECURSIVITE

Ceci permet des sous-programmes ré-entrants (qui s'appellent eux-mêmes)

et donc récursifs !

Autre solution : liste chaînée(rare car pas adaptée ici: pas d'avantage, compliquée, volumineuse et moins rapide)

Mais la pile est limitée ...

Page 17: © Alexandre Parodi - 2005 TITRE SOUS-PROGRAMME voir l'animation: Diaporama / Visualiser... avancer: Barre d'espace reculer: p

© A

lexa

ndre

Par

odi -

200

5

ACTIONS D'UN APPEL

Un appel à sous-programme :

empile l'adresse de retour ;

saute à la 1ère instruction du sous-programme .

Page 18: © Alexandre Parodi - 2005 TITRE SOUS-PROGRAMME voir l'animation: Diaporama / Visualiser... avancer: Barre d'espace reculer: p

© A

lexa

ndre

Par

odi -

200

5

PROGRAMME D'APPEL

Une instruction spéciale n'est pas nécessaire !

MPC R2 ; // charge le contenu du PC dans R2// MPC = Move PC

ADQ 2,R2 ;// ajout 2 à R2

STW R2, -(SP) ; // empile l'adresse de retour// -(SP) = mode d’@ basé prédecrémenté SP = Stack //Pointer

JEA (R1) ; // saute au sous-prog. pointé par R1

Page 19: © Alexandre Parodi - 2005 TITRE SOUS-PROGRAMME voir l'animation: Diaporama / Visualiser... avancer: Barre d'espace reculer: p

© A

lexa

ndre

Par

odi -

200

5

INSTRUCTION JSR

Le saut au sous-programmeest effectué par l'instruction:

"Jump to SubRoutine"

JSR

Page 20: © Alexandre Parodi - 2005 TITRE SOUS-PROGRAMME voir l'animation: Diaporama / Visualiser... avancer: Barre d'espace reculer: p

© A

lexa

ndre

Par

odi -

200

5

OPERANDE DE JSR

L'opérande de l'instruction JSR est un sous-programme.

L'adresse de cet opérande est donc l'adresse du sous-programme,

c'est à dire l'adresse de sa 1ère instruction.

Page 21: © Alexandre Parodi - 2005 TITRE SOUS-PROGRAMME voir l'animation: Diaporama / Visualiser... avancer: Barre d'espace reculer: p

© A

lexa

ndre

Par

odi -

200

5

MODES D'ADRESSAGE DE JSR

JSR opérande

MODE D'ADRESSAGE NOTATION ASSEMBLEUR

ADRESSE DU SOUS-PROGRAMME

COMMENTAIRE

Basé JSR (R) (machine RISK)

R simple et générique

Direct JSR @address address = IE = M[PC] adresse fixe Indexé JSR (R)disp R + disp = R + IE compliqué Indirect pré-indexé JSR *(R)disp M[R + disp] = M[R +

IE] très compliqué

Basé pré-décrémenté JSR -(R) R-2 peu cohérent ici Basé post-incrémenté JSR (R)+ R peu cohérent ici

Immédiat - PC incohérent ici Registre - - aberrant

Page 22: © Alexandre Parodi - 2005 TITRE SOUS-PROGRAMME voir l'animation: Diaporama / Visualiser... avancer: Barre d'espace reculer: p

© A

lexa

ndre

Par

odi -

200

5

ACTIONS DE JSR

JSR:

empile l'adresse de retour ;

saute à l'instruction de l'opérande .

Page 23: © Alexandre Parodi - 2005 TITRE SOUS-PROGRAMME voir l'animation: Diaporama / Visualiser... avancer: Barre d'espace reculer: p

© A

lexa

ndre

Par

odi -

200

5

PileSP adresse sommet blabla

précédente ProgrammeR1 adresse ss-prog JSR (R1) Principal

suivanteIR instruct. courante encore

PC adresse mot suiv

adresse ss-prog 1ère instruction... Sous... Programme

RTS

JSR (R1)

AVANT

Signifie ici:"pointe sur"

"est l'adresse de"

Signifie ici:"pointe sur"

"est l'adresse de"

Page 24: © Alexandre Parodi - 2005 TITRE SOUS-PROGRAMME voir l'animation: Diaporama / Visualiser... avancer: Barre d'espace reculer: p

© A

lexa

ndre

Par

odi -

200

5

1000

1002

1004 PileSP 1006 1006 blabla

1008

100A

4000

4002 précédente ProgrammeR1 8002 4004 JSR (R1) Principal

4006 suivanteIR JSR (R1) 4008 encore

400A

PC 40068000

8002 1ère instruction8004 2ème instruction Sous8006 ... Programme8008 RTS800A

JSR (R1)

AVANT

Page 25: © Alexandre Parodi - 2005 TITRE SOUS-PROGRAMME voir l'animation: Diaporama / Visualiser... avancer: Barre d'espace reculer: p

© A

lexa

ndre

Par

odi -

200

5

1000

1002

1004 adresse de retour PileSP 1004 1006 blabla

1008

100A

4000

4002 précédente ProgrammeR1 8002 4004 JSR (R1) Principal

4006 suivanteIR JSR (R1) 4008 encore

400A

PC 40068000

8002 1ère instruction8004 2ème instruction Sous8006 ... Programme8008 RTS800A

JSR (R1)

EMPILAGE ADRESSE DE RETOUR

SP SP - 2 ;M[SP] adresse de retour;

Page 26: © Alexandre Parodi - 2005 TITRE SOUS-PROGRAMME voir l'animation: Diaporama / Visualiser... avancer: Barre d'espace reculer: p

© A

lexa

ndre

Par

odi -

200

5

1000

1002

1004 4006 PileSP 1004 1006 blabla

1008

100A

4000

4002 précédente ProgrammeR1 8002 4004 JSR (R1) Principal

4006 suivanteIR JSR (R1) 4008 encore

400A

PC 40068000

8002 1ère instruction8004 2ème instruction Sous8006 ... Programme8008 RTS800A

JSR (R1)

EMPILAGE ADRESSE DE RETOUR

SP SP - 2 ;M[SP] PC;

Page 27: © Alexandre Parodi - 2005 TITRE SOUS-PROGRAMME voir l'animation: Diaporama / Visualiser... avancer: Barre d'espace reculer: p

© A

lexa

ndre

Par

odi -

200

5

1000

1002

1004 4006 PileSP 1004 1006 blabla

1008

100A

4000

4002 précédente ProgrammeR1 8002 4004 JSR (R1) Principal

4006 suivanteIR 1ère instruction 4008 encore

400A

PC 80048000

8002 1ère instruction8004 2ème instruction Sous8006 ... Programme8008 RTS800A

JSR (R1)

SAUT A LA 1ère INSTRUCTION

IR M[adresse ss-prog] ,PC adresse ss-prog # 2 ;

Page 28: © Alexandre Parodi - 2005 TITRE SOUS-PROGRAMME voir l'animation: Diaporama / Visualiser... avancer: Barre d'espace reculer: p

© A

lexa

ndre

Par

odi -

200

5

1000

1002

1004 4006 PileSP 1004 1006 blabla

1008

100A

4000

4002 précédente ProgrammeR1 8002 4004 JSR (R1) Principal

4006 suivanteIR 1ère instruction 4008 encore

400A

PC 80048000

8002 1ère instruction8004 2ème instruction Sous8006 ... Programme8008 RTS800A

JSR (R1)

SAUT A LA 1ère INSTRUCTION

IR M[R1] ,PC R1 # 2 ;

Page 29: © Alexandre Parodi - 2005 TITRE SOUS-PROGRAMME voir l'animation: Diaporama / Visualiser... avancer: Barre d'espace reculer: p

© A

lexa

ndre

Par

odi -

200

5

PileSP blabla

précédente ProgrammeR1 JSR (R1) Principal

suivanteIR 1ère instruction encore

PC

1ère instruction2ème instruction Sous

... ProgrammeRTS

JSR (R1)

APRES

Page 30: © Alexandre Parodi - 2005 TITRE SOUS-PROGRAMME voir l'animation: Diaporama / Visualiser... avancer: Barre d'espace reculer: p

© A

lexa

ndre

Par

odi -

200

5

1000

1002

1004 4006 PileSP 1004 1006 blabla

1008

100A

4000

4002 précédente ProgrammeR1 8002 4004 JSR (R1) Principal

4006 suivanteIR 1ère instruction 4008 encore

400A

PC 80048000

8002 1ère instruction8004 2ème instruction Sous8006 ... Programme8008 RTS800A

1ère instruction

EXECUTIONSOUS-PROGRAMME

Page 31: © Alexandre Parodi - 2005 TITRE SOUS-PROGRAMME voir l'animation: Diaporama / Visualiser... avancer: Barre d'espace reculer: p

© A

lexa

ndre

Par

odi -

200

5

1000

1002

1004 4006 PileSP 1004 1006 blabla

1008

100A

4000

4002 précédente ProgrammeR1 4004 JSR (R1) Principal

4006 suivanteIR 2ème instruction 4008 encore

400A

PC 80068000

8002 1ère instruction8004 2ème instruction Sous8006 ... Programme8008 RTS800A

2ème instruction

EXECUTIONSOUS-PROGRAMME

Page 32: © Alexandre Parodi - 2005 TITRE SOUS-PROGRAMME voir l'animation: Diaporama / Visualiser... avancer: Barre d'espace reculer: p

© A

lexa

ndre

Par

odi -

200

5

1000

1002

1004 4006 PileSP 1004 1006 blabla

1008

100A

4000

4002 précédente ProgrammeR1 4004 JSR (R1) Principal

4006 suivanteIR ... instruction 4008 encore

400A

PC 80088000

8002 1ère instruction8004 2ème instruction Sous8006 ... Programme8008 RTS800A

... instruction

EXECUTIONSOUS-PROGRAMME

Page 33: © Alexandre Parodi - 2005 TITRE SOUS-PROGRAMME voir l'animation: Diaporama / Visualiser... avancer: Barre d'espace reculer: p

© A

lexa

ndre

Par

odi -

200

5

ACTIONS DU RETOUR

Le retour de sous-programme :

dépile l'adresse de retour ;

saute à l'instruction à cette adresse .

Page 34: © Alexandre Parodi - 2005 TITRE SOUS-PROGRAMME voir l'animation: Diaporama / Visualiser... avancer: Barre d'espace reculer: p

© A

lexa

ndre

Par

odi -

200

5

RETOUR DE SOUS-PROGRAMME

Une instruction spéciale n'est pas nécessaire !

LDW R1,(SP)+ ; // dépile l'adresse de retour dans R1 // j’incrémente le SP

JEA (R1) ; // saute à l'instruction de retour

Page 35: © Alexandre Parodi - 2005 TITRE SOUS-PROGRAMME voir l'animation: Diaporama / Visualiser... avancer: Barre d'espace reculer: p

© A

lexa

ndre

Par

odi -

200

5

IINSTRUCTION RTS

Le retour du sous-programmeest effectué par l'instruction:

”ReTurn from Subroutine"

RTS

Page 36: © Alexandre Parodi - 2005 TITRE SOUS-PROGRAMME voir l'animation: Diaporama / Visualiser... avancer: Barre d'espace reculer: p

© A

lexa

ndre

Par

odi -

200

5

ACTIONS DE RTS

RTS:

dépile l'adresse de retour ;

saute à l'instruction suivant JSR .

Page 37: © Alexandre Parodi - 2005 TITRE SOUS-PROGRAMME voir l'animation: Diaporama / Visualiser... avancer: Barre d'espace reculer: p

© A

lexa

ndre

Par

odi -

200

5

adresse de retour PileSP blabla

précédente ProgrammeR1 JSR (R1) Principal

suivanteIR RTS encore

PC

1ère instruction2ème instruction Sous

... ProgrammeRTS

RTS

AVANT

Signifie ici:"pointe sur"

"est l'adresse de"

Signifie ici:"pointe sur"

"est l'adresse de"

Page 38: © Alexandre Parodi - 2005 TITRE SOUS-PROGRAMME voir l'animation: Diaporama / Visualiser... avancer: Barre d'espace reculer: p

© A

lexa

ndre

Par

odi -

200

5

1000

1002

1004 4006 PileSP 1004 1006 blabla

1008

100A

4000

4002 précédente ProgrammeR1 4004 JSR (R1) Principal

4006 suivanteIR RTS 4008 encore

400A

PC 800A8000

8002 1ère instruction8004 2ème instruction Sous8006 ... Programme8008 RTS800A

RTS

AVANT

Page 39: © Alexandre Parodi - 2005 TITRE SOUS-PROGRAMME voir l'animation: Diaporama / Visualiser... avancer: Barre d'espace reculer: p

© A

lexa

ndre

Par

odi -

200

5

1000

1002

1004 4006 PileSP 1006 1006 blabla

1008

100A

4000

4002 précédente ProgrammeR1 4004 JSR (R1) Principal

4006 suivanteIR RTS 4008 encore

400A

PC adresse de retour8000

8002 1ère instruction8004 2ème instruction Sous8006 ... Programme8008 RTS800A

RTS

DEPILAGE ADRESSE DE RETOUR

PC adresse de retour ,SP SP # 2 ;

Page 40: © Alexandre Parodi - 2005 TITRE SOUS-PROGRAMME voir l'animation: Diaporama / Visualiser... avancer: Barre d'espace reculer: p

© A

lexa

ndre

Par

odi -

200

5

1000

1002

1004 4006 PileSP 1006 1006 blabla

1008

100A

4000

4002 précédente ProgrammeR1 4004 JSR (R1) Principal

4006 suivanteIR RTS 4008 encore

400A

PC 40068000

8002 1ère instruction8004 2ème instruction Sous8006 ... Programme8008 RTS800A

RTS

DEPILAGE ADRESSE DE RETOUR

PC M[SP] ,SP SP # 2 ;

Page 41: © Alexandre Parodi - 2005 TITRE SOUS-PROGRAMME voir l'animation: Diaporama / Visualiser... avancer: Barre d'espace reculer: p

© A

lexa

ndre

Par

odi -

200

5

1000

1002

1004 4006 PileSP 1006 1006 blabla

1008

100A

4000

4002 précédente ProgrammeR1 4004 JSR (R1) Principal

4006 suivanteIR suivante 4008 encore

400A

PC 40088000

8002 1ère instruction8004 2ème instruction Sous8006 ... Programme8008 RTS800A

RTS

PREPARATIONINSTRUCTION SUIVANTE

IR M[PC] ,PC PC # 2 ;

Page 42: © Alexandre Parodi - 2005 TITRE SOUS-PROGRAMME voir l'animation: Diaporama / Visualiser... avancer: Barre d'espace reculer: p

© A

lexa

ndre

Par

odi -

200

5

PileSP blabla

précédente ProgrammeR1 JSR (R1) Principal

suivanteIR suivante encore

PC

1ère instruction2ème instruction Sous

... ProgrammeRTS

suivante

APRES

Page 43: © Alexandre Parodi - 2005 TITRE SOUS-PROGRAMME voir l'animation: Diaporama / Visualiser... avancer: Barre d'espace reculer: p

© A

lexa

ndre

Par

odi -

200

5

1000

1002

1004 4006 PileSP 1006 1006 blabla

1008

100A

4000

4002 précédente ProgrammeR1 4004 JSR (R1) Principal

4006 suivanteIR suivante 4008 encore

400A

PC 40088000

8002 1ère instruction8004 2ème instruction Sous8006 ... Programme8008 RTS800A

suivante

APRES

Page 44: © Alexandre Parodi - 2005 TITRE SOUS-PROGRAMME voir l'animation: Diaporama / Visualiser... avancer: Barre d'espace reculer: p

© A

lexa

ndre

Par

odi -

200

5

APPEL à ADRESSE FIXE(mode direct)

Dans les langages non-objet, le sous-programme

est souvent à une adresse fixeconnue à l'avance.

JSR @SPRG_ADDRESS ;// appelle sprog d'adresse SPRG_ADDRESS

Page 45: © Alexandre Parodi - 2005 TITRE SOUS-PROGRAMME voir l'animation: Diaporama / Visualiser... avancer: Barre d'espace reculer: p

© A

lexa

ndre

Par

odi -

200

5

PileSP adresse sommet blabla

précédente ProgrammeJSR @ Principal

SPRG_ADDRESSIR JSR @ suivante

PC adresse mot suiv

adresse ss-prog 1ère instruction... Sous... Programme

RTS

JSR @SPRG_ADDRESS

AVANT

Signifie ici:"pointe sur"

"est l'adresse de"

Signifie ici:"pointe sur"

"est l'adresse de"

Page 46: © Alexandre Parodi - 2005 TITRE SOUS-PROGRAMME voir l'animation: Diaporama / Visualiser... avancer: Barre d'espace reculer: p

© A

lexa

ndre

Par

odi -

200

5

adresse de retour PileSP blabla

précédente ProgrammeJSR @ Principal

SPRG_ADDRESSIR 1ère instruction suivante

PC

1ère instruction2ème instruction Sous

... ProgrammeRTS

JSR @SPRG_ADDRESS

APRES

Page 47: © Alexandre Parodi - 2005 TITRE SOUS-PROGRAMME voir l'animation: Diaporama / Visualiser... avancer: Barre d'espace reculer: p

© A

lexa

ndre

Par

odi -

200

5

APPEL à ADRESSE FIXEsans mode direct !

Le mode direct n'est pas nécessaire !

LDW R2, #SPRG_ADDRESS ; // charge R2 avec SPRG_ADDRESS JSR (R2) ; // saute au sous-prog. pointé par R2

Page 48: © Alexandre Parodi - 2005 TITRE SOUS-PROGRAMME voir l'animation: Diaporama / Visualiser... avancer: Barre d'espace reculer: p

© A

lexa

ndre

Par

odi -

200

5

APPEL de METHODE

Dans les langages à objet, l'adresse du sous-programme n'est connue qu'à l'exécution.

Le codage des objets varie d'un langage et d'une implémentation à l'autre !

Page 49: © Alexandre Parodi - 2005 TITRE SOUS-PROGRAMME voir l'animation: Diaporama / Visualiser... avancer: Barre d'espace reculer: p

© A

lexa

ndre

Par

odi -

200

5

R4entête Objet

champ1 "toto"boost

...

1ère instruction2ème instruction Sous

... ProgrammeRTS

EXEMPLE SIMPLE D'APPEL DE METHODE(mode indirect pré-indexé)

JSR *(R4)6 ; // appelle boost de l'objet pointé par R4

+6

R4 + 6pointe sur le champ

boost de l'objet

R4 pointe sur l'objet Le champ boost pointe sur le sous-programme

Page 50: © Alexandre Parodi - 2005 TITRE SOUS-PROGRAMME voir l'animation: Diaporama / Visualiser... avancer: Barre d'espace reculer: p

© A

lexa

ndre

Par

odi -

200

5

EXEMPLE D'APPEL DE METHODEsans mode indirect pré-indexé !

Le mode indirect pré-indexé n'est pas nécessaire !

LDW R2, R4 ; // R2 pointe sur l'objet toto// charger R2 ac le contenu de R4

ADQ 6, R2 ; // R2 pointe sur le champ boost de toto

LDW R2, (R2) ; // R2 pointe sur le sous-programme

JSR (R2) ; // saute au sous-programme boost de toto

Page 51: © Alexandre Parodi - 2005 TITRE SOUS-PROGRAMME voir l'animation: Diaporama / Visualiser... avancer: Barre d'espace reculer: p

© A

lexa

ndre

Par

odi -

200

5

PARAMETRES

Le fonctionnement d'un sous-programmepeut dépendre de paramètres ("arguments" ou "parameters") :

toto.boost(5, "piano") ;

5 : entier ; "piano" : chaîne de caractères.

Le nombre de paramètres s'appelle "arité".

Page 52: © Alexandre Parodi - 2005 TITRE SOUS-PROGRAMME voir l'animation: Diaporama / Visualiser... avancer: Barre d'espace reculer: p

© A

lexa

ndre

Par

odi -

200

5

PASSAGE

Ils peuvent être représentés par :

leur valeur (simple et rapide: C, C++, ...) ;

leur adresse (Var de Pascal ...) ;

Page 53: © Alexandre Parodi - 2005 TITRE SOUS-PROGRAMME voir l'animation: Diaporama / Visualiser... avancer: Barre d'espace reculer: p

© A

lexa

ndre

Par

odi -

200

5

MECANISMES DE PASSAGE

Ces paramètres sont passés du programme principal au sous-programme par stockage préalable à l'appel :

dans des registres (simple et rapide) ;

sur la pile (nombre quasi-illimité) ;

dans un descripteur en mémoire (rare: économise la pile mais compliqué) ;

Page 54: © Alexandre Parodi - 2005 TITRE SOUS-PROGRAMME voir l'animation: Diaporama / Visualiser... avancer: Barre d'espace reculer: p

© A

lexa

ndre

Par

odi -

200

5

FONCTION

Un sous-programme qui retourne une information par la gauche s'appelle une fonction ("function") ;

Cette information est stockéepréalablement au retour :

dans un registre précis (e.g. R0: courant);

sur la pile ;

Page 55: © Alexandre Parodi - 2005 TITRE SOUS-PROGRAMME voir l'animation: Diaporama / Visualiser... avancer: Barre d'espace reculer: p

© A

lexa

ndre

Par

odi -

200

5

STACK FRAME

Divers procédés sont utilisés pour échanger des informations entre programme et sous-programme.Ils dépendent du langage évolué utilisé et de son implémentation sur chaque machine.Ils sont basés sur la configuration des informations sur la pile à l'appel, pendant l'exécution et au retour.

La configuration de la pile s'appelle "stack frame" ou

modèle de pile ou environnement.

Page 56: © Alexandre Parodi - 2005 TITRE SOUS-PROGRAMME voir l'animation: Diaporama / Visualiser... avancer: Barre d'espace reculer: p

© A

lexa

ndre

Par

odi -

200

5

SP

disponible

BP

R0

PILE AVANT APPEL

Page 57: © Alexandre Parodi - 2005 TITRE SOUS-PROGRAMME voir l'animation: Diaporama / Visualiser... avancer: Barre d'espace reculer: p

© A

lexa

ndre

Par

odi -

200

5

SP

disponible

BPnb paramètresparamètre n°1 paramètres

R0 paramètre n°2...

paramètre n°n

EXEMPLE DE FRAME juste avant L'APPEL

LDQ 0, R0 ; // initialise R0...STW Ri,-(SP) ; // empile un paramètre depuis RiADQ 1, R0 ; // compte le paramètre...STW R0,-(SP) ; // empile le nb de param.

Page 58: © Alexandre Parodi - 2005 TITRE SOUS-PROGRAMME voir l'animation: Diaporama / Visualiser... avancer: Barre d'espace reculer: p

© A

lexa

ndre

Par

odi -

200

5

SP adresse sommet

disponible

BP adresse de retournb paramètresparamètre n°1 paramètres

R0 paramètre n°2...

paramètre n°n

EXEMPLE DE FRAME juste après L'APPEL

JSR @adresse_du_sous_prog // appelle le sous-prog.

Page 59: © Alexandre Parodi - 2005 TITRE SOUS-PROGRAMME voir l'animation: Diaporama / Visualiser... avancer: Barre d'espace reculer: p

© A

lexa

ndre

Par

odi -

200

5

disponible

SP adresse sommet données localesdonnées locales

... donnéesvariable locale n° 2 localesvariable locale n°.1

BP adresse de retournb paramètresparamètre n°1 paramètres

R0 paramètre n°2...

paramètre n°n

EXEMPLE DE FRAME D'EXECUTION

LDW BP,SP ; // BP pointe sur adresse retourADQ #10, SP ; // réserve 5 mots sur la pile

"Base Pointer"Registre de pointage

de base de pile.e.g. R1

Page 60: © Alexandre Parodi - 2005 TITRE SOUS-PROGRAMME voir l'animation: Diaporama / Visualiser... avancer: Barre d'espace reculer: p

© A

lexa

ndre

Par

odi -

200

5

disponible

SP adresse sommet données localesdonnées locales

... donnéesvariable locale n° 2 localesvariable locale n°.1

BP adresse de retournb paramètresparamètre n°1 paramètres

R0 paramètre n°1 paramètre n°2...

paramètre n°n

ACCES PARAMETRE (mode indexé: déplacement > 0)

LDW R0,(BP)4 ; // charge le paramètre n°1 dans R0

+4

BP + 4pointe sur le

paramamètre n°1

Page 61: © Alexandre Parodi - 2005 TITRE SOUS-PROGRAMME voir l'animation: Diaporama / Visualiser... avancer: Barre d'espace reculer: p

© A

lexa

ndre

Par

odi -

200

5

disponible

SP adresse sommet données localesdonnées locales

... donnéesvariable locale n° 2 localesvariable locale n°.1

BP adresse de retournb paramètresparamètre n°1 paramètres

R0 paramètre n°1 paramètre n°2...

paramètre n°n

ACCES PARAMETRE (sans mode indexé !)

LDW R0,BP ; // charge BP dans R0ADQ 4, R0; // ajoute 4 à R0, R0 pointe sur param. 1LDW R0, (R0); // charge paramètre n°1 dans R0

+4

Page 62: © Alexandre Parodi - 2005 TITRE SOUS-PROGRAMME voir l'animation: Diaporama / Visualiser... avancer: Barre d'espace reculer: p

© A

lexa

ndre

Par

odi -

200

5

disponible

SP adresse sommet données localesdonnées locales

... donnéesvariable locale n° 2 localesvariable locale n°.1

BP adresse de retournb paramètresparamètre n°1 paramètres

R0 variable n°2 paramètre n°2...

paramètre n°n

ACCES VARIABLE LOCALE(mode indexé: déplacement < 0 )

LDW R0,(BP)-4 ; // charge la variable n°2 dans R0

-4

Page 63: © Alexandre Parodi - 2005 TITRE SOUS-PROGRAMME voir l'animation: Diaporama / Visualiser... avancer: Barre d'espace reculer: p

© A

lexa

ndre

Par

odi -

200

5

disponible

SP adresse sommet données localesdonnées locales

... donnéesvariable locale n° 2 localesvariable locale n°.1

BP adresse de retournb paramètresparamètre n°1 paramètres

R0 'p' paramètre n°2...

paramètre n°n

ACCES INDIRECT (mode indirect pré-indexé)

+6

LDW R0,*(BP)6 ; // charge M[M[BP+6]] dans R0

'p' 'i' 'a' 'n' 'o' NUL

Chaîne de caractères"piano" ailleurs

en mémoire.

Page 64: © Alexandre Parodi - 2005 TITRE SOUS-PROGRAMME voir l'animation: Diaporama / Visualiser... avancer: Barre d'espace reculer: p

© A

lexa

ndre

Par

odi -

200

5

disponible

SP adresse sommet données localesdonnées locales

... donnéesvariable locale n° 2 localesvariable locale n°.1

BP adresse de retournb paramètresparamètre n°1 paramètres

R0 'p' paramètre n°2...

paramètre n°n

ACCES INDIRECT (sans mode indirect pré-indexé !)

+6

LDW R0,BP ; // charge BP dans R0ADQ 6, R0 ; // ajoute 6 à R0; R0 pointe sur param.2LDB R0, (R0); // charge octet n°0 dans R0

'p' 'i' 'a' 'n' 'o' NUL

Page 65: © Alexandre Parodi - 2005 TITRE SOUS-PROGRAMME voir l'animation: Diaporama / Visualiser... avancer: Barre d'espace reculer: p

© A

lexa

ndre

Par

odi -

200

5

disponible

SP adresse sommet données localesdonnées locales

... donnéesvariable locale n° 2 localesvariable locale n°.1

BP adresse de retournb paramètresparamètre n°1 paramètres

R0 'n' paramètre n°2...

paramètre n°n

ACCES INDIRECT PRE & POST-INDEXE (pré (+6) et post (+5) indexé ...)

+6

LDW R0,(BP)6 ; // charge paramètre n°2 dans R0LDB R0,(R0)5 ; // charge octet n°5 de la chaîne ds R0

'p' 'i' 'a' 'n' 'o' NUL

+5

Page 66: © Alexandre Parodi - 2005 TITRE SOUS-PROGRAMME voir l'animation: Diaporama / Visualiser... avancer: Barre d'espace reculer: p

© A

lexa

ndre

Par

odi -

200

5

disponible

SP adresse sommet données localesdonnées locales

... donnéesvariable locale n° 2 localesvariable locale n°.1

BP adresse de retournb paramètresparamètre n°1 paramètres

R0 'n' paramètre n°2...

paramètre n°n

ACCES INDIRECT PRE & POST-INDEXE (sans mode indexé !)

+6

LDW R0,BP ; // charge BP dans R0ADQ 6, R0 ; // ajoute 6 à R0; R0 pointe sur param.2LDW R0, (R0); // charge paramètre n°2 dans R0ADQ 5, R0 ; // ajoute 5 à R0; R0 pointe sur 'n'LDB R0, (R0); // charge octet n°5 de la chaîne ds R0

'p' 'i' 'a' 'n' 'o' NUL

+5

Page 67: © Alexandre Parodi - 2005 TITRE SOUS-PROGRAMME voir l'animation: Diaporama / Visualiser... avancer: Barre d'espace reculer: p

© A

lexa

ndre

Par

odi -

200

5

adresse de retour empilé parétat de retour l'interrupt.

SP adresse sommet données localesdonnées locales

... donnéesvariable locale n° 2 localesvariable locale n°.1

BP adresse de retournb paramètresparamètre n°1 paramètres

R0 paramètre n°2...

paramètre n°n

PILE juste après INTERRUPTION

En cas d'interruption,les données locales

sont protégées !

En cas d'interruption,les données locales

sont protégées !

Page 68: © Alexandre Parodi - 2005 TITRE SOUS-PROGRAMME voir l'animation: Diaporama / Visualiser... avancer: Barre d'espace reculer: p

© A

lexa

ndre

Par

odi -

200

5

disponible

SP adresse sommet données localesdonnées locales

... donnéesvariable locale n° 2 localesvariable locale n°.1

BP adresse de retournb paramètresparamètre n°1 paramètres

R0 valeur retournée paramètre n°2...

paramètre n°n

EXEMPLE DE FRAME juste avant le RETOUR

LDW R0, ... ; // charge la valeur à retourner dans R0LDW SP, BP ; // SP pointe sur l'adresse de retour

Page 69: © Alexandre Parodi - 2005 TITRE SOUS-PROGRAMME voir l'animation: Diaporama / Visualiser... avancer: Barre d'espace reculer: p

© A

lexa

ndre

Par

odi -

200

5

disponible

SP adresse sommet données localesdonnées locales

... donnéesvariable locale n° 2 localesvariable locale n°.1

BP adresse de retournb paramètresparamètre n°1 paramètres

R0 valeur retournée paramètre n°2...

paramètre n°n

FRAME juste après le RETOUR

RTS // retourne du sous-programme

Page 70: © Alexandre Parodi - 2005 TITRE SOUS-PROGRAMME voir l'animation: Diaporama / Visualiser... avancer: Barre d'espace reculer: p

© A

lexa

ndre

Par

odi -

200

5

disponible

SP adresse sommet données localesdonnées locales

... donnéesvariable locale n° 2 localesvariable locale n°.1

BP adresse de retournb paramètresparamètre n°1 paramètres

R0 valeur retournée paramètre n°2...

paramètre n°n

PILE juste après nettoyage

LDW R2, (SP)2 ; // R2 = nb de paramSHL R2, R2 ; // R2 = taille de la zone de param.ADQ 2, R2 : // y compris le mot nb_param ...ADD R2, SP, SP ; // SP pointe en dessous

Page 71: © Alexandre Parodi - 2005 TITRE SOUS-PROGRAMME voir l'animation: Diaporama / Visualiser... avancer: Barre d'espace reculer: p

© A

lexa

ndre

Par

odi -

200

5

FIN

FIN DE LA PRESENTATION

Page 72: © Alexandre Parodi - 2005 TITRE SOUS-PROGRAMME voir l'animation: Diaporama / Visualiser... avancer: Barre d'espace reculer: p

© A

lexa

ndre

Par

odi -

200

5

FIN

FIN DE LA PRESENTATION