Upload
others
View
4
Download
0
Embed Size (px)
Citation preview
Conception et exploitation des processeurs
Chargés de cours : Frédéric Pétrot et Sébastien Viardot
Année universitaire 2011-2012
Conception et exploitation des processeurs
Structure du cours
C1 Introduction au VHDLC2 Introduction aux langages d'assemblage
pour les ISA x86 et MIPSC3 Conventions pour les appels de fonctions
en assembleur x86 et MIPS
2 / 32
Conception et exploitation des processeurs
Introduction
Plan
1 Introduction
2 Introduction à l'assembleur x86
3 Introduction à l'assembleur MIPS
4 Traduction systématique des structures de contrôle
5 Vue mémoire
6 Informations techniques
3 / 32
Conception et exploitation des processeurs
Introduction
Introduction
Étude du langage d'assemblage de 2 processeurs
Intel x86 (pentium)
ISA hégémonique, desktops, laptops et serveursConstructeur Intel a, compatibilité ascendante depuis 1979Machine CISC : Complex Instruction Set Computer
a. www.intel.com
MIPS R3000
ISA symbolique RISC : Reduced Instruction Set ComputerConstructeur MIPS a, 1988Importante part de marché dans l'embarqué (networking enparticulier), mais nettement moins que ARM b, favori dessmartphones et autres tablettes.
a. www.mips.com
b. www.arm.com 4 / 32
Conception et exploitation des processeurs
Introduction
Introduction
CISC Intel x86
jeu d'instruction � proli�que �, 425 en 2004 sans lesextensions multimédia et 64 bits
destiné à être programmé par un humain
vise un code � compréhensible � et dense
nombreux modes d'adressage
opérandes peuvent être des cases mémoire
registres spécialisés par le matériel
cherche à optimiser la taille du programme par l'utilisationd'instructions complexes
5 / 32
Conception et exploitation des processeurs
Introduction
Introduction
RISC MIPS R3000
jeu d'instruction minimaliste, 65 dans le R3000, moins de 80dans ses évolutions
destiné à être la cible d'un compilateur
instruction de taille �xe menant à une occupation mémoire duprogramme plus grande
registres à usage général, utilisation logicielle conventionnelle
un mode d'adressage unique, architecture load/store
opérande = registre
6 / 32
Conception et exploitation des processeurs
Introduction
Introduction
Programmation assembleur
Langage traduit en binaire compréhensible par la machineTransformation fondamentalement syntaxique
caractéristiques di�érentes
important de connaître les deux types
Attention !
Ne pas confondre les 2 assembleurs ! ! !
7 / 32
Conception et exploitation des processeurs
Introduction à l'assembleur x86
Plan
1 Introduction
2 Introduction à l'assembleur x86
3 Introduction à l'assembleur MIPS
4 Traduction systématique des structures de contrôle
5 Vue mémoire
6 Informations techniques
8 / 32
Conception et exploitation des processeurs
Introduction à l'assembleur x86
ISA x86 : Registres
Registre bits bits Remarque32 bits 15 à 8 7 à 0%eax %ax parfois spécialisé
%ah %al
%ebx %bx parfois spécialisé%bh %bl
%ecx %cx parfois spécialisé%ch %cl
%edx %dx parfois spécialisé%dh %dl
%esi %si parfois spécialisé%edi %di parfois spécialisé%esp %sp pointeur de pile%ebp %bp pointeur de contexte%eip %ip pointeur d'instruction
%eflags %flags registre des indicateurs
Considérés comme
registres à usage
général durant ce
cours
Attention, ils
peuvent être utili-
sés implicitement
par certaines ins-
tructions que nous
n'étudierons pas
9 / 32
Conception et exploitation des processeurs
Introduction à l'assembleur x86
ISA x86
Adresses
Sur 32 bits, de 0x0000_0000 à 0xFFFF_FFFF
Données
Sur 32, 16 ou 8 bits
Instruction contient information de taille
Organisation mémoire little endian
Valeur 0x12345678 stockée en 0xDEAD_BEECAdresse 0xDEADBEEC 0xDEADBEED 0xDEADBEEE 0xDEADBEEF
Valeur 0x78 0x56 0x34 0x12
10 / 32
Conception et exploitation des processeurs
Introduction à l'assembleur x86
Instructions
Sous-ensemble pour commencer, ...
Su�xes
Précisent la taille de la valeur manipulée par l'instruction
l (long) : 32 bits
w (word) : 16 bits
b (byte) : 8 bits
Copies entre éléments mémorisants
movsu�xe source, destination
entre registres : movl %eax, %ebx ebx ← eax
registre vers mémoire : movb %al, v mem[v ]7..0 ← al
mémoire vers registre : movw u, %bx bx15..0 ← mem[u]15..0constante vers registre : movb $45, %dh dh7..0 ← 45
const. vers mém. : movl $0x1234, t mem[t]31..0 ← 0x00001234
mémoire vers mémoire : impossible11 / 32
Conception et exploitation des processeurs
Introduction à l'assembleur x86
Instructions
Les plus courantes, ...
Arithmétiques
addw %ax, %bx bx ← bx + ax
subb $20, %al al ← al − 20
negl %eax eax ← −eaxshll $1, %eax eax ← eax30..1|| 0shrl $4, %ebx ebx ← 04|| ebx31..4sarl $12, %ebx ebx ← ebx12
31|| ebx31..12
Logiques
andw $0xD0D0, %cx cx ← cx and 0xD0D0
orb $0xFA, %al al ← al or 0xFA
xorl %eax, %eax eax ← eax xor eax
notl %ecx ecx ← ecx
12 / 32
Conception et exploitation des processeurs
Introduction à l'assembleur x86
Instructions
Les plus courantes, ...
Comparaisons
cmpl $5, %eax e�ags ← �ags(eax − 5)
testb $0x01, %bl e�ags ← �ags(1 and bl)
Branchements
Décision prise en fonction du contenu des �ags
jmp label ip ← label
jxx label ip ←
{label si xx est vraie,
adresse instruction suivante si non xx
13 / 32
Conception et exploitation des processeurs
Introduction à l'assembleur x86
Instructions
Les plus courantes, ...
Branchements
Comparaison Entiers naturels Entiers signés> ja, jnbe jg, jnle
≥ jae, jnb jge, jnl
< jb, jnae jl, jnge
≤ jbe, jna jle, jng
= je, jz
6= jne, jnz
n not, a above, b below, g greater, l less, e equal, z zero
14 / 32
Conception et exploitation des processeurs
Introduction à l'assembleur MIPS
Plan
1 Introduction
2 Introduction à l'assembleur x86
3 Introduction à l'assembleur MIPS
4 Traduction systématique des structures de contrôle
5 Vue mémoire
6 Informations techniques
15 / 32
Conception et exploitation des processeurs
Introduction à l'assembleur MIPS
ISA MIPS
Registre Remarque32 bits$0 registre trash (peut être écrit, zéro en lecture)
$1-$30 non spécialisés$31 contient l'adresse de retour de fonction
Adresses
Sur 32 bits, de 0x0000_0000 à 0xFFFF_FFFF
Données
Sur 32, 16 ou 8 bits
Seules les instructions de chargement ou de stockage mémoirecontiennent information de taille
Organisation mémoire little endian
16 / 32
Conception et exploitation des processeurs
Introduction à l'assembleur MIPS
ISA MIPS
Sous-ensemble pour commencer, ...
Su�xes pour les chargements/stockages mémoire
Précisent la taille de la valeur manipulée par l'instruction
w (word) : 32 bitsh (half) : 16 bitsb (byte) : 8 bits
Copies entre éléments mémorisants
entre registres : add $3, $2, $0 $3← $2reg. vers mém. : sw $12, 96($5) mem[$5+ 96]31..0 ← $12mém. vers reg. : lb $2, -15($1) $2← 024||mem[$1− 15]7..0const. vers reg. : ori $3, $0, 0xBEEF $3← 016||0xBEEFconst. vers demi-mot poids fort reg. :lui $4, 0xDEAD $4← 0xDEAD||016const. vers mém. : impossiblemém. vers mém. : impossible 17 / 32
Conception et exploitation des processeurs
Introduction à l'assembleur MIPS
Instructions
Les plus courantes, ...
Arithmétiques
add $4, $12, $23 $4← $12+ $23
sub $14, $9, $30 $14← $9− $30
addi $2, $17, -1 $2← $17− 1
sllv $1, $12, $7 $1← $1231−$74...0...0 ‖ 0$74...0sra $4, $3, 9 $4← $39
31‖ $331...9
Logiques
and $14, $9, $30 $14← $9 and $30
ori $4, $3, 0xFF $4← $3 or 016||0x00FFxori $1, $12, 0xAAAA $1← $12 xor 016||0xAAAAnor $4, $12, $23 $4← $12 or $23
18 / 32
Conception et exploitation des processeurs
Introduction à l'assembleur MIPS
Instructions
Les plus courantes, ...
Comparaisons
sltu $4, $12, $23 $4←
{031 ‖ 1 si 0||$12 < 0||$23,032 sinon
slti $2, $17, -1 $2←
{031 ‖ 1 si $17 < 116||0xFFFF ,032 sinon
Branchements inconditionnels (sauts)
j label pc ← label
jr $31 pc ← $31
19 / 32
Conception et exploitation des processeurs
Introduction à l'assembleur MIPS
Instructions
Les plus courantes, ...
Branchements conditionnels
beq $2, $3, label
pc ←
{label si $2 = $3,
adresse instruction suivante sinon
bne $2, $3, label
pc ←
{label si $2 6= $3,
adresse instruction suivante sinon
blez $2, label pc ←
{label si $2 ≤ 0,
adresse instruction suivante sinon
bgtz $2, label pc ←
{label si $2 > 0,
adresse instruction suivante sinon
20 / 32
Conception et exploitation des processeurs
Traduction systématique des structures de contrôle
Plan
1 Introduction
2 Introduction à l'assembleur x86
3 Introduction à l'assembleur MIPS
4 Traduction systématique des structures de contrôle
5 Vue mémoire
6 Informations techniques
21 / 32
Conception et exploitation des processeurs
Traduction systématique des structures de contrôle
Traduction systématique des structures de contrôle
if
C :
int x = ...;
if (x == 5) {
x += 2;
} else {
x -= 4;
}
x86 :
; x est dans %eax
if: cmpl $5, %eax
jne else
addl $2, %eax
jmp endif
else: subl $4, %eax
endif: ...
MIPS :
; x est dans $4
if: li $1, 5
bne $4, $1, else
addi $4, $4, 2
j endif
else: addi $4, $4, -4
endif: ...
22 / 32
Conception et exploitation des processeurs
Traduction systématique des structures de contrôle
Traduction systématique des structures de contrôle
while
C :
int x = ...;
while (x > 5) {
x -= 1;
}
x86 :
while:
cmpl $5, %eax
jle endwhile
subl $1, %eax
jmp while
endwhile: ...
MIPS :
while:
slti $1, $4, 6
bne $1, $0, endwhile
addi $4, $4, -1
j while
endwhile: ...
23 / 32
Conception et exploitation des processeurs
Traduction systématique des structures de contrôle
Traduction systématique des structures de contrôle
for, équivalent structuré du while
C :
int x = ...;
unsigned int i;
for (i = 0;
i < 5;
i++) {
x = x + 4;
}
x86 :
movl $0, %ecx
for:
cmpl $5, %ecx
jae endfor
addl $4, %eax
addl $1, %ecx
jmp for
endfor:
MIPS :
li $2, $0
for:
slti $1, $2, 5
beq $1, $0, endfor
addi $4, $4, 4
addi $2, $2, 1
j for
endfor: ...
24 / 32
Conception et exploitation des processeurs
Traduction systématique des structures de contrôle
Premier programme : pgcd
C :
int main(void)
{
unsigned a, b;
a = 15;
b = 10;
while (a != b) {
if (a < b) {
b = b - a;
} else {
a = a - b;
}
}
return 0;
}
x86 :
.globl main
main:
enter $0, $0
movl $15, %ecx
movl $10, %edx
while:
cmpl %ecx, %edx
je endwhile
if:
jb else
subl %ecx, %edx
jmp endif
else:
subl %edx, %ecx
endif:
jmp while
endwhile:
leave
movl $0, %eax
ret
MIPS :
.globl main
main:
addi $4, $0, 15
addi $5, $0, 10
while:
beq $4, $5, endwhile
if:
slt $1, $4, $5
beq $1, $0, else
sub $5, $5, $4
j endif
else:
sub $4, $4, $5
endif:
j while
endwhile:
addi $2, $0, 0
jr $31
25 / 32
Conception et exploitation des processeurs
Traduction systématique des structures de contrôle
Éclaircissements
.globl main étent la visibilité de l'étiquette main aux autres�chiers
prologue et épilogue de fonction minimaux :
x86enter $0,$0
...
leave
; retourne zéro
movl $0, %eax
ret
MIPS...
; retourne zéro
addi $2, $0, 0
; $31 contient l'adresse
; de retour de la fonction
jr $31
Permet de faire tourner vos premiers programmesClari�cation complète au Cours 3 !
26 / 32
Conception et exploitation des processeurs
Vue mémoire
Plan
1 Introduction
2 Introduction à l'assembleur x86
3 Introduction à l'assembleur MIPS
4 Traduction systématique des structures de contrôle
5 Vue mémoire
6 Informations techniques
27 / 32
Conception et exploitation des processeurs
Vue mémoire
Exécutable en mémoire
Exécutable constitué de 4 parties
Code
Directive .text
En lecture seulementCommence � en bas � de la mémoire
Données connues statiquement
Directive .data
Variables globales initialisées au lancementEn lecture/écritureDirective .lcomm
Variables globales non explicitement initialisées, initialisées àzéro au lancementEn lecture/écriture
28 / 32
Conception et exploitation des processeurs
Vue mémoire
Exécutable en mémoire
Données connues statiquement
Directive .rodata
Constantes initialisées au lancementEn lecture seulement
Placées à la suite du code
Données allouées dynamiquement
Variables globales dont les adresses sont dé�nies à l'exécution
Placées à la suite des données initialisées
Pile
Gérée par le matériel et/ou le logiciel lors des appels de
fonctions
Commence � à la �n � de la mémoire
29 / 32
Conception et exploitation des processeurs
Vue mémoire
Résumé
0xFFFFFFFF...
0x........
0x........ pile
⇓......
⇑tas
⇑ .bss
0x........ .data
0x........ données .rodata
0x........ ⇑0x........ code .text
0x........
0x00000000...
0x00000000...
0x........
0x........ code .text
⇓0x........ .rodata
0x........ données .data
⇓ .bss
tas
⇓......
0x........ ⇑0x........ pile
0x........
0xFFFFFFFF...
30 / 32
Conception et exploitation des processeurs
Informations techniques
Plan
1 Introduction
2 Introduction à l'assembleur x86
3 Introduction à l'assembleur MIPS
4 Traduction systématique des structures de contrôle
5 Vue mémoire
6 Informations techniques
31 / 32
Conception et exploitation des processeurs
Informations techniques
Informations techniques
Nom de �chier
Historiquement
x.s : assembleur
x.S : préprocesseur C avant assembleur
Maintenant comportement identique : cpp+asm
Génération du binairegcc -gstabs -o x x.s
-gstabs : ajoute les information permettant de déverminer
-o file : donne le nom file au �chier produit
32 / 32