télécharger 81.49 Kb.
|
Chapitre II : Architecture externe du microprocesseur 32 bits MIPS R3000 II.1 Introduction : L'architecture externe représente ce que doit connaitre un programmeur souhaitant programmer en assembleur, ou la personne souhaitant écrire un compilateur pour ce processeur: - Les registres visibles. - L'adressage de la mémoire. - Le jeu d'instructions. - Les mécanismes de traitement des interruptions et exceptions. MIPS (Microprocessor without Interlocked Pipeline Stages) est un processeur 32 bits industriel conçu dans les années 80. Son jeu d'instructions est de type RISC (Reduced instruction set computer) développée par la compagnie MIPS Computer Systems Inc. Il existe plusieurs réalisations industrielles de cette architecture (SIEMENS, NEC, LSI LOGIC, SILICON GRAPHICS, etc...) On les retrouve aussi dans plusieurs systèmes embarqués, comme les ordinateurs de poche, les routeurs Cisco et les consoles de jeux vidéo (Nintendo 64 et Sony PlayStation, PlayStation 2 et PSP). Le MIPS R4000 sorti en 1991 serait le premier processeur 64 bits. Il a été supporté par Microsoft de Windows NT 3.1 jusqu'à Windows NT 4.0 II.2Registres Visibles Tous les registres visibles du logiciel, c'est à dire ceux dont la valeur peut être lue ou modifiée par les instructions, sont des registres 32 bits. Afin de mettre en œuvre les mécanismes de protection nécessaires pour un système d'exploitation multi-tâches, le processeur possède deux modes de fonctionnement : utilisateur/superviseur. Ces deux modes de fonctionnement imposent d'avoir deux catégories de registres.
II.2.1 Registres non protégés : Le processeur possède 35 registres manipulés par les instructions standard (c'est à dire les instructions qui peuvent s'exécuter aussi bien en mode utilisateur qu'en mode superviseur). • Ri (0 ≤ i ≤ 31) 32 registres généraux. Ces registres sont directement adressés par les instructions, et permettent de stocker des résultats de calculs intermédiaires. Le registre R0 est un registre particulier: - la lecture fournit la valeur constante "0x00000000" - l’écriture ne modifie pas son contenu. Le registre R31 est utilisé par les instructions d'appel de procédures (instructions BGEZAL, BLTZAL, JAL et JALR) pour sauvegarder l'adresse de retour. • PC Registre compteur de programme (Program Counter). Ce registre contient l'adresse de l'instruction en cours d'exécution. Sa valeur est modifiée par toutes les instructions. • HI et LO Registres pour la multiplication ou la division. Ces deux registres 32 bits sont utilisés pour stocker le résultat d'une multiplication ou d'une division, qui est un mot de 64 bits. La description des 32 registres est donnée dans le tableau suivant : ![]() II.2.2 Registres protégés L'architecture MIPS 4 registres qui ne sont accessibles, en lecture comme en écriture, que par les instructions privilégiées (c'est à dire les instructions qui ne peuvent être exécutées qu'en mode superviseur) dédiés pour la gestion des interruptions et des exceptions. • SR Registre d'état (Status Register). Il contient en particulier le bit qui définit le mode : superviseur ou utilisateur, ainsi que les bits de masquage des interruptions. (Ce registre possède le numéro 12) • CR Registre de cause (Cause Register). En cas d'interruption ou d'exception, son contenu définit la cause pour laquelle on fait appel au programme de traitement des interruptions et des exceptions. (Ce registre possède le numéro 13) • EPC Registre d'exception (Exception Program Counter). Il contient l'adresse de retour (PC + 4) en cas d'interruption. Il contient l'adresse de l'instruction fautive en cas d'exception (PC). (Ce registre possède le numéro 14) • BAR Registre d'adresse illégale (Bad Address Register). En cas d'exception de type "adresse illégale", il contient la valeur de l'adresse mal formée. (Ce registre possède le numéro 8) II.3 Adressage Mémoire :
d'un demi-mot doit être multiple de 2. (on dit que les adresses doivent être "alignées"). II.4 Jeu d’instructions :
Le processeur possède 57 instructions qui se répartissent en 4 classes : • 33 instructions arithmétiques/logiques entre registres • 12 instructions de branchement • 7 instructions de lecture/écriture mémoire • 5 instructions systèmes Toutes les instructions ont une longueur de 32 bits et possèdent un des trois formats suivants : ![]()
Le jeu d'instructions est "orienté registres". Cela signifie que les instructions arithmétiques et logiques prennent leurs opérandes dans des registres et rangent le résultat dans un registre. Les seules instructions permettant de lire ou d'écrire des données en mémoire effectuent un simple transfert entre un registre général et la mémoire, sans aucun traitement arithmétique ou logique. La plupart des instructions arithmétiques et logiques se présentent sous les 2 formes registre-registre et registre-immédiat: ADD : R(rd) <--- R(rs) op R(rt) format R ADDI : R(rt) <--- R(rs) op IMD format I L’opérande immédiat 16 bits est signé pour les opérations arithmétiques et non signé pour les opérations logiques. Les instructions JAL, JALR, BGEZAL, et BLTZAL sauvegardent une adresse de retour dans le registre R31. Ces instructions sont utilisées pour les appels de sous programme. Toutes les instructions de branchement conditionnel sont relatives au compteur ordinal pour que le code soit translatable. L'adresse de saut est le résultat d'une addition entre la valeur du compteur ordinal et un déplacement signé. Les instructions MTC0 et MFC0 permettent de transférer le contenu des registres SR, CR, EPC et BAR vers un registre général et inversement. Ces 2 instructions ne peuvent être exécutées qu’en mode superviseur, de même que l'instruction RFE qui permet de restaurer l'état antérieur du registre d'état avant de sortir du gestionnaire d'exceptions. Dans cette partie on verra le langage d’assembleur qui comporte ce jeu d’instructions. Avant d’expliquer la syntaxe de certaines instructions on donne certaines règles syntaxiques Les commentaires : Ils commencent par un # ou un ; et s’achèvent à la fin de la ligne courante. Exemple : ############################################### ### # programme qui calcule la somme des n premiers nombres ################################################### .... ; sauve la valeur copiée dans la mémoire Les entiers : Une valeur entière décimale est notée par exemple 3250, une valeur entière octale est notée 04372 (préfixée par un zéro), et une valeur entière hexadécimale est notée 0xFA (préfixée par zéro suivi de x). En hexadécimal, les lettres de A à F peuvent être écrites en majuscule ou en minuscule. Les chaînes de caractères : Elles sont simplement entre guillemets. Exemple : "la valeur de x est" Les labels (étiquettes): Ce sont des chaînes de caractères qui commencent par une lettre, majuscule ou minuscule, un $, un _, ou un .. Ensuite, un nombre quelconque de ces mêmes caractères auquel on ajoute les chiffres. Pour la déclaration, le label doit être suffixé par<< : >>. Exemple : ETIQ1 Attention : sont illégaux les labels qui ont le même nom qu’un mnémonique de l’assembleur ou qu’un nom de registre. Les immédiats : Ce sont les opérandes contenus dans l’instruction (constantes :soit des entiers, soit des labels). Ces constantes doivent respecter une taille maximum qui est fonction de l’instruction qui l’utilise : 16 ou 26 bits.
ADDI -- Add immediate (with overflow) Opération : $t=$s+imm Syntaxe : addi $t, $s, imm ADDIU -- Add immediate unsigned (no overflow) Opération : $t=$s+imm Syntaxe : addiu $t, $s, imm ADDU -- Add unsigned (no overflow) Operation: $d = $s + $t; Syntax: addu $d, $s, $t SUBU -- Subtract unsigned Operation: $d = $s - $t; Syntax: subu $d, $s, $t
And (Et logique) : Et bit-à-bit registre registre Syntaxe : and $rd, $rs, $rt Un et bit-à-bit est effectué entre les contenus des registres $rs et $rt. Le résultat est placé dans le registre $rd. Andi (Et logique immédiat) : Et bit-à-bit registre immédiat Syntaxe : andi $rd, $rs, imm La valeur immédiate sur 16 bits subit une extension de zéros. Un et bit à bit est effectué entre cette valeur étendue et le contenu du registre $rs pour former un résultat placé dans le registre $rd. Or (Ou logique) Ou bit-à-bit registre registre Syntaxe : or $rd, $rs, $rt Un ou bit-à-bit est effectué entre les contenus des registres $rs et $rt. Le résultat est placé dans le registre $rd. Ori (Ou logique immédiat) Ou bit-à-bit registre, immédiat Syntaxe ori $rd, $rs, imm La valeur immédiate sur 16 bits subit une extension de zéros. Un ou bit-à bite est effectué entre cette valeur étendue et le contenu du registre $rs pour former un résultat placé dans le registre $rd.
Décalage logique à gauche. Décalage à gauche immédiat Syntaxe : sll $rd, $rt, imm Le registre $rt est décalé à gauche de la valeur immédiate codée sur 5 bits, des zéros étant introduits dans les bits de poids faibles. Le résultat est placé dans le registre $rd. Décalage à gauche registre(variable) Syntaxe sllv $rd, $rs, $rt Le registre $rs est décalé à gauche du nombre de bits spécifiés dans les 5 bits de poids faible du registre $rt, des zéros étant introduits dans les bits de poids faibles. Le résultat est placé dans le registre $rd Décalage à droite logique immédiat Syntaxe : srl $rd, $rt, imm Le registre $rt est décalé à droite de la valeur immédiate codée sur 5 bits, des zéros étant introduits dans les bits de poids fort. Le résultat est placé dans le registre $rd. Décalage à droite logique registre Syntaxe srlv $rd, $rs, $rt Le registre $rs est décalé à droite du nombre de bits spécifiés dans les 5 bits de poids faible du registre $rt, des zéros étant introduits dans les bits de poids fort ainsi libérés. Le résultat est placé dans le registre $rd. Exercice : Ecrire un programme en assembleur qui permet de lire un entier au clavier et qui calcule 2 à la puissance ce nombre, vous aurez besoin de sll, beq, b et addi. Solution: .data nombre1 :.word 1 nombre2: .word 2 entree : .asciiz "donnez la valeur du nomnre SVP:" sortie : .asciiz "la puissance est :" .text lw $t1, nombre1 lw $t2, nombre2 li $v0, 4 la $a0, entree syscall li $v0, 5 syscall move $t3, $v0 calcul : beq $t3, $t1, fin sll $t2, $t2, 1 addi $t1, $t1, 1 b calcul fin : li $v0, 4 la $a0, sortie syscall li $v0, 1 move $a0, $t2 syscall li $v0, 10 syscall
Instructions de comparaison Comparaison signée registre registre Syntaxe slt $rd, $rs, $rt Le contenu du registre $rs est comparé au contenu du registre $rt, les deux valeurs étant considérées comme des quantités signées. Si la valeur contenue dans $rs est inférieure à celle contenue dans $rt, alors $rd prend la valeur un, sinon il prend la valeur zéro. Comparaison signée registre immédiat Syntaxe slti $rd, $rs, imm Le contenu du registre $rs est comparé à la valeur immédiate sur 16 bits qui à subit une extension de signe. Les deux valeurs étant considérées comme des quantités signées, si la valeur contenue dans $rs est inférieure à celle de l’immédiat étendu, alors $rd prend la valeur un, sinon il prend la valeur zéro.
La multiplication Multiplication signée Syntaxe : mult $rs, $rt Le contenu du registre $rs est multiplié par le contenu du registre $rt, le contenu des deux registres considérés comme des nombres en complément à deux. Les 32 bits de poids fort du résultat sont placés dans le registre hi et les 32 bits de poids faible dans le registre lo. Multiplication non-signée Syntaxe : multu $ri, $rj Meme comportement que mult sauf que les nombres sont non signés La division Division entière registre registre et reste signé Syntaxe : div $rs, $rt Le contenu du registre $rs est divisé par le contenu du registre $rt, le contenu des deux registres étant considéré comme des nombres en complément à deux. Le résultat de la division est placé dans le registre spécial $lo, et le reste dans $hi. Division entière et reste non-signé registre registre Syntaxe : Divu $rs, $rt Le contenu du registre $rs est divisé par le contenu du registre $rt, le contenu des deux registres étant considéré comme des nombres non signés. Le résultat de la division est placé dans le registre spécial $lo, et le reste dans $hi.
Copie du registre $hi dans un registre général Syntaxe mfhi $rd Le contenu du registre spécialisé $hi —qui est mis à jour par l’opération de multiplication ou de division —est recopié dans le registre général $rd. Copie du registre $lo dans un registre général Syntaxe : mflo $rd Le contenu du registre spécialisé $lo — qui est mis à jour par l’opération de multiplication ou de division est recopié dans le registre général $rd.
Branchement conditionnel Branchement si registre égal registre Syntaxe beq $rs, $rt, label Les contenus des registres $rs et $rt sont comparés. S’ils sont égaux, le programme saute à l’adresse correspondant à l’étiquette, calculée par l’assembleur. Addr label Branchement si registre supérieur ou égal à zéro Syntaxe bgez $ri, label Si le contenu du registre $ri est supérieur ou égal à zéro le programme saute à l’adresse correspondant à l’étiquette, calculée par l’assembleur. Addr label Branchement si registre différent de registre Syntaxe bne $rs, $rt, label Les contenus des registres $rs et $rt sont comparés. S’ils sont différents, le programme saute à l’adresse correspondant à l’étiquette, calculée par l’assembleur. Addr label Branchement inconditionnel Branchement inconditionnel immédiat Syntaxe j label Le programme saute inconditionnellement à l’adresse correspondant au label, calculé par l’assembleur.
Instruction de chargement rangement dans la mémoire principale ( Lecture-Ecriture) Les deux instructions lw (load word = lecture) et sw (store word =écriture) permettent les échanges entre la mémoire centrale et les registres. Lecture d’un mot de la mémoire Syntaxe lw $rd, imm($rs) rd mem[imm + rs] L’adresse de chargement est la somme de la valeur immédiate sur 16 bits et du contenu du registre $rs. Le contenu de cette adresse est placé dans le registre $rd. Écriture d’un mot en mémoire Syntaxe sw $rd, imm($rs) mem[imm + rs] rd L’adresse d’écriture est la somme de la valeur immédiate sur 16 bits, avec et du contenu du registre $rs. Le contenu du registre $rd est écrit à l’adresse ainsi calculée. Exemple : , lw $t2, 10($t3) copie dans le registre $t2 la valeur située dans la mémoire principale à l’adresse m obtenue en ajoutant 10 au nombre stocké dans la registre $t3. sw $t2, 15($t1) copie la valeur présente dans le registre $2 dans la mémoire principale à l’adresse m obtenue en ajoutant 15 au nombre stocké dans la registre $t1. Structures de contrôle : Les structures de répétition en assembleur s’effectuent en utilisant les instructions de branchements. Exercice : Ecrire un programme en assembleur qui permet d’afficher la suite des nombres de 0 à 10 séparés par des virgules, l’exécution doit ressembler à ceci : ![]() Correction : .data message :.asciiz "la boucle while est faite" espace:.asciiz " ," .text addi $t0, $zero, 0 while: bgt $t0, 10, fin jal afficher_nombre addi $t0, $t0, 1 j while fin: li $v0, 4 la $a0, message syscall li $v0, 10 syscall afficher_nombre: li $v0, 1 add $a0, $t0, $zero syscall li $v0, 4 la $a0, espace syscall jr $ra |
![]() | «mini» cv à thème; ainsi, pour chaque emploi occupé, sont développés des informations sur l’entreprise, le poste occupé, des réalisations,... | ![]() | «Ces deux nouveaux produits permettent simplement cela et nous sommes certains que les designers seront ravis des résultats finaux... |
![]() | «Les familles syriaques catholiques de Beyrouth au xixe s d’après les registres de la communauté», Annales d’Histoire et d’Archéologie... | ![]() | «intermédiaires», de même que la Basse Epoque, sont des périodes marquées par la désorganisation du pays, les invasions étrangères... |
![]() | «relativement autonome» se fait sans l’aide du personnel du musée. Des visites appelées "visiter ensemble" sont programmées régulièrement.... | ![]() | «Consultants» à manifester leur intérêt pour fournir les services décrits ci-dessus. Les consultants intéressés devront fournir les... |
![]() | ![]() | «normes». Comment sont-elles pensées ? En fonction de quelles représentations des territoires par les institutions ? Comment sont-elles... | |
![]() | «humeurs» conçues par les organes et que ces humeurs sont reliées à des passions. On estime que par l’usage de la raison, on peut... | ![]() | «e-Barreau» des adresses ip correspondant au Data Center de Vénissieux, locaux distants hébergeant le site informatique de l'ordre... |