Vous êtes sur la page 1sur 48

Le jeu d’instructions MIPS

Nous allons voir le langage de la machine :


Les opérations du matériel de l’ordinateur
Les opérandes du matériel de l’ordinateur
La représentation des instructions dans
l’ordinateur
Des instructions pour prendre des décisions

07/11/2020 12:05 I.Abdesslem 1


les instructions. 1
Les opérations du matériel de l’ordinateur

Tout ordinateur doit être capable d’effectuer des


opérations arithmétiques.
La notation MIPS

add a,b,c

chaque instruction arithmétique MIPS doit toujours


avoir trois variables.

07/11/2020 12:05 I.Abdesslem 2


les instructions. 2
Les opérandes du matériel de l’ordinateur

Les opérandes des instructions arithmétiques doivent


provenir d’un nombre limité d’emplacements particuliers
appelés registres.
La taille d’un registre dans l’architecture MIPS est de 32
bits
MIPS possède 32 registres, notés $0, $1, ...,$31
Les registres sont plus rapide que la mémoire
Les registres sont plus facile à utiliser pour le compilateur
Les registres peuvent contenir des variables
Réduction trafic mémoire

07/11/2020 12:05 I.Abdesslem 3


les instructions. 3
Les opérandes du matériel de l’ordinateur

230 octet mémoire


31 registres 32 bits + R0=0
HI, LO, CP

R0 0
R1

R31
CP
LO
HI
07/11/2020 12:05 I.Abdesslem 4
les instructions. 4
Les registres du MIPS

Le MIPS comporte 32 registres généraux interchangeables, sauf :


le registre $0 ou zéro qui vaut toujours 0, même après une
écriture.
Le registre $31 ou ra, utilisé implicitement par certaines
instructions (jal adr) pour sauver l'adresse de retour avant un
saut.

Les autres registres ont des utilisations préférentielles, mais


cela n'est strict que pour communiquer avec d'autres
programmes(exemple: utiliser des programmes en librairies).

07/11/2020 12:05 I.Abdesslem


5
les instructions. 5
Les registres du MIPS

Nom Numéro Usage


zero 0 Zéro (toujours)
at 1 Réservé par l'assembleur
v0 .. v1 2 .. 3 Retour de valeurs
a0 .. a3 4 .. 7 Passage d'arguments
t0 .. t7 8 .. 15 Temporaires non sauvegardés
s0.. s7 16 .. 23 Temporaires sauvegardés
t8.. t9 24 .. 25 Temporaires non sauvegardés
k0.. k1 26 .. 27 Réservés par le système
gp 28 Global Pointer
sp 29 Stack Pointer
fp 30 Frame Pointeur
ra 31 Return Address

07/11/2020 12:05 I.Abdesslem


6
les instructions. 6
Exemple

f=(g+h)-(i+j);

Les variables f,g,h,i et j peuvent être


assignées aux registres $16, $17,… $20.
C’est au compilateur que revient cette
tâche délicate.

add $8,$17,$18 #Registre $8 contient g+h


add $9,$19,$20 #Registre $9 contient i+j
sub $16,$8,$9 # f reçoit $8-$9, ou (g+h)-(i+j)

07/11/2020 12:05 I.Abdesslem 7


les instructions. 7
Les opérandes du matériel de l’ordinateur

Beaucoup de programmes ont plus de variables que


les machines n’ont de registres. Par conséquent, le
compilateur cherche à conserver dans les registres les
variables les plus souvent utilisées et place le reste en
mémoire.

Les structures de données comme les tableaux sont


donc stockées en mémoire

07/11/2020 12:05 I.Abdesslem 8


les instructions. 8
Les opérandes du matériel de l’ordinateur

Les opérations arithmétiques n’ont lieu que dans


les registres. MIPS doit donc disposer
d’instructions qui transfèrent les données entre la
mémoire et les registres.

Load

Processeur Mémoire

Store

07/11/2020 12:05 I.Abdesslem 9


les instructions. 9
Transfert de donnée

Chargement mot :
lw $1,100($2)
$1 = Mémoire[$2+100]
Rangement mot :
sw $1,100($2)
Mémoire[$2+100] = $1

07/11/2020 12:05 I.Abdesslem 10


les instructions. 10
Les opérandes du matériel de l’ordinateur

Depuis 1980 toutes les machines utilisent des


adresses au niveau de l’octet (8 bits)

Adresse Donnée
0 10
4 45
Processeur 8 8456666
12 0
... ...

Puisque on peut lire un mot de 32 bits comme 4 octets


en un seul coup, comment ces octets sont rangés dans le
mot ?
07/11/2020 12:05 I.Abdesslem 11
les instructions. 11
Les opérandes du matériel de l’ordinateur

