Accueil
Démo
Exercices formatifs
Travaux pratiques
Simulation libre
Sessions sauvegardées

Appel de fonction avec paramètres et pile

Préservons le contenu des registres modifiés par une fonction lorsqu'on l'appelle. De plus, pensons à préserver le registre modifié par l'appel d'une fonction.

Registre Généraux (User)

Nom Valeur
R0
R1
R2
R3
R4
R5
R6
R7
R8
R9
R10
R11
R12
R13 (sp)
R14 (lr)
R15 (pc)

Registre Généraux (FIQ)

Nom Valeur
R0
R1
R2
R3
R4
R5
R6
R7
R8 FIQ
R9 FIQ
R10 FIQ
R11 FIQ
R12 FIQ
R13 FIQ (sp)
R14 FIQ (lr)
R15 (pc)

Registre Généraux (IRQ)

Nom Valeur
R0
R1
R2
R3
R4
R5
R6
R7
R8
R9
R10
R11
R12
R13 IRQ (sp)
R14 IRQ (lr)
R15 (pc)

Registre Généraux (SVC)

Nom Valeur
R0
R1
R2
R3
R4
R5
R6
R7
R8
R9
R10
R11
R12
R13 SVC (sp)
R14 SVC (lr)
R15 (pc)

État courant

 CPSRSPSR
Negatif (N)
Zero (Z)
Retenue (C)
Dépassement (V)
Ignore IRQ
Ignore FIQ

Configurations

Interruptions

Activer
Type
 cycles
 cycles (premier)
Vitesse d'exécution :  ms

Français

SECTION INTVEC B main SECTION CODE main LDR SP, =maPile ; Préparons une pile (de 16 octets) ADD SP, SP, #16 ; La pile descend, donc il faut commencer à la fin B debut NOP debut MOV R1, #2 PUSH {R0} ; Sauvegarde R0 MOV R0, #8 BL Triple ; Appel de fonction MOV R2, R0 POP {R0} ; Restaure R0 CMP R1, R2 fin B fin ; Espace vide pour que le code de la fonction débute à l'adresse 0xC0 ; comme dans les notes. tmp2 ALLOC32 5 Triple ; paramètre: R0 ; valeur de retour: R0 PUSH {R1,LR} ; Sauvegarde R1 et LR ADD R1, R0, R0 ; Calcule 3*R0 en utilisant des additions. ADD R1, R1, R0 MOV R0, R1 ; Place résultat dans R0 (valeur de retour) POP {R1,LR} ; Restaure R1 et LR BX LR ; Fonction terminée SECTION DATA maPile ALLOC32 4

Instruction courante

Mémoire

Suivre PC
Cycle courant :