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

Simulation d'une interface réseau

Simulons une interaction avec une interface réseau (nous envoyant du texte)

Nous supposons que la carte réseau déclenche une interruption de type IRQ à chaque fois qu'un nouveau caractère est reçu. Cette interruption copie ce caractère dans un espace mémoire pré alloué. Ceci constitue un bon exemple de comment sauvegarder et restaurer les registres lors d'une interruption.

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 ; Table des vecteurs d'interruption B main NOP NOP NOP NOP NOP B moninterruptionIRQ NOP donnees ASSIGN8 "Je pense qu'il y a un marche mondial pour quelque chose comme cinq ordinateurs.", 0 position ASSIGN32 0 SECTION CODE moninterruptionIRQ ; Préparation de la pile ; Question : puisque les 2 lignes suivantes seront toujours les mêmes ; (autrement dit, l'emplacement de pileIRQ ne change pas et il faut toujours ajouter 32), ; pourquoi ne peut-on pas le faire dans le "main"? LDR SP, =pileIRQ ADD SP, SP, #32 PUSH {R0-R3} ; Sauvegarde des registres utilisés LDR R0, =donnees LDR R1, =donneesRecues LDR R2, position LDRB R3, [R0, R2] ; LDRB parce qu'on ne lit qu'un seul octet CMP R3, #0 ; Si la valeur lue est 0, c'est qu'on a atteint la fin de la chaîne BEQ finInterruption STRB R3, [R1, R2] ADD R2, R2, #1 ; On passe au caractère suivant (qui sera copié lors de la prochaine interruption) STR R2, position finInterruption POP {R0-R3} ; Restauration des registres ADDS PC, LR, #-4 ; N'importe quelle opération arithmétique avec PC et S est valable main ; Rien de particulier ici, simplement une boucle infinie ADD R1, R1, #1 ADD R2, R2, #2 ADD R3, R3, #3 ADD R4, R4, #4 ADD R5, R5, #5 B main SECTION DATA pileIRQ ALLOC32 8 donneesRecues ALLOC8 256

Instruction courante

Mémoire

Suivre PC
Cycle courant :