1 / 72

TITRE

SOUS-PROGRAMME. voir l'animation: Diaporama / Visualiser ... avancer : Barre d'espace reculer : p. TITRE. Un sous-programme ("subroutine" ou "subprogram") est une séquence d'instructions que l'on veut pouvoir utiliser plusieurs fois. DEFINITION.

sylvie
Download Presentation

TITRE

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


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

  2. 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. Signifie ici: "saute vers" "branche sur" Adresse de retour Adresse du sous-programme APPEL & RETOUR

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

  6. 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 de retour 1 Adresse de retour 2 Adresse du sous-programme Comment savoir où revenir ? - ou - APPELS CONSECUTIFS

  9. Pour retourner à l'instruction suivantl'appel dans le programme principal, il faut avoir d'abord sauvegardé son adresse. Elle s'appelle "adresse de retour" ADRESSE DE RETOUR

  10. 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. CE QUI DEVRAIT ARRIVER Adresse de retour 1 Adresse de retour 2 Adresse du sous-programme APPELS IMBRIQUES

  13. 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.  On sauvegarde l'adresse de retour sur la pile. SAUVEGARDE DE L'ADRESSE DE RETOUR

  15. 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.  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 d’@ 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'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. JSR opérande MODES D'ADRESSAGE DE JSR

  22. 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. 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. 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. 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. Dans les langages non-objet, le sous-programme est souvent à une adresse fixe connue à l'avance. JSR @SPRG_ADDRESS ;// appelle sprog d'adresse SPRG_ADDRESS APPEL à ADRESSE FIXE(mode direct)

  45. AVANT Signifie ici: "pointe sur" "est l'adresse de" JSR @SPRG_ADDRESS

  46. APRES JSR @SPRG_ADDRESS

  47. 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 FIXEsans 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. Le champ boost pointe sur le sous-programme R4 pointe sur l'objet +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. 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 METHODEsans mode indirect pré-indexé !

More Related