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

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

Présentations similaires


Présentation au sujet: "© Alexandre Parodi - 2005 TITRE SOUS-PROGRAMME voir l'animation: Diaporama / Visualiser... avancer: Barre d'espace reculer: p."— Transcription de la présentation:

1

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

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

4 © Alexandre Parodi SEQUENCE A REUTILISER

5 © Alexandre Parodi APPEL & RETOUR Adresse de retour Adresse du sous-programme Signifie ici: "saute vers" "branche sur" Signifie ici: "saute vers" "branche sur"

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

7 © Alexandre Parodi 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() ;

8 © Alexandre Parodi UTILISATION MULTIPLE

9 © Alexandre Parodi APPELS CONSECUTIFS Adresse de retour 1 Adresse du sous-programme Adresse de retour 2 Comment savoir où revenir ? - ou - Comment savoir où revenir ? - ou -

10 © Alexandre Parodi 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"

11 © Alexandre Parodi APPELS CONSECUTIFS Adresse de retour 1 Adresse du sous-programme Adresse de retour 2 Mémorisation retour : Adresse de retour 1 Adresse de retour 2

12 © Alexandre Parodi 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 ?

13 © Alexandre Parodi APPELS IMBRIQUES Adresse de retour 1 Adresse du sous-programme Adresse de retour 2 CE QUI DEVRAIT ARRIVER

14 © Alexandre Parodi Adresse de retour 1 IMBRICATION +MEMORISATION Adresse de retour 1 Adresse du sous-programme Adresse de retour 2 Mémorisation retour : Adresse de retour 2 CE QUI ARRIVE

15 © Alexandre Parodi SAUVEGARDE DE L'ADRESSE DE RETOUR On sauvegarde l'adresse de retour sur la pile.

16 © Alexandre Parodi IMBRICATION + PILE 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ée

17 © Alexandre Parodi 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...

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

19 © Alexandre Parodi 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 basé prédecrémenté SP = Stack //Pointer JEA (R1) ; // saute au sous-prog. pointé par R1

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

21 © Alexandre Parodi 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.

22 © Alexandre Parodi MODES D'ADRESSAGE DE JSR JSR opérande

23 © Alexandre Parodi ACTIONS DE JSR JSR: empile l'adresse de retour ; saute à l'instruction de l'opérande.

24 © Alexandre Parodi JSR (R1) AVANT Signifie ici: "pointe sur" "est l'adresse de" Signifie ici: "pointe sur" "est l'adresse de"

25 © Alexandre Parodi JSR (R1) AVANT

26 © Alexandre Parodi JSR (R1) EMPILAGE ADRESSE DE RETOUR SP SP - 2 ; M[SP] adresse de retour;

27 © Alexandre Parodi JSR (R1) EMPILAGE ADRESSE DE RETOUR SP SP - 2 ; M[SP] PC;

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

29 © Alexandre Parodi JSR (R1) SAUT A LA 1ère INSTRUCTION IR M[R1], PC R1 # 2 ;

30 © Alexandre Parodi JSR (R1) APRES

31 © Alexandre Parodi ère instruction EXECUTION SOUS-PROGRAMME

32 © Alexandre Parodi ème instruction EXECUTION SOUS-PROGRAMME

33 © Alexandre Parodi instruction EXECUTION SOUS-PROGRAMME

34 © Alexandre Parodi ACTIONS DU RETOUR Le retour de sous-programme : dépile l'adresse de retour ; saute à l'instruction à cette adresse.

35 © Alexandre Parodi RETOUR DE SOUS-PROGRAMME Une instruction spéciale n'est pas nécessaire ! LDW R1,(SP)+ ; // dépile l'adresse de retour dans R1 // jincrémente le SP JEA (R1) ; // saute à l'instruction de retour

36 © Alexandre Parodi IINSTRUCTION RTS Le retour du sous-programme est effectué par l'instruction: ReTurn from Subroutine" RTS

37 © Alexandre Parodi ACTIONS DE RTS RTS: dépile l'adresse de retour ; saute à l'instruction suivant JSR.

38 © Alexandre Parodi RTS AVANT Signifie ici: "pointe sur" "est l'adresse de" Signifie ici: "pointe sur" "est l'adresse de"

39 © Alexandre Parodi RTS AVANT

40 © Alexandre Parodi RTS DEPILAGE ADRESSE DE RETOUR PC adresse de retour, SP SP # 2 ;

41 © Alexandre Parodi RTS DEPILAGE ADRESSE DE RETOUR PC M[SP], SP SP # 2 ;

42 © Alexandre Parodi RTS PREPARATION INSTRUCTION SUIVANTE IR M[PC], PC PC # 2 ;

43 © Alexandre Parodi suivante APRES

44 © Alexandre Parodi suivante APRES

45 © Alexandre Parodi 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

46 © Alexandre Parodi AVANT Signifie ici: "pointe sur" "est l'adresse de" Signifie ici: "pointe sur" "est l'adresse de"

47 © Alexandre Parodi APRES

48 © Alexandre Parodi 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

49 © Alexandre Parodi 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 !

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

51 © Alexandre Parodi 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

52 © Alexandre Parodi PARAMETRES Le fonctionnement d'un sous-programme peut 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é".

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

54 © Alexandre Parodi 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é) ;

55 © Alexandre Parodi FONCTION 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 ;

56 © Alexandre Parodi 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.

57 © Alexandre Parodi PILE AVANT APPEL

58 © Alexandre Parodi 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.

59 © Alexandre Parodi EXEMPLE DE FRAME juste après L'APPEL // appelle le sous-prog.

60 © Alexandre Parodi 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

61 © Alexandre Parodi 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

62 © Alexandre Parodi 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

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

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

65 © Alexandre Parodi ACCES INDIRECT (sans mode indirect pré-indexé !) +6 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

66 © Alexandre Parodi ACCES INDIRECT PRE & POST-INDEXE (pré (+6) et post (+5) indexé...) +6 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 +5

67 © Alexandre Parodi ACCES INDIRECT PRE & POST-INDEXE (sans mode indexé !) +6 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 +5

68 © Alexandre Parodi 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 !

69 © Alexandre Parodi 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

70 © Alexandre Parodi FRAME juste après le RETOUR RTS // retourne du sous-programme

71 © Alexandre Parodi 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, R2 : // y compris le mot nb_param... ADD R2, SP, SP ; // SP pointe en dessous

72 © Alexandre Parodi FIN FIN DE LA PRESENTATION

73 © Alexandre Parodi FIN FIN DE LA PRESENTATION


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

Présentations similaires


Annonces Google