La présentation est en train de télécharger. S'il vous plaît, attendez

La présentation est en train de télécharger. S'il vous plaît, attendez

SOUS-PROGRAMME TITRE voir l'animation: Diaporama / Visualiser ...

Présentations similaires


Présentation au sujet: "SOUS-PROGRAMME TITRE voir l'animation: Diaporama / Visualiser ..."— Transcription de la présentation:

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

2 ("subroutine" ou "subprogram") est une séquence d'instructions
Un sous-programme ("subroutine" ou "subprogram") est une séquence d'instructions que l'on veut pouvoir utiliser plusieurs fois. DEFINITION

3 SEQUENCE A REUTILISER

4 Adresse du sous-programme
Adresse de retour Adresse du sous-programme Signifie ici: "saute vers" "branche sur" APPEL & RETOUR

5 Le saut au sous-programme ("Jump to SubRoutine") est souvent appelé
Appel au sous-programme ("Call"). APPEL

6 appelle le sous-programme "boost"
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. toto.boost() ; appelle le sous-programme "boost" de l'objet "toto". USAGE EN POO

7 UTILISATION MULTIPLE

8 Adresse du sous-programme
Adresse de retour 1 Adresse de retour 2 Adresse du sous-programme Comment savoir où revenir ? - ou - APPELS CONSECUTIFS

9 l'instruction suivant l'appel dans le programme principal,
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" ADRESSE DE RETOUR

10 Adresse du sous-programme
Adresse de retour 1 Adresse de retour 2 Adresse du sous-programme Mémorisation retour : Adresse de retour 2 Adresse de retour 1 APPELS CONSECUTIFS

11 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 ? SAUVEGARDE DE L'ADRESSE DE RETOUR

12 Adresse du sous-programme
CE QUI DEVRAIT ARRIVER Adresse de retour 1 Adresse de retour 2 Adresse du sous-programme APPELS IMBRIQUES

13 IMBRICATION +MEMORISATION
CE QUI ARRIVE Adresse de retour 1 Adresse de retour 2 Adresse du sous-programme Mémorisation retour : Adresse de retour 2 Adresse de retour 1 IMBRICATION +MEMORISATION

14 SAUVEGARDE DE L'ADRESSE DE RETOUR
 On sauvegarde l'adresse de retour sur la pile. SAUVEGARDE DE L'ADRESSE DE RETOUR

15 Adresse du sous-programme
Adresse de retour 1 Adresse de retour 2 Adresse du sous-programme Adresse de retour 2 L'adresse de retour est pointée Adresse de retour 1 IMBRICATION + PILE

16 RE-ENTRANCE et RECURSIVITE
 Ceci permet des sous-programmes ré-entrants (qui s'appellent eux-mêmes) et donc récursifs ! Mais la pile est limitée ... Autre solution : liste chaînée (rare car pas adaptée ici: pas d'avantage, compliquée, volumineuse et moins rapide) RE-ENTRANCE et RECURSIVITE

17 Un appel à sous-programme :  empile l'adresse de retour ;
 saute à la 1ère instruction du sous-programme . ACTIONS D'UN APPEL

18 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 basé prédecrémenté SP = Stack //Pointer JEA (R1) ; // saute au sous-prog. pointé par R1 PROGRAMME D'APPEL

19 Le saut au sous-programme est effectué par l'instruction:
"Jump to SubRoutine" JSR INSTRUCTION JSR

20 l'adresse de sa 1ère instruction.
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. OPERANDE DE JSR

21 MODES D'ADRESSAGE DE JSR
JSR opérande MODES D'ADRESSAGE DE JSR

22  empile l'adresse de retour ;  saute à l'instruction de l'opérande .
JSR:  empile l'adresse de retour ;  saute à l'instruction de l'opérande . ACTIONS DE JSR

23 AVANT Signifie ici: "pointe sur" "est l'adresse de" JSR (R1)

24 AVANT JSR (R1)

25 M[SP]  adresse de retour;
EMPILAGE ADRESSE DE RETOUR SP  SP - 2 ; M[SP]  adresse de retour; JSR (R1)