Big-endian: l’adresse du mot est l’adresse de l’octet


le plus significatif

Numéro d’octet
3 2 1 0 Motorolla, MIPS, SPARC

Little-endian: l’adresse du mot est l’adresse


l’octet le moins significatif

Numéro d’octet
Intel 8086, VAX, Alpha
0 1 2 3

07/11/2020 12:05 I.Abdesslem 12


les instructions. 12
Exemple

T[i]=h+T[i] ;

T est un tableau d’entiers.


On suppose que la variable h est dans
$18. $19 contient la valeur i, et que le
tableau débute à l’adresse Tstart

muli $19,$19,4 #i=i*4


lw $8,Tstart($19) #reg temporaire $8 reçoit T[i]
add $8,$18,$8 #reg temporaire $8 reçoit h+T[i]
sw $8,Tstart($19) #on recopie h+T[i]dans T[i]

07/11/2020 12:05 I.Abdesslem 13


les instructions. 13
Branchement conditionnel
branchement si égal
beq $1,$2,L
si ($1==$2) aller en L

branchement si non égal :


bne $1,$2,L
si ($1!=$2) aller en L

les instructions. 14
Exemple

if (i==j)
f=g+h;
else
f=g-h;

f,g,h,ietj correspondent aux registres $16 à $20

bne $19,$20,Else # aller en Else si ij


add $16,$17,$18 # f=g+h
j Exit # aller en Exit
Else:sub $16,$17,$18 # f=g-h
Exit:

les instructions. 15
Exemple
While (stock[i]==k)
i=i+j;

i,j et k correspondent aux registres $19 à $21,


le tableau stock débute à Sstart,
le registre $10 contient la valeur 4;

loop : mult $9,$19,$10 #reg temporaire $9=i*4


lw $8,Sstart($9) #reg temporaire $8=stock[i]
bne $8,$21,Exit #aller en Exit si stock[i]k
add $19,$19,$20 #i=i+j
j Loop #aller en Loop
Exit:

les instructions. 16
Le format des instructions

31-26 25-21 20-16 15-11 10-6 5-0


0p rs rt rd decval fonct
6 bits 5 bits 5 bits 5 bits 5 bits 6 bits
Nous donnons des noms aux champs MIPS pour faciliter leur
description
• op : opération correspondant à l’instruction
• rs : le premier registre opérande source
• rt : le second registre opérande source
• rd : le registre opérande destination ; il reçoit le résultat de
l’opération
• decval : valeur du décalage
• fonct : fonction ; ce champ détermine la variante de
l’opération décrite dans le champ op
les instructions. 17
Le format des instructions

Instruction de type R
31-26 25-21 20-16 15-11 10-6 5-0
0 rs rt rd decval fonct

Exemples :

add $1,$2,$3 signification $1=$2+$3


0 2 3 1 0 32
Sub $1,$2,$3 signification $1=$2-$3
0 2 3 1 0 34

les instructions. 18
Le format des instructions
Instruction de type I
Instruction de chargement ou de rangement
31-26 25-21 20-16 15-0
35ou43 rs rt adresse
6 bits 5 bits 5 bits 16 bits

Exemples :
lw $1,100($2) signification : $1=Mémoire($2+100)
35 2 1 100
Sw $1,100($2) signification : Mémoire($2+100)=$1
43 2 1 100

les instructions. 19
Le format des instructions

Instruction de branchement
31-26 25-21 20-16 15-0
4 ou 5 rs rt adresse

Exemples :
beq $1,$2,100 signification : si ($1=$2) aller en 100
4 1 2 100

bne $1,$2,100 signification : si ($1$2) aller en 100


5 1 2 100

les instructions. 20
Le format des instructions

• Instruction type J
op adresse
6 bits 26 bits

Exemple : J 2000
2 2000
6 bits 26 bits

Différents formats d’instructions MIPS

31 26 21 16 11 6 0
R-type op rs rt rd decval funct add, sub

I-type op rs rt immediate ori, lw, sw, beq

J-type op Address destination j, jal

les instructions. 21
Modes d’adressage
1. Adressage par registre
31 26 21 16 11 6 0
op rs rt rd decval funct

registre
Opérande est un registre Add $4,$2,$3
2. Adressage indexé
op rs rt adresse

registre

+ Mémoire

lw $1,100($2)
Opérande se trouve à
l’emplacement mémoire
les instructions. 22
Modes d’adressage

3. Adressage immédiat
op rs rt immédiat
6 bits 5 bits 5 bits 16 bits

Opérande constante addi $1,$2,100

4. Adressage relatif à CP
op rs rt adresse

CP

bne $1,$2,100 + Mémoire

Nombre de mots qui séparent l ’instruction


