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

Puissance

Développez la fonction Puissance qui calcule R0 à la puissance R1 et qui stocke le résultat dans R0. Testez votre programme avec des valeurs différentes. Par exemple, qu'arrive-t-il si le contenu de R1 est 0?

; Merci à Kevin Jobin pour sa solution!
SECTION INTVEC

B main

SECTION CODE

main
LDR SP, =maPile
ADD SP, SP, #40

; valeurs de test: essayons de calculer 2^3 
MOV R0, #2
MOV R1, #3

; appel de la fonction puissance
BL Puissance
; test qui verifie si le résultat est bien 8 (2**3)
ASSERT R0=8
B fin

Puissance
; paramètres: R0 = base, R1 = exposant 
; retourne:  R0 <= R0 ** R1  

; sauvegarde des valeurs des registres
PUSH {R1, R2} 

; cas spécial où l'exposant = 0, peu importe la base, le résultat est 1
CMP R1, #0
MOVEQ R0, #1
BEQ finFonction

; on sauvegarde notre base dans R2 
MOV R2, R0

boucle
; on décrémente R1 et on vérifie si on a terminé
SUBS R1, R1, #1 
BEQ finFonction
MUL R0, R0, R2
B boucle

finFonction
POP {R1, R2}
BX LR

fin
B fin

SECTION DATA
maPile ALLOC32 10

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 ADD SP, SP, #40 ; valeurs de test: essayons de calculer 2**3 MOV R0, #2 MOV R1, #3 ; appel de la fonction puissance BL Puissance ; test qui verifie si le résultat est bien 8 (2**3) ASSERT R0=8 B fin Puissance ; paramètres: R0 = base, R1 = exposant ; retourne: R0 <= R0 ** R1 BX LR fin B fin SECTION DATA maPile ALLOC32 10

Instruction courante

Mémoire

Suivre PC
Cycle courant :