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

Simulation d'un chronomètre

Dans cet exemple, nous allons simuler un chronomètre en nous basant sur la vitesse d'exécution du simulateur. Les interruptions FIQ sont réglées de manière à se déclencher tous les 12 cycles; par ailleurs, la vitesse d'exécution du simulateur est réglée à 40 ms / cycle. Par conséquent, la durée écoulée entre deux interruptions sera de 12*40=480 millisecondes. Nous utilisons cela pour chronométrer une durée, en tenant compte des minutes, secondes et millisecondes.

Attention à régler correctement les paramètres du simulateur avant de lancer la simulation!

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

; ATTENTION : pour fonctionner, ce code suppose que les paramètres de simulation ; suivants sont définis : ; - Interruption de type FIQ ; - Tous les 12 cycles, sauf le premier (5 cycles) ; - Vitesse d'exécution : 40 ms ; - La vue des registres doit être en mode décimal (signé ou non) ; Section de la table des vecteurs d'interruption SECTION INTVEC B main NOP NOP NOP NOP NOP NOP LDR PC, =miseajourTemps ; Une autre façon de charger la bonne adresse dans PC minutes ASSIGN32 0 ; Compteurs pour le temps secondes ASSIGN32 0 millisec ASSIGN32 0 millisecparinterrupt ASSIGN32 480 ; Combien de temps s'écoule-t-il entre 2 interruptions? ; Section du code principal SECTION CODE miseajourTemps ; Code de l'interruption ; Nous ne pouvons utiliser que les registres R8 à R13, sinon il nous ; faudrait sauvegarder les autres registres sur la pile avant de les utiliser! LDR R11, =minutes LDM R11, {R8,R9,R10,R12} ; On charge tous les compteurs d'un seul coup ; LDM est l'équivalent d'un POP, mais en utilisant ; un autre registre que SP ADD R10, R10, R12 ; On ajoute le nombre de ms écoulées ; depuis la dernière interruption CMP R10, #1000 ; Est-ce qu'on est à + de 1000 ms? SUBGE R10, R10, #1000 ; Si oui, on soustrait 1000 ms à ce compteur ADDGE R9, R9, #1 ; Et on ajoute 1 au compteur de secondes CMP R9, #60 ; Est-ce qu'on est à + de 60 secondes? SUBGE R9, R9, #60 ; Si oui, on soustrait 60 à ce compteur ADDGE R8, R8, #1 ; Et on ajoute 1 au compteur de minutes STM R11, {R8,R9,R10} ; On écrit en mémoire tous les compteurs ; STM est l'équivalent d'un PUSH, mais avec un registre ; potentiellement autre que SP SUBS PC, LR, #4 ; On revient de l'interruption main ; Le main ne fait rien d'autre qu'attendre B main SECTION DATA

Instruction courante

Mémoire

Suivre PC
Cycle courant :