de branchement de l ’instruction cible
les instructions. 23
L’utilisation de la mémoire
Conventions adoptées sur un système MIPS :
Segment de texte (détient les instructions du
programme)
Segment de données
Segment de pile
Il se situe au sommet de l’espace adressable.
Lorsque le programme dépose des valeurs sur la
pile, le système d’exploitation étend le segment
de pile vers le bas.

les instructions. 24
L’utilisation de la mémoire

7fffffff
Segment de pile

Segment de
données
10000000
Segment de texte
00400000 Réservé

les instructions. 25
instructions arithmétiques
Instruction Exemple signification
add add $1,$2,$3 $1 = $2 + $3 exception possible
sous sub $1,$2,$3 $1 = $2 – $3 exception possible
add immediate addi $1,$2,100 $1 = $2 + 100 exception possible
add non signé addu $1,$2,$3 $1 = $2 + $3 pas d’exception
sous non signé subu $1,$2,$3 $1 = $2 – $3 pas d’exception
add imm. non sig addiu $1,$2,100 $1 = $2 + 100 pas d’exception
mul mult $2,$3 Hi, Lo = $2 x $3
Mul non signé multu$2,$3 Hi, Lo = $2 x $3
div div $2,$3 Lo = $2 ÷ $3, Lo = quotient
Hi = $2 mod $3 Hi = reste
div non signé divu $2,$3 Lo = $2 ÷ $3,
Hi = $2 mod $3
Move from Hi mfhi $1 $1 = Hi
Move from Lo mflo $1 $1 = Lo les instructions. 26
instructions logiques
Instruction Exemple Signification
and and $1,$2,$3 $1 = $2 ET $3
or or $1,$2,$3 $1 = $2 OR $3
xor xor $1,$2,$3 $1 = $2 XOR $3
nor nor $1,$2,$3 $1 = $2 NOR $3
and immediat andi $1,$2,10 $1 = $2 ET 10
or immediat ori $1,$2,10 $1 = $2 OU 10
xor immediat xori $1, $2,10 $1 = $2 XOR 10
shift left logical sll $1,$2,10 $1 = $2 << 10
shift right logical srl $1,$2,10 $1 = $2 >> 10
shift right arithm. sra $1,$2,10 $1 = $2 >> 10
shift left logical sllv $1,$2,$3 $1 = $2 << $3
shift right logical srlv $1,$2, $3 $1 = $2 >> $3
shift right arithm. srav $1,$2, $3 $1 = $2 >> $3
les instructions. 27
instructions de transfert de données
Instruction Comment
sw $3, 500($4) enreg. D’un mot en mémoire
sh $3, 502($2) enreg. D’un demi-mot
sb $2, 41($3) enreg. D’un octet

lw $1, 30($2) chargement d’un mot


lh $1, 40($3) chargement d’un demi mot
lhu $1, 40($3) chargement d’un demi-mot non signé
lb $1, 40($3) chargement d’un octet
lbu $1, 40($3) chargement d’un octet non signé

lui $1, 40 Load Upper Immediate (16 bits shifted left par 16)

LUI $1 0040

$1 0040 0000 … 0000


les instructions. 28
Comparaison et branchement
Instruction Exemple Signification
branch on equal beq $1,$2,100 Si ($1 == $2) go to PC+4+100
branch on not eq. bne $1,$2,100 Si ($1!= $2) go to PC+4+100
set on less than slt $1,$2,$3 Si ($2 < $3) $1=1; else $1=0
set less than imm. slti $1,$2,100 Si ($2 < 100) $1=1; else $1=0
set less than uns. sltu $1,$2,$3 Si ($2 < $3) $1=1; else $1=0
set l. t. imm. uns. sltiu $1,$2,100 Si ($2 < 100) $1=1; else $1=0
jump j 10000 go to 10000 saut à une adresse
jump register jr $31 go to $31 retour de procédure
jump and link jal 10000 $31 = PC + 4; go to 10000
appel de procédure

les instructions. 29
Langage machine et langage assembleur

Le langage assembleur attribue des noms


symboliques aux instructions, aux registres, aux
adresses et aux constantes.
Le langage machine est une suite de mots, qui
peuvent représenter des données ou des
instructions.
L’assembleur est un programme qui traduit le
langage assembleur en langage machine.

les instructions. 30
MARS 4.5 ?

MARS 4.5 est un simulateur logiciel qui exécute


des programmes écrits pour les processeurs MIPS
R2000/R3000.

Machine virtuelle = jeu d’instructions


plus riche que le matériel réel.

07/11/2020 12:05 I.Abdesslem 31

les instructions. 31
1-Instructions et pseudo-instructions
Les instructions (RISC) étant très élémentaires, on
ajoute des pseudo-instructions, qui n’existent pas
réellement pour le processeur, mais sont traduites
vers une suite d’instructions réelles par l’assembleur.
Par exemple,

