École nationale supérieure
d’informatique pour l’industrie et l’entreprise
Instructions MIPS courantes
Cours de compilation
Le processeur MIPS est un processeur de type RISC (Reduced Instruction Set Compu-
ting) pour lequel les instructions, de taille fixe, sont régulières et où l’accès à la mémoire
utilise des instructions spéciales. Ces processeurs possèdent de nombreux registres, les-
quels sont uniformes. Il existe un simulateur de machine MIPS, appelé SPIM, dispo-
nible sous différentes plate-formes. Son manuel, disponible à l’adresse [Link]
[Link]/~larus/HP_AppA.pdf, est une excellente introduction au fonctionnement
du MIPS. On y trouve la description de l’ensemble des instructions MIPS. Nous nous
contenterons ici de décrire les plus courantes.
Opérations sur les entiers
add $rd, $rs, $rt ajoute les contenus des registres $rs et $rt et place le résultat
dans le registre $rd.
addi $rd, $rs, i ajoute la constante i au contenu du registre $rs et place le résul-
tat dans le registre $rd.
mul $rd, $rs, $rt multiplie les contenus des registres $rs et $rt et place le résultat
dans le registre $rd.
sub $rd, $rs, $rt soustrait les contenus des registres $rs et $rt et place le résultat
dans le registre $rd.
and $rd, $rs, $rt fait le « et » logique entre les contenus des registres $rs et $rt
et place le résultat dans le registre $rd.
sll $rd, $rs, i décale les bits du contenu du registre $rs de i positions vers la
gauche, et place le résultat dans le registre $rd.
not $rd, $rs fait la négation bit à bit du contenu du registre $rs, et place le résultat
dans le registre $rd.
li $rd, i place la constante i dans le registre $rd.
move $rd, $rs copie le contenu du registre $rs dans le registre $rd.
Comparaisons
slt $rd, $rs, $rt met dans le registres $rd la valeur 1 si le contenu de $rs est plus
petit que le contenu de $rt, et 0 sinon.
1
slti $rd, $rs, i met dans le registres $rd la valeur 1 si le contenu de $rs est plus
petit que la constante i, et 0 sinon.
seq $rd, $rs, $rt met dans le registres $rd la valeur 1 si le contenu de $rs est égal
au contenu de $rt, et 0 sinon.
sne $rd, $rs, $rt met dans le registres $rd la valeur 1 si le contenu de $rs n’est
pas égal au contenu de $rt, et 0 sinon.
Branchements et sauts
b label continue à l’instruction indiquée par label.
bgez $rs, label continue à l’instruction indiquée par label si le contenu de $rs est
plus grand ou égal à zéro, continue normalement sinon. On a aussi beq $rs, $rt, label ;
bgtz $rs, label ; blez $rs, label ; bltz $rs, label ; etc.
j i saute à l’instruction i.
jal i saute à l’instruction i après avoir sauvegardé l’adresse de l’instruction suivante
dans le registre $ra.
jr $rs saute à l’instruction dont l’adresse est le contenu de $rs.
Gestion de la mémoire
lw $rd, i($rt) place dans le registre $rd le contenu de la mémoire à l’adresse donnée
par le contenu de $rt plus i.
sw $rs, i($rt) stocke le contenu du registre $rd à l’emplacement mémoire donné
par le contenu de $rt plus i.