Lec7 GE34
Lec7 GE34
Lec7 GE34
d’instructions
Instruction Set Architecture - ISA
M34
GE, ENSA Marrakech
1
Définition
Une architecture de jeu d'instructions (ISA) fait partie du modèle
d’abstraction d'un ordinateur qui définit la façon dont le processeur est
contrôlé par le logiciel. L'ISA agit comme une interface entre le matériel
et le logiciel, spécifiant à la fois ce que le processeur est capable de faire
et comment il est fait.
2
Organisation d’un ordinateur
datapath +
control =
processor
(CPU)
3
Aperçu de l’architecture de MIPS
• Catégorie d’instructions
– Load/Store
– Computational R0 - R31
– Jump and Branch
– Floating Point (co-processeur)
PC
HI
LO
3 Instruction Formats, 32 bits wide
OP rs rt rd sa funct
OP rs rt immediate
OP jump target
4
Niveaux de représentation
temp = v[k];
High Level Language
Program v[k] = v[k+1];
v[k+1] = temp;
Compiler
lw $15, 0($2)
Assembly Language lw $16, 4($2)
Program sw $16, 0($2)
sw $15, 4($2)
Assembler
Control Signal
Specification
°
°
5
Cycles d’exécution
Instruction
Fetch
Obtenir l’instruction de la mémoire du programme
Instruction
Décoder l’instruction et déterminer les actions requises
Decode
Result
Stocker le résultat pour une utilisation ultérieure
Store
Next
Instruction
Déterminer l'instruction suivante
6
Les instructions arithmétiques MIPS
Chacune spécifie 3 opérandes qui sont dans les registres ($t0, $s1, $s2)
destination source1 op source2
0 17 18 8 0 0x22
7
Champs d’instructions MIPS
op rs rt rd shamt funct
8
Les opérandes des registres
9
Fichier registre MIPS
32
Contient 32 registres à 32 bits Register File locations
32 bits
32 src1
2 ports pour lecture src1 addr
5 data
1 port pour écriture 5
src2 addr
dst addr 5
src2
32 32 data
write data
write control
10
Exemple d’utilisation des opérandes
Code C:
f = (g + h) - (i + j);
On considère que g,h,i,j sont déjà dans $s1, …,
$s4, et le résultat f va être déposé dans $s0
Code compilé en MIPS:
11
Opérandes immédiats
12
Instructions immédiates MIPS
13
Constantes larges
Si on veut transférer une constante de 32 bit (qui dépasse
16 bits) dans un registre; on le fait en deux étapes: Soit la
constante large: 0xAAAABBBB
Utiliser l’instruction "load upper immediate"
lui $t0, 1010101010101010
14
Opérations de décalage
0 16 10 4 0x00
15
Opérations logiques
Il existe un certain nombre d'opérations logiques sur les bits
and $t0, $t1, $t2 #$t0 = $t1 & $t2
or $t0, $t1, $t2 #$t0 = $t1 | $t2
nor $t0, $t1, $t2 #$t0 = not($t1 | $t2)
16
Instructions d'accès à la mémoire MIPS
19
Exemple de load et store
lw $t0, 4($t1)
sw $t0, 8($t1)
20
Instruction lw en langage machine
Load(I):
lw $t0, 24($s3)
35 19 8 2410
Memory
2410 + $s3 = 0xf f f f f f f f
0x120040ac
0x0000000c
0x00000008
0x00000004
0x00000000
data word address (hex)
21
Exemple d’opération impliquant la mémoire
Code C:
g = h + A[8];
g dans $s1, h dans $s2, adresse de base de A dans $s3
Code MIPS compilé:
l’indice 8 correspond à un offset de 32 bytes (4 bytes par mot)
22
Exemple
Code C:
A[12] = h + A[8];
h dans $s2, adresse de base de A dans $s3
23
Exemple
Code c:
A[12] = h + A[8];
h dans $s2, adresse de base de A dans $s3
Code MIPS compilé:
24
chargement et stockage des Bytes
25
Les opérations des sauts
j Label1
saut inconditionnel à l'instruction Label1
26
Compilation de l’instruction If
Code C:
if (i==j) f = g+h;
else f = g-h;
f, g, h, i, j … dans $s0, $s1, $s2, $s3, $s4…
Code compilé (manuellement) en MIPS :
bne $s3, $s4, Else
add $s0, $s1, $s2
j Exit
Else: sub $s0, $s1, $s2
Exit: …
27
Spécification des destinations du saut conditionnel
Utilisation du registre PC pour calculer l’adresse du destination
du saut
28
Instruction jump
L’instruction j correspond à un saut inconditionnel:
29
Exemple
j Loop 80020 2
Exit: … 80024
30
Compilation des instructions d’une boucle
Code C:
while (save[i] == k) i += 1;
i dans $s3, k dans $s5, adresse de save dans $s6
Code compilé (manuellement) en MIPS :
Loop: sll $t1, $s3, 2
add $t1, $t1, $s6
lw $t0, 0($t1)
bne $t0, $s5, Exit
addi $s3, $s3, 1
j Loop
Exit: …
31
Compilation des instructions d’une boucle
Code C:
while (save[i] == k) i +=
1;
i dans $s3, k dans $s5, adresse
de save dans $s6
Code compilé (manuellement) en
MIPS :
Loop: sll $t1, $s3, 2 add $t1, $zero, $s6
add $t1, $t1, $s6 lw $t0, 0($t1)
lw $t0, 0($t1) j test
bne $t0, $s5, Exit Loop: addi $t1, $t1, 4
addi $s3, $s3, 1 lw $t0, 0($t1)
j Loop Test: beq $t0, $s5, Loop
Exit: …
32
Autres instructions pour les sauts
En plus de beq, bne, il y a autres types de sauts
L’instruction slt (set less then) :
slt $t0, $s0, $s1 # if $s0 < $s1 then
# $t0 = 1 else
# $t0 = 0
Format de l’instruction (format R):
Il y a aussi
slti $t0, $s0, 25 # if $s0 < 25 then $t0=1 ...
sltu $t0, $s0, $s1 # if $s0 < $s1 then $t0=1 ...
sltiu $t0, $s0, 25 # if $s0 < 25 then $t0=1 ...
33 2
Pseudo-instructions pour les sauts
On peut utiliser slt, beq, bne, et la valeur $zero pour créer
d’autres conditions
less than blt $s1, $s2, Label
34
Instructions pour l’accès aux procédures
Instruction d’appel de la procédure :
Règles:
36
Exemple de Procédure
Code C: ProcEx:
int ProcEx (int g, h, i, j) addi $sp, $sp, -4
{ int f;
f = (g + h) - (i + j); sw $s0, 0($sp)
return f;
}
add $t0, $a0, $a1
Arguments g, …, j dans
$a0, …, $a3 add $t1, $a2, $a3
f dans $s0 sub $s0, $t0, $t1
Résultat dans $v0
add $v0, $s0, $zero
lw $s0, 0(sp)
addi $sp, $sp, 4
jr $ra
37