ARCHITECTURE DES
ORDINATEURS
CHARGÉE DU COURS : MME BENOSMAN
CHAPITRE 5: INSTRUCTIONS SPÉCIALES
PLAN
Les Exceptions
Les interruptions
Signal RESET
Entrées-sorties
Instructions systèmes
INTRODUCTION
Il existe quatre types d'évènements qui peuvent interrompre l'exécution « normale » d'un
programme :
Les exceptions
Les interruptions
Les appels système (instructions SYSCALL et BREAK)
Le signal RESET
le principe général consiste à passer la main à une procédure logicielle spécialisée qui s'exécute en
mode superviseur, à qui il faut transmettre les informations minimales lui permettant de traiter le
problème.
LES EXCEPTIONS
EXCEPTIONS
Les exceptions sont des évènements "anormaux", le plus souvent liés à une erreur de
programmation, qui empêchent l'exécution correcte de l'instruction en cours.
La détection d'une exception entraîne l'arrêt immédiat de l'exécution de l'instruction
fautive.
Ainsi, on assure que l'instruction fautive ne modifie pas la valeur d'un registre visible ou de la mémoire.
Il y a 7 types d'exception dans cette version du processeur R3000 :
EXCEPTIONS
EXCEPTIONS
Le processeur doit alors passer en mode superviseur et se brancher au gestionnaire d'exceptions
qui est une routine logicielle implantée à l'adresse "0x80000080".
Toutes les exceptions étant fatales dans cette version du processeur R3000, il n'est pas nécessaire de
sauvegarder une adresse de retour car il n'y a pas de reprise de l'exécution du programme
contenant l'instruction fautive.
Le processeur doit cependant transmettre au gestionnaire d'exceptions l'adresse de l'instruction
fautive et indiquer dans le registre de cause le type d'exception détectée.
EXCEPTIONS
Lorsqu'une exception est détectée, le processeur :
Sauvegarde l'adresse de l'instruction fautive dans le registre EPC
Sauvegarde l'ancienne valeur du registre d'état SR
Passe en mode superviseur et masque les interruptions dans SR
Écrit le type de l'exception dans le registre CR
Branche à l'adresse "0x80000080".
LES INTERRUPTIONS
LES INTERRUPTIONS
Les d'interruptions matérielles sont des évènements asynchrones provenant généralement de
périphériques externes.
Elles peuvent être masquées.
Le processeur MIPS possède 6 lignes d'interruptions externes qui peuvent être masquées
globalement ou individuellement.
L'activation d'une de ces lignes est une requête d'interruption.
LES INTERRUPTIONS
Elles sont écrites dans le registre CR et sont prises en compte à la fin de l'exécution de l'instruction
en cours si elles ne sont pas masquées.
Cette requête doit être maintenue active par le périphérique tant qu'elle n'a pas été prise en compte
par le processeur
Le processeur passe alors en mode superviseur et se branche ici encore au gestionnaire
d'exceptions.
Comme il faut reprendre l'exécution du programme en cours à la fin du traitement de l'interruption, il
faut sauvegarder une adresse de retour.
LES INTERRUPTIONS
Lorsqu'une requête d'interruption non-masquée est détectée, le processeur MIPS :
Sauvegarde l'adresse de retour dans le registre EPC
Sauvegarde l'ancienne valeur du registre d'état SR
Passe en mode superviseur et masque les interruptions dans SR
Écrit qu'il s'agit d'une interruption dans le registre CR
Branche à l'adresse "0x80000080".
SIGNAL RESET
SIGNAL RESET
Le processeur MIPS possède également une ligne RESET dont l'activation, pendant au moins un cycle,
entraîne le branchement inconditionnel au logiciel d'initialisation.
Cette requête est très semblable à une septième ligne d'interruption externe avec les différences
importantes suivantes :
Elle n'est pas masquée.
Il n'est pas nécessaire de sauvegarder une adresse de retour.
Le gestionnaire de reset est implanté à l'adresse "0xBFC00000".
Dans ce cas, le processeur :
Passe en mode superviseur et masque les interruptions dans SR
Branche à l'adresse "0xBFC00000".
ENTRÉES-SORTIES
ENTRÉES-SORTIES
Pour exécuter certaines fonctions système, typiquement les entrées/sorties (lire ou écrire un
nombre, ou un caractère), il faut utiliser des appels système.
Par convention, le numéro de l’appel système est contenu dans le registre $2($v0) et son unique
argument est dans le registre $4($a0)
ENTRÉES-SORTIES
Cinq appels système sont actuellement supportés dans l’environnement de simulation :
Ecrire un entier : Il faut mettre l’entier à écrire dans le registre $4($a0) et exécuter l’appel
système numéro 1dans le registre $2 ($v0)
Typiquement, on aura par exemple :
li $4, 1234567 ; met 1234567 dans l’argument
ori $2, $0, 1 ; code de ’print_integer’
syscall ; affiche 1234567
ENTRÉES-SORTIES
Lire un entier
lire un entier consiste à exécuter l’appel système numéro 5 et récupérer le résultat dans le registre
$2.
Exemple :
ori $2, $0, 5 ; code de ’read_integer’
syscall ; $2 contient ce qui a été lu
ENTRÉES-SORTIES
Ecrire une chaîne de caractères : Une chaîne de caractères étant identifiée par un pointeur, il faut
passer ce pointeur à l’appel système numéro 4 pour l’afficher.
Exemple :
str: .asciiz "Chaîne à afficher\n"
la $4, str ; charge le pointeur dans $4
ori $2, $0, 4 ; code de ’print_string’
syscall ; affiche la chaine pointée
ENTRÉES-SORTIES
Lire une chaîne de caractères : Pour lire une chaîne de caractères, il faut un pointeur et une
longueur maximum. Il faut passer ce pointeur dans $4 et cette longueur dans $5 et exécuter l’appel
système numéro 8. Le résultat sera mis dans l’espace pointé.
Exemple :
read_str: .space 256
la $4, read_str #charge le pointeur dans $4
ori $5, $0, 255 #charge longueur max dans $5
ori $2, $0, 8 #code de ’read_string’
syscall # lit la chaîne dans l’espace ; pointé par $4
ENTRÉES-SORTIES
Quitter : L’appel système numéro 10 effectue l’exit du programme au sens du langage C.
Exemple :
ori $2, $0, 10 ; indique l’appel à exit
syscall ; quitte le prog
ENTRÉES-SORTIES
INSTRUCTIONS SYSTÈMES
INSTRUCTIONS SYSTÈMES
Instructions SYSCALL et BREAK
L'instruction SYSCALL permet à une tâche (utilisateur ou système) de demander un service au
système d'exploitation, comme par exemple effectuer une entrée-sortie.
Le code définissant le type de service demandé au système et un éventuel paramètre doivent avoir été
préalablement rangés dans des registres généraux.
L'instruction BREAK est utilisée plus spécifiquement pour poser un point d'arrêt
INSTRUCTIONS SYSTÈMES
Dans les deux cas, le processeur passe en mode superviseur et se branche au gestionnaire
d'exceptions. Ces deux instructions sont exécutables en mode utilisateur. Elles effectuent les
opérations suivantes :
Sauvegarde de l'adresse de retour dans le registre EPC
Sauvegarde de l'ancienne valeur du registre d'état SR
Passage en mode superviseur et masquage des interruptions dans SR
Écriture de la cause du déroutement dans le registre CR
Branchement à l'adresse "0x80000080".
INSTRUCTIONS SYSTÈMES
Retour d’interruption
Avant de reprendre l'exécution d'un programme qui a effectué un appel système (instructions
SYSCALL ou BREAK) ou qui a été interrompu, il est nécessaire d'exécuter l'instruction RFE.
Cette instruction effectue la restitution de l'état précédent dans le registre SR