Académique Documents
Professionnel Documents
Culture Documents
MIPS
P&H : 2.12, 2.5-2.10, A.1-A.4
MIPS
P&H : 2.12, 2.5-2.10, A.1-A.4
À savoir EDSAC
IBM 701
1
1
Accumulateur
Accumulateur
1949
1953
CDC 6600 8 Load-Store 1963
IBM 360 18 Registre-Mémoire 1964
Le nombre de registres DEC PDP-8 1 Accumulateur 1965
Objectif :
Comment réduire la complexité de l'ISA tout en maintenant ou en
augmentant les performances ?
Efficacité énergétique
Ordinateurs de Bureau
Systèmes embarqués
Serveurs
Smartphones/Tablettes
RISC vs CISC
Les machines CISC utilisent des instructions très complexes
• Nécessaire pour réduire la taille des programmes afin de tenir dans des
mémoires limitées.
• Mais cela a considérablement accru la complexité de l’ISA (et par transition le
cout de fabrication des processeurs)
À l’époque, l’architecture CISC était nécessaire car tout le monde
programmait en assembleur et/ou en code machine !
Aujourd’hui, les ISA du CISC dominent toujours le marché en raison de la
prévalence des processeurs x86 (Intel et AMD). Cependant, les
processeurs RISC actuels, tel que ARM (basé sur le MIPS), ont une part
de marché croissante dans notre vie quotidienne
Ce que nous allons voir aujourd’hui
Instruction Set Architecture (ISA)
P&H : 2.16-2.18, et 2.21
o Bref historique sur l’ISA
o CISC et RISC
MIPS
P&H : 2.12, 2.5-2.10, A.1-A.4
Sony PS2
295 MHz MIPS R5900 and MIPS
Tesla model S (MIPS I-class) NEC-Cenju-4 supercomputer –
R3000 for PsOne compatibility
1,024 MIPS R10000
Le MIPS R3000
32 registres au total
Tous les registres du MIPS R3000
ont une taille de 32 bits.
24 registres programmables
8 registres dédiés
Dans l’assembleur MIPS, un $
précède le nom du registre
Les registres du MIPS - Convention
Logicielle
Numéro Nom remarque
$0 $0 ou $zero Toujours égal à 0
$1 $at Réservé (utilisé par l’Assembleur.)
Arguments pours les appels systèmes (syscall) ou résultats retournés
$2 - $3 $v0 - $v1
par une fonction.
$4 - $7 $a0 - $a3 Arguments pour les appels de fonctions.
$8 - $15 et $24 - $25 $t0 - $t9 Registres temporaires.
$16 - $23 $s0 - $s7 Registres pour variables locales - à préserver par la fonction appelée.
$26 - $27 $k0 - $k1 Réservé pour le Mode Superviseur (Kernel mode) du processeur.
$28 $gp Globals Pointer – Pointeur sur le segment data de la mémoire.
$29 $sp Stack Pointer – Pointeur de pile
$30 $fp ou $s8 Frame Pointer (on va ignorer ce registre dans ce cours)
Utilisé implicitement par les instructions d’appel de fonctions bgezal,
$31 $ra bltzal et jal pour la sauvegarde de l’adresse de retour.
Le jeu d’instructions de l’architecture
MIPS
ISA
ISA du
du MIPS
MIPS R3000
R3000
Dispose
Dispose de
de 57
57 instructions
instructions ::
Toutes
Toutes les
les instructions
instructions sont
sont sur
sur 32
32 bits
bits
33
33 instructions
instructions arithmétiques
arithmétiques ou
ou
logiques
logiques entre
entre registres
registres ;;
12
12 instructions
instructions de
de contrôle
contrôle
(branchement
(branchement mémoire)
mémoire) ;;
77 instructions
instructions de
de transfert
transfert de
de données
données ;;
55 instructions
instructions d’appel
d’appel systèmes.
systèmes.
Le jeu d’instructions de l’architecture
MIPS
31 25 0
26
31 25 20 15 10 6 5 0
26 21 16 11
Exemples
Exemples: :
add
add$18,
$18,$8,
$8,$17
$17 ##$18
$18:=:=$8
$8 ++$17
$1710010
000000 01000 10001 00000 100000
and
and$12,
$12,$10,
$10,$11
$11 ##$12
$12:=:=$10
$10 and
and$11
$11
000000 01010 01011 01100 00000 100100
Format d’instructions « I – type »
Opérations
Opérations « registre
« registre –– immédiat »
immédiat »
Manipulation
Manipulation de
de constantes,
constantes, transfert
transfert d’informations,
d’informations, branchements
branchements conditionnels
conditionnels
31 25 20 15 0
26 21 16
Exemples
Exemples: :
lw
lw$9,
$9,100($8)
100($8) ##$9
$9 :=:=mem
mem 4[100
4[100++($8)]
($8)]
100011 01000 01001 0000 0000 0110 0100
addi
addi$11,
$11,$10,
$10,2017
2017 ##$11
$11:=:=$10
$10 ++2017
2017
001000 01010 01011 0000 0111 1110 0001
Format d’instructions « J – type »
Opérations
Opérations « adresse
« adresse ou
ou offset
offset de
de branchement »
branchement »
Branchement
Branchement inconditionnel
inconditionnel
31 25 0
26
Exemples
Exemples: :
j j200
200 ##$pc
$pc :=:=$pc
$pc 31..28 ||200
31..28 200 xx44
000010 0000 0000 1100 1000
jal
jal200
200 ##$31
$31 :=:=$pc
$pc ; ; $pc
$pc:=:=$pc
$pc31..28 ||200
31..28 200xx44
000011 0000 0000 1100 1000
Assemblage d’instructions MIPS
À l’aide de votre fascicule, convertissez les instructions assembleurs
suivantes en code machine :
opcode rs rt Imm
andi $14, $9, 2 0011 0001 0010 1110 0000 0000 0000 0010
opcode rs rt Imm
lw $5, 72($2) 1000 1100 0100 0101 0000 0000 0100 1000
opcode rs rt rd sh func
addu $10, $2, $17 0000 0000 0101 0001 0101 0000 0010 0001
opcode rs rt rd sh func
sra $2, $18, $4 0000 0000 0001 0010 0001 0001 0000 0011
Assemblage d’instructions MIPS
À l’aide de votre fascicule, convertissez les instructions assembleurs
suivantes en code machine :
opcode rs rt Imm
andi $t6, $t1, 2 0011 0001 0010 1110 0000 0000 0000 0010
opcode rs rt Imm
lw $a1, 72($v0) 1000 1100 0100 0101 0000 0000 0100 1000
opcode rs rt rd sh func
addu $t2, $v0, $s1 0000 0000 0101 0001 0101 0000 0010 0001
opcode rs rt rd sh func
sra $v0, $s2, $a0 0000 0000 0001 0010 0001 0001 0000 0011
Ce que nous allons voir aujourd’hui
Instruction Set Architecture (ISA)
P&H : 2.16-2.18, et 2.21
o Bref historique sur l’ISA
o CISC et RISC
MIPS
P&H : 2.12, 2.5-2.10, A.1-A.4
Quelle horreur !!
Du code machine aux langages de haut
niveau
Ça pullule !!
Chargement
Chargement
Calcul
Calcul final
final des
des adresses.
adresses.
Exécution (SE) Code machine
Exemple : Du code C en Code Machine
Sources dans p1.c p2.c
Programme C (p1.c p2.c) text
dans le fichier p
Static libraries Linker (gcc ou ld)
(.a)
Programme Executable (p) binaire
Exemple : Du code C en Code Assembleur
Source C (sum.c) Code Assembleur généré (x86-64)
long plus(long x, long y);
sumstore:
pushq %rbx
void sumstore(long x, long y,
movq %rdx, %rbx
long *dest)
call plus
{
movq %rax, (%rbx)
long t = plus(x, y);
popq %rbx
*dest = t;
ret
}
Obtenu avec la commande
gcc –Og –S sum.c
Fichier produit : sum.s
Outil de désassemblage
objdump –d sum
• Utile pour examiner le code machine
• Permet d’analyser des series de bits d’instructions
• Produit une interpretation approximative du Code Assembleur
• Peut être executer sur a.out (exécutable) ou sur fichier objet .o
Outil alternatif de désassemblage
Exemple de code désassemblé
Dump of assembler code for function sumstore:
0x0000000000400595 <+0>: push %rbx
0x0000000000400596 <+1>: mov %rdx,%rbx
0x0000000000400599 <+4>: callq 0x400590 <plus>
0x000000000040059e <+9>: mov %rax,(%rbx)
0x00000000004005a1 <+12>:pop %rbx
0x00000000004005a2 <+13>:retq
No symbols in "WINWORD.EXE".
Disassembly of section .text:
30001000 <.text>:
30001000: 55 push %ebp
30001001: 8b ec Microsoft
mov interdit%esp,%ebp
30001003: 6a ff l’ingénierie inverse
push(i.e. reverse engineering)
$0xffffffff
30001005: 68 90 10 00 30 push dans $0x30001090
3000100a: 68 91le contrat
dc 4cde30 licence
pushde l’utilisateur final (EULA)
$0x304cdc91