blt $t0, $t1, address


est expansée en

slt $at, $t0, $t1


bne $at, $zero, address

les instructions. 32
1.Instructions et pseudo-instructions

les instructions. 33
1.Instructions et pseudo-instructions

les instructions. 34
1.Instructions et pseudo-instructions
Ou encore,

l i $t0,0xA400020

est expansée en

lui $at,0x0A40
ori $t0, $at,0x0020

les instructions. 35
1.Instructions et pseudo-instructions
Ou encore,

move $2,$3

est expansée en

add $2,$3,$0

les instructions. 36
2.Les commentaires :
Un commentaire sera toujours précédé par un ‘#’ .

# <commentaire>

Exemple :
#################
#-----Programme-----#
#################

07/11/2020 12:05 I.Abdesslem 37

les instructions. 37
3.Les chaines de caractères :

Une chaine de caractère sera déclarée entre “ “.

Exemple :
.asciiz “Hello world !\n”

On peut utiliser quelques caractères spéciaux


compatible avec le langage C :

newline(retour-chariot) \n

tabulation \t

07/11/2020 12:05 I.Abdesslem 38

les instructions. 38
4.Les directives de SPIM :

Définition : ce sont des instructions qui vont dire à


l’assembleur comment traduire un programme.

Les directives ne produisent pas des


instructions machine.

Format d’une directive : .directive

07/11/2020 12:05 I.Abdesslem 39

les instructions. 39
4.Les directives de SPIM :(Suite)
Exemples :
.data : déclaration du segment de données.

.text : déclaration du segment de code.

.ascii “ str“ :déclaration de chaines de caractères.

.asciiz “ str“ :déclaration de chaines de caractères se


terminant avec le caractère nul.

.space n : Alloue n octets d’espace mémoire dans le


segment de données.

07/11/2020 12:05 I.Abdesslem 40

les instructions. 40
4.Les directives de SPIM :(Suite)

.word w1, …, wn : Enregistre les n quantités 32 bits


dans des mots consécutive en mémoire

. half h1, ..., hn : Enregistre les n quantités 16 bits


dans des mots consécutive en mémoire

. byte b1, …, bn : Enregistre les n quantités d’octets


sucessivement en mémoire

.globl sym :déclare une étiquette ou variable globale


c.-à-d. pouvant être appelé depuis un autre fichier.

07/11/2020 12:05 I.Abdesslem 41

les instructions. 41
les instructions. 42
5.Les appels système :

$v0

$a0-$a3 syscall
$a0

$v0

•v0 (2) : Ce registre doit contenir le code de l’appel système .


•a0-a3 (4 -7) : pour les arguments en cas de manipulation de
print_int , print_string .
•v0 (2): résultat cas des services : read_int

07/11/2020 12:05 I.Abdesslem 43

les instructions. 43
4.Les appels système ( Suite ) :

Nom No Effet
print_int 1 imprime l'entier contenu dans a0
print_string 4 imprime la chaîne en a0 jusqu'à '\000'
read_int 5 lit un entier et le place dans v0
Lecture d’une chaîne
read_string 8 L’adresse du buffer en a0
La longeur de la chaîne en a1
exit 10 arrêt du programme en cours d'exécution

07/11/2020 12:05 I.Abdesslem 44

les instructions. 44
Un exemple complet 1: Factorielle (itératif)
.data
str1: .asciiz " Entrez un entier :"
str2: .asciiz "Sa factorielle est "
.text
main: li $v0 , 4 # system call code for print_str
la $a0 , str1 # address of string to print
syscall # print the string

li $v0 , 5 # system call code for read_int


syscall # read int , result in $v0

les instructions. 45
Un exemple complet 1: Factorielle (itératif)
li $3 , 1 # initialisation du resultat
loop: blt $v0,1,sortie # Si $v0 <1, on sort
mul $3,$v0,$3
sub $v0,$v0,1
b loop # sinon , $3=$3*$v0 , $v0 =$v0 -1

sortie:li $v0 , 4 # system call code for print_str


la $a0 , str2 # address of string to print
syscall # print the string

les instructions. 46
Un exemple complet 1: Factorielle (itératif)
li $v0,1 # system call code for print_int
move $a0,$3 # integer to print
syscall # print the integer

li $v0,10 # on sort proprement du programme


syscall

les instructions. 47
Manipulation d’un tableau de mots
.data
tab1 : .word 10,20,30,40,50
tab2 : .word 0,0,0,0,0
somme: .word 0
.text
main: li $18,0
li $17,5
la $a0,tab1
la $a1,tab2+16

les instructions. 48

Vous aimerez peut-être aussi