Université Pierre et Marie Curie
UFR 22
LICENCE D' INFORMATIQUE
Travaux Dirigés
ARCHITECTURE
Processeur MIPS R3000
Langage d'assemblage
Année 2000/2001
Module
UNIVERSITÉ PIERRE ET MARIE CURIE
Processeur MIPS R3000.
Langage d’assemblage
Version 1.3
(octobre 1999)
MIPS R3000 langage d’assemblage - 5 octobre 1998 page - 1
UNIVERSITÉ PIERRE ET MARIE CURIE
A) INTRODUCTION
Ce document dĂ©crit le langage d’assemblage du processeur MIPS R3000, ainsi que dif-
fĂ©rentes conventions d’écriture des programmes en langage d’assemblage.
Un document sĂ©parĂ© dĂ©crit l’architecture externe du processeur, c’est-Ă -dire les registres
visibles du logiciel, les rĂšgles d’adressage de la mĂ©moire, le codage des instructions
machine, et les mécanismes de traitement des interruptions et des exceptions.
On prĂ©sente ici successivement l’organisation de la mĂ©moire, les principales rĂšgles syn-
taxiques du langage, les instructions et les macro-instructions, les directives acceptées
par l’assembleur, les quelques appels systùme disponibles, ainsi que conventions impo-
sées pour les appels de fonctions et la gestion de la pile.
Les programmes assembleur source qui respectent les rĂšgles dĂ©ïŹnies dans le prĂ©sent
document peuvent ĂȘtre assemblĂ©s par l’assembleur MIPS de l’environnement GNU pour
générer du code exécutable. Ils sont également acceptés par le simulateur du MIPSR3000
utilisé en TP qui permet de visualiser le comportement du processeur instruction par
instruction.
MIPS R3000 langage d’assemblage - 5 octobre 1998 page - 2
UNIVERSITÉ PIERRE ET MARIE CURIE
B) ORGANISATION DE LA MÉMOIRE
Rappelons que le but d’un programme XĂ©crit en langage d’assemblage est de fournir Ă 
un programme particulier (appelé « assembleur ») les directives nécessaires pour générer
le code binaire reprĂ©sentant les instructions et les donnĂ©es qui devront ĂȘtre chargĂ©es en
mĂ©moire pour permettre au programme Xde s’exĂ©cuter sur du matĂ©riel.
Dans l’architecture MIPS R3000, l’espace adressable est divisĂ© en deux segments : le
segment utilisateur, et le segment noyau.
Un programme utilisateur utilise généralement trois sous-segments (appelés sections)
dans le segment utilisateur :
– la section text contient le code exĂ©cutable en mode utilisateur. Elle est implantĂ©e
conventionnellement Ă  l’adresse 0x00400000. Sa taille est ïŹxe et calculĂ©e lors de
l’assemblage. La principale tĂąche de l’assembleur consiste Ă  gĂ©nĂ©rer le code binaire
correspondant au programme source dĂ©crit en langage d’assemblage, qui sera chargĂ©
dans cette section;
– la section data contient les donnĂ©es globales manipulĂ©es par le programme utilisateur.
Elle est implantĂ©e conventionnellement Ă  l’adresse 0x10000000. Sa taille est ïŹxe et
calculĂ©e lors de l’assemblage. Les valeurs contenue dans cette section peuvent ĂȘtre
initialisées grace a des directives contenues dans le programme source en langage
d’assemblage;
– la section stack contient la pile d’exĂ©cution du programme. Sa taille varie au cours de
l’exĂ©cution. Elle est implantĂ©e conventionnellement Ă  l’adresse 0x7FFFEFFF. Contrai-
rement aux sections data et text, la pile s’étend vers les adresses dĂ©croissantes.
Deux autres sections sont dĂ©ïŹnies dans le segment noyau :
– la section ktext contient le code exĂ©cutable en mode noyau. Elle est implantĂ©e
conventionnellement Ă  l’adresse 0x80000000. Sa taille est ïŹxe et calculĂ©e lors de
l’assemblage;
– la section kdata contient les donnĂ©es globales manipulĂ©es par le systĂšme d’exploita-
tion en mode noyau. Elle est implantĂ©e conventionnellement Ă  l’adresse 0xC0000000.
Sa taille est ïŹxe et calculĂ©e lors de l’assemblage;
– la section kstack contient la pile d’exĂ©cution du programme. Sa taille varie au cours de
l’exĂ©cution. Elle est implantĂ©e conventionnellement Ă  l’adresse 0xFFFFEFFF. Contrai-
rement aux sections data et text, la pile s’étend vers les adresses dĂ©croissantes.
MIPS R3000 langage d’assemblage - 5 octobre 1998 page - 3
UNIVERSITÉ PIERRE ET MARIE CURIE
0xFFFFFFFF réservé au systÚme
0xFFFFEFFF .kstack
⇓
.
.
.
⇑
0xC0000000 .kdata segment
0xBFFFFFFF ⇑noyau
0x80000000 .ktext
0x7FFFFFFF réservé au systÚme
0x7FFFF000
0x7FFFEFFF .stack
⇓
.
.
.
⇑
0x10000000 .data segment
0x0FFFFFFF ⇑utilisateur
0x00400000 .text
0x003FFFFF réservé au systÚme
0x00000000
MIPS R3000 langage d’assemblage - 5 octobre 1998 page - 4
UNIVERSITÉ PIERRE ET MARIE CURIE
C) RÈGLES SYNTAXIQUE
1. les noms de ïŹchiers :
Les noms des ïŹchiers contenant un programme source en langage d’assemblage
doivent ĂȘtre sufïŹxĂ© par « .s ». Exemple : monprogramme.s
2. les commentaires :
ils commencent par un #ou un;et s’achĂšvent Ă  la ïŹn de la ligne courante.
Exemple :
###############################################
# Source Assembleur MIPS de la fonction memcpy
###############################################
.... ; sauve la valeur copiée dans la mémoire
3. les entiers :
une valeur entiÚre décimale est notée 250, une valeur entiÚre octale est notée 0372
(prĂ©ïŹxĂ©e par un zĂ©ro), et une valeur entiĂšre hĂ©xadĂ©cimale est notĂ©e 0xFA (prĂ©ïŹxĂ©e
par zĂ©ro suivi de x). En hexadĂ©cimal, les lettres de AĂ Fpeuvent ĂȘtre Ă©crites en
majuscule ou en minuscule.
4. les chaĂźnes de caractĂšres :
elles sont simplement entre guillemets, et peuvent contenir les caractĂšres d’échap-
pement du langage C.
Exemple : "Oh la jolie chaĂźne avec retour Ă  la ligne\n"
5. les labels :
ce sont des mnémoniques correspondant à des adresses. Ces adresses peuvent
ĂȘtre soit des adresses de variables,soit des adresses de saut. Ce sont des chaĂźnes
de caractĂšres qui commencent par une lettre, majuscule ou minuscule, un $,un
_,ouun.. Ensuite, un nombre quelconque de ces mĂȘmes caractĂšres auquels on
ajoute les chiffres sont utilisĂ©s. Pour la dĂ©claration, le label doit ĂȘtre sufïŹxĂ© par
«:». Exemple : $LC12:
Pour y référer, on supprime le « :».
Exemple :
message:
.asciiz "Ceci est une chaĂźne de caractĂšres...\n"
.text
__start:
MIPS R3000 langage d’assemblage - 5 octobre 1998 page - 5
UNIVERSITÉ PIERRE ET MARIE CURIE
la $4, message ; adresse de la chaine dans $4
ori $2, $0, 4 ; code du ‘print_string’ dans $2
syscall
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.
6. les immédiats :
ce sont les opĂ©randes contenus dans l’instruction. Ce sont des constantes. Ce sont
soit des entiers, soit des labels. Ces constantes doivent respecter une taille maxi-
mum qui est fonction de l’instruction qui l’utilise : 16 ou 26 bits.
7. les registres :
le processeur MIPS possĂšde 32 registres accessibles au programmeur. Chaque
registre est connu par son numĂ©ro, qui varie entre 0 et 31, et est prĂ©ïŹxĂ© par un $.
Par exemple, le registre 31 sera notĂ© $31 dans l’assembleur.
En dehors du registre $0, tous les registres sont identiques du point de vue de la
machine. Lorsque le registre $0 est utilisé comme registre source dans une instruc-
tion, la valeur lue est toujours 0, et utiliser ce registre comme registre destination
dans une instruction ne modiïŹe pas sa valeur.
AïŹn de normaliser et de simpliïŹer l’écriture du logiciel, des conventions d’utilisation
des registres sont dĂ©ïŹnies.
$1 rĂ©servĂ© Ă  l’assembleur
$2 valeur de retour des fonctions
$3 registre temporaire a ne pas sauver
$4, ..., $7 registres Ă  sauver
$8, ..., $15 registres temporaires Ă  ne pas sauver
$16, ..., $23 registres Ă  sauver
$24, ..., $27 registres réservés aux procédures noyau
$28 pointeur sur les variables globales
$29 pointeur de pile
$30 registre temporaire a ne pas sauver
$31 adresse de retour d’appel de fonction
8. les arguments :
si une instruction nĂ©cessite plusieurs arguments, comme par exemple l’addition
entre deux registres, ces arguments sont séparés par des virgules. Dans une ins-
truction assembleur, on aura en général comme argument en premier le registre
dans lequel est mis le rĂ©sultat de l’opĂ©ration, puis ensuite le premier registre source,
puis enïŹn le second registre source ou une constante.
MIPS R3000 langage d’assemblage - 5 octobre 1998 page - 6
UNIVERSITÉ PIERRE ET MARIE CURIE
Exemple : add $3, $2, $1
9. l’adressage mĂ©moire :
le MIPS ne possùde qu’un unique mode d’adressage : l’adressage indirect registre
avec dĂ©placement. Ainsi l’accĂšs Ă  une case mĂ©moire Ă  partir de l’adresse prĂ©sente
dans un registre se note par le dĂ©placement, c.-Ă -d. un entier comme dĂ©ïŹni prĂ©cĂ©-
demment, suivi du registre entre parenthĂšses.
Exemples : 11($12),013($12) 0xB($12).
Ces trois exemples indiquent la case mémoire ayant comme adresse le contenu du
registre $12 plus 11.
S’il n’y a pas d’entier devant la parenthĂšse ouvrante, le dĂ©placement est nul.
En revanche, il n’est pas possible d’écrire des sauts Ă  des adresses absolues ou
relatives
constantes
, comme par exemple un j 0x400000 ou un bnez $3, -12.
Il faut nécessairement utiliser des labels.
MIPS R3000 langage d’assemblage - 5 octobre 1998 page - 7
UNIVERSITÉ PIERRE ET MARIE CURIE
D) INSTRUCTIONS
Dans ce qui suit, le registre noté $rr est le registre destination, c.-à-d. qui reçoit le résultat
de l’opĂ©ration, les registres notĂ©s $ri et $rj sont les registres source qui contiennent
les valeurs sur lesquelles s’effectue l’opĂ©ration. Notons qu’un registre source peut ĂȘtre
le registre destination d’une mĂȘme instruction assembleur. Un opĂ©rande immĂ©diat sera
notĂ© imm, et sa taille sera spĂ©ciïŹĂ© dans la description de l’instruction. Les instructions
de saut prennent comme argument une Ă©tiquette, oĂč
label
, qui est utilisée pour calculer
l’adresse de saut. Toutes les instructions modiïŹent un registre non accessible du logiciel,
le
program counter
. De mĂȘme, le rĂ©sultat d’une multiplication ou d’une division est mis
dans deux registres spéciaux, $hi pour les poids forts, et $lo pour les poids faibles.
Ceci nous amĂšme Ă  introduire quelques notations :
=test d’égalitĂ©
+addtition entiÚre en complément à deux
−soustraction entiĂšre en complĂ©ment Ă  deux
×multiplication entiĂšre en complĂ©ment Ă  deux
.
.division entiÚre en complément à deux
mod reste de la division entiÚre en complément à deux
and opérateur et bit-à-bit
or opérateur ou bit-à-bit
nor opérateur non-ou bit-à-bit
xor opérateur ou-exclusif bit-à-bit
mem[a]contenu de la mĂ©moire Ă  l’adresse a
←assignation
⇒implication
kconcaténation de chaßnes de bits
xnréplication du bit xdans une chaßne de nbits. Notons
que xest un unique bit
xp...q sélection des bits pàqde la chaßne de bits x
Certains opĂ©rateurs n’étant pas Ă©vidents, nous donnons ici quelques exemples.
Posons
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
0001101101001000 la chaĂźne de bit x, qui a une longeur de 16
bits, le bit le plus à droite étant le bit de poids faible et de numéro zéro, et le bit le plus à
gauche étant le bit de poids fort et de numéro 15. x6...3est la chaßne 1001.x16
15 crée une
chaßne de 16 bits de long dupliquant le bit 15 de x, zéro dans le cas présent. x16
15 kx15...0
est la valeur 32 bits avec extension de signe d’un immĂ©diat en complĂ©ment Ă  deux de 16
bits.
MIPS R3000 langage d’assemblage - 5 octobre 1998 page - 8
1 / 27 100%
La catégorie de ce document est-elle correcte?
Merci pour votre participation!

Faire une suggestion

Avez-vous trouvé des erreurs dans l'interface ou les textes ? Ou savez-vous comment améliorer l'interface utilisateur de StudyLib ? N'hésitez pas à envoyer vos suggestions. C'est trÚs important pour nous!