Filtration sur disque rotatif | Decapage par projection d'abrasifs
Electronique numerique | Mecanique des fluides | Resistance des materiaux | Calculs numeriques
Tutoriaux ANSYS | Tutoriaux CATIA

Électronique numérique

 

4.5. Sous-programmes et interruptions

4 .5.1 . Sous-programmes

Un sous- programme est un programme fait pour être exécuté à partir d'un autre programme. Il doit donc posséder une adresse physique ou symbolique (identificateur). Il peut posséder un ou plusieurs arguments d'entrée ou de sortie.

Un sous programme possède différentes caractéristiques:

- relogeable, c'est-à-dire que son adresse de base peut se placer n'importe où en mémoire (zone autorisée bien sûr),

- re-entrant, s'il peut être interrompu et relancé par le programme qui l'a appelé,

- récursif quand il peut faire appelle à lui-même.

Le 68000 a sa disposition deux instructions lui permettant de gérer les sous-programmes: JSR et RTS. Comment le microprocesseur s'y prend-t-il pour exécuter un sous-programme et revenir au programme qui l'a appelé?

Il faut rappeler que le registre PC, registre Compteur Programme contient lors de l'exécution d'un programme, l'adresse de la prochaine instruction à exécuter. Juste avant l'exécution du JSR, le PC contient donc l'adresse qui le suit. Cette adresse est sauvegardée sur la pile puis l'exécution du programme continue à l'adresse spécifiée dans l'instruction JSR (le PC contient alors l'adresse indiquée par le JSR).

Lorsque le sous-programme prend fin, c'est- dire lorsque l'instruction RTS est exécutée, la dernière valeur pointée par la pile (celle avant l'exécution du JSR) est transférée dans le registre PC. La pile est donc modifiée. Il faut donc nécessairement que la pile pointe sur cette adresse de retour, d'où la nécessite de dépiler toutes les valeurs empilées avant l'exécution de l'instruction RTS.

Les informations entre le programme principal et le sous-programme sont échangées au travers d'arguments qui sont passés de différentes manières: par registres, par des adresses mémoires, par la pile.

L'exemple qui suit illustre l'appel d'un sous-programme à partir d'un programme principal, le passage de paramètre se faisant au travers du registre D0.

 

Adresse physique Instructions Commentaires

VAR                          EQU          $2000                    
CODE_ASCII             EQU          $2001                   
SOUS_PROG            EQU           $2002                     

                                ORG          $1000             


*                               Programme principal
*                               ===================

Adresse mémoire contenant la variable

Adresse mémoire de stockage du résultat

Adresse de début du sous-prog

Adresse de début du prog principal en HEX

 

$1000

                                 MOVE.B   VARIABLE,D0        

Transfert du contenu de VAR dans D0

$1004

                                 JSR          SOUS_PROG          

Appel du sous-programme

$1008

                                 MOVE       D0,CODE_ASCII       

Transfert du contenu de D0 à l'adresse symbolique CODE_ASCII

$100C

                                 STOP        #$2700                 

Arrêt du programme

                                 ORG         SOUS_PROG           
*                                sous-programme
*                                ====================

Adresse de début du sous prog

$2002

                                 CMP.B     #$0A,D0

Comparaison de la valeur de D0 à $0A (D0-$0A)

$2006

                                  BCS         SAUT

On fait un branchement à SAUT si la carry passe à 1 (si D0<$0A)

$2000

                                 ADDI.B    #$07,D0

Addition de $07 à D0 (D0=D0+$07)

$200E

SAUT                          ADDI.B     #$30,D0

Addition de $30 à D0 (D0=D0+$30)

$2012

                                RTS

Retour au programme principal

 

                                  END          SOUS_PROG End of assembly

 

1. Avant l'exécution de l'instruction JSR:

PC=$001008                 A7=$00A00000

2. Après l' exécution de l' instruction JSR: il y a sauvegarde de l 'adresse de retour $001008 sur la pile

PC=$002002                 A7=A7-7=$009FFFFC                 $009FFFFC=$001008

3. Avant l' exécution de l' instruction RTS:

PC=$002012                 A7=$009FFFFC

4. Après l' exécution de l' instruction RTS: il y a transfert de la dernière valeur pointée par la pile dans le compteur programme PC

PC=$001008                 A7=A7+4=$00A00000

 

 

 

11/11

 

Qui je suis | Plan du site | Me contacter