26 EMPILAGE ADRESSE DE RETOUR SP  SP - 2 ; M[SP]  PC; JSR (R1)

27 SAUT A LA 1ère INSTRUCTION
IR  M[adresse ss-prog] , PC  adresse ss-prog # 2 ; JSR (R1)

28 SAUT A LA 1ère INSTRUCTION
IR  M[R1] , PC  R1 # 2 ; JSR (R1)

29 APRES JSR (R1)

30 EXECUTION SOUS-PROGRAMME 1ère instruction

31 EXECUTION SOUS-PROGRAMME 2ème instruction

32 EXECUTION SOUS-PROGRAMME ... instruction

33 Le retour de sous-programme :  dépile l'adresse de retour ;
 saute à l'instruction à cette adresse . ACTIONS DU RETOUR

34 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 RETOUR DE SOUS-PROGRAMME

35 Le retour du sous-programme est effectué par l'instruction:
”ReTurn from Subroutine" RTS IINSTRUCTION RTS

36  dépile l'adresse de retour ;  saute à l'instruction suivant JSR .
RTS:  dépile l'adresse de retour ;  saute à l'instruction suivant JSR . ACTIONS DE RTS

37 AVANT Signifie ici: "pointe sur" "est l'adresse de" RTS

38 AVANT RTS

39 DEPILAGE ADRESSE DE RETOUR PC  adresse de retour , SP  SP # 2 ; RTS

40 DEPILAGE ADRESSE DE RETOUR PC  M[SP] , SP  SP # 2 ; RTS

41 PREPARATION INSTRUCTION SUIVANTE IR  M[PC] , PC  PC # 2 ; RTS

42 APRES suivante

43 APRES suivante

44 APPEL à ADRESSE FIXE (mode direct)
Dans les langages non-objet, le sous-programme est souvent à une adresse fixe connue à l'avance. ;// appelle sprog d'adresse SPRG_ADDRESS APPEL à ADRESSE FIXE (mode direct)

45 AVANT Signifie ici: "pointe sur" "est l'adresse de"

46 APRES

47 APPEL à ADRESSE FIXE sans 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 APPEL à ADRESSE FIXE sans mode direct !

48 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 ! APPEL de METHODE

49 EXEMPLE SIMPLE D'APPEL DE METHODE (mode indirect pré-indexé)
R4 pointe sur l'objet Le champ boost pointe sur le sous-programme +6 R4 + 6 pointe sur le champ boost de l'objet JSR *(R4)6 ; // appelle boost de l'objet pointé par R4 EXEMPLE SIMPLE D'APPEL DE METHODE (mode indirect pré-indexé)

50 EXEMPLE D'APPEL DE METHODE sans 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 EXEMPLE D'APPEL DE METHODE sans mode indirect pré-indexé !

51 Le nombre de paramètres s'appelle "arité".
Le fonctionnement d'un sous-programme peut dépendre de paramètres ("arguments" ou "parameters") : toto.boost(5, "piano") ;  : entier ;  "piano" : chaîne de caractères. Le nombre de paramètres s'appelle "arité". PARAMETRES

52 Ils peuvent être représentés par :
 leur valeur (simple et rapide: C, C++, ...) ;  leur adresse (Var de Pascal ...) ; PASSAGE

53  dans des registres (simple et rapide) ;
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é) ; MECANISMES DE PASSAGE

54 Cette information est stockée préalablement au retour :
Un sous-programme qui retourne une information par la gauche s'appelle une fonction ("function") ; Cette information est stockée préalablement au retour :  dans un registre précis (e.g. R0: courant);  sur la pile ; FONCTION

55 La configuration de la pile s'appelle "stack frame" ou
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. STACK FRAME

56 PILE AVANT APPEL

57 EXEMPLE DE FRAME juste avant L'APPEL
LDQ 0, R0 ; // initialise R0 ... STW Ri,-(SP) ; // empile un paramètre depuis Ri ADQ 1, R0 ; // compte le paramètre STW R0,-(SP) ; // empile le nb de param. EXEMPLE DE FRAME juste avant L'APPEL

58 EXEMPLE DE FRAME juste après L'APPEL
// appelle le sous-prog. EXEMPLE DE FRAME juste après L'APPEL

59 EXEMPLE DE FRAME D'EXECUTION
LDW BP,SP ; // BP pointe sur adresse retour ADQ #10, SP ; // réserve 5 mots sur la pile "Base Pointer" Registre de pointage de base de pile. e.g. R1 EXEMPLE DE FRAME D'EXECUTION

60 ACCES PARAMETRE (mode indexé: déplacement > 0)
LDW R0,(BP)4 ; // charge le paramètre n°1 dans R0 +4 BP + 4 pointe sur le paramamètre n°1 ACCES PARAMETRE (mode indexé: déplacement > 0)

61 ACCES PARAMETRE (sans mode indexé !)
LDW R0,BP ; // charge BP dans R0 ADQ 4, R0; // ajoute 4 à R0, R0 pointe sur param. 1 LDW R0, (R0); // charge paramètre n°1 dans R0 +4 ACCES PARAMETRE (sans mode indexé !)

62 ACCES VARIABLE LOCALE (mode indexé: déplacement < 0 )
LDW R0,(BP)-4 ; // charge la variable n°2 dans R0 -4 ACCES VARIABLE LOCALE (mode indexé: déplacement < 0 )

63 ACCES INDIRECT (mode indirect pré-indexé)
LDW R0,*(BP)6 ; // charge M[M[BP+6]] dans R0 +6 Chaîne de caractères "piano" ailleurs en mémoire. ACCES INDIRECT (mode indirect pré-indexé)

64 ACCES INDIRECT (sans mode indirect pré-indexé !)
LDW R0,BP ; // charge BP dans R0 ADQ 6, R0 ; // ajoute 6 à R0; R0 pointe sur param.2 LDB R0, (R0); // charge octet n°0 dans R0 +6 ACCES INDIRECT (sans mode indirect pré-indexé !)

65 ACCES INDIRECT PRE & POST-INDEXE (pré (+6) et post (+5) indexé ...)
LDW R0,(BP)6 ; // charge paramètre n°2 dans R0 LDB R0,(R0)5 ; // charge octet n°5 de la chaîne ds R0 +6 +5 ACCES INDIRECT PRE & POST-INDEXE (pré (+6) et post (+5) indexé ...)

66 ACCES INDIRECT PRE & POST-INDEXE (sans mode indexé !)
LDW R0,BP ; // charge BP dans R0 ADQ 6, R0 ; // ajoute 6 à R0; R0 pointe sur param.2 LDW R0, (R0); // charge paramètre n°2 dans R0 ADQ 5, R0 ; // ajoute 5 à R0; R0 pointe sur 'n' LDB R0, (R0); // charge octet n°5 de la chaîne ds R0 +6 +5 ACCES INDIRECT PRE & POST-INDEXE (sans mode indexé !)

67 PILE juste après INTERRUPTION
En cas d'interruption, les données locales sont protégées ! PILE juste après INTERRUPTION

68 EXEMPLE DE FRAME juste avant le RETOUR
LDW R0, ... ; // charge la valeur à retourner dans R0 LDW SP, BP ; // SP pointe sur l'adresse de retour EXEMPLE DE FRAME juste avant le RETOUR

69 FRAME juste après le RETOUR
RTS // retourne du sous-programme FRAME juste après le RETOUR

70 PILE juste après nettoyage
LDW R2, (SP)2 ; // R2 = nb de param SHL R2, R2 ; // R2 = taille de la zone de param. ADQ 2, R : // y compris le mot nb_param ... ADD R2, SP, SP ; // SP pointe en dessous PILE juste après nettoyage

71 FIN DE LA PRESENTATION FIN

72 FIN DE LA PRESENTATION FIN


Télécharger ppt "SOUS-PROGRAMME TITRE voir l'animation: Diaporama / Visualiser ..."

Présentations similaires


Annonces Google