Support de cours

Transcription

Support de cours
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
C2
C3
Introduction au VHDL
Introduction aux langages d'assemblage
pour les ISA x86 et MIPS
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 serveurs
Constructeur Intel a , compatibilité ascendante depuis 1979
Machine CISC : Complex Instruction Set Computer
a. www.intel.com
MIPS R3000
ISA symbolique RISC : Reduced Instruction Set Computer
Constructeur MIPS a , 1988
Importante part de marché dans l'embarqué (networking en
particulier), mais nettement moins que ARM b , favori des
smartphones 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 prolique , 425 en 2004 sans les
extensions 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'utilisation
d'instructions complexes
5 / 32
Conception et exploitation des processeurs
Introduction
Introduction
RISC MIPS R3000
jeu d'instruction minimaliste, 65 dans le R3000, moins de 80
dans ses évolutions
destiné à être la cible d'un compilateur
instruction de taille xe menant à une occupation mémoire du
programme 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 machine
Transformation 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
32 bits 15 à 8 7 à 0
%eax
%ebx
%ecx
%edx
%esi
%edi
%esp
%ebp
%eip
%eflags
%ah
%bh
%ch
%dh
%ax
%bx
%cx
%dx
%al
%bl
%cl
%dl
%si
%di
%sp
%bp
%ip
%flags
Remarque
parfois spécialisé
parfois spécialisé
parfois spécialisé
parfois spécialisé
parfois spécialisé
parfois spécialisé
pointeur de pile
pointeur de contexte
pointeur d'instruction
registre des indicateurs
Considérés
registres
général
comme
à
usage
durant
ce
cours
Attention,
peuvent
sés
par
être
ils
utili-
implicitement
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_BEEC
Adresse
Valeur
0xDEADBEEC
0x78
0xDEADBEED
0x56
0xDEADBEEE
0x34
0xDEADBEEF
0x12
10 / 32
Conception et exploitation des processeurs
Introduction à l'assembleur x86
Instructions
Sous-ensemble pour commencer, ...
Suxes
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
movsuxe 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..0
constante vers registre : movb $45, %dh
dh7..0 ← 45
const. vers mém. : movl $0x1234, t mem[t ]31..0 ← 0x 00001234
mémoire vers mémoire : impossible
11 / 32
Conception et exploitation des processeurs
Introduction à l'assembleur x86
Instructions
Les plus courantes, ...
Arithmétiques
addw
subb
negl
shll
shrl
sarl
%ax, %bx
$20, %al
%eax
$1, %eax
$4, %ebx
$12, %ebx
Logiques
andw $0xD0D0, %cx
orb $0xFA, %al
xorl %eax, %eax
notl %ecx
bx ← bx + ax
al ← al − 20
eax ← −eax
eax ← eax30..1 || 0
ebx ← 04 || ebx31..4
12 || ebx
ebx ← ebx31
31..12
cx ← cx and 0xD 0D 0
al ← al or 0xFA
eax ← eax xor eax
ecx ← ecx
12 / 32
Conception et exploitation des processeurs
Introduction à l'assembleur x86
Instructions
Les plus courantes, ...
Comparaisons
eags ← ags (eax − 5)
eags ← ags (1 and bl )
cmpl $5, %eax
testb $0x01, %bl
Branchements
Décision prise en fonction du contenu des ags
jmp label
si
adresse instruction suivante si
(
jxx label
ip ←
label
ip ← label
xx est vraie,
non xx
13 / 32
Conception et exploitation des processeurs
Introduction à l'assembleur x86
Instructions
Les plus courantes, ...
Branchements
Comparaison Entiers naturels Entiers signés
>
≥
<
≤
=
6
=
n
not,
a
ja, jnbe
jae, jnb
jb, jnae
jbe, jna
je, jz
jne, jnz
jg, jnle
jge, jnl
jl, jnge
jle, jng
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 Remarque
32 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émoire
contiennent 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, ...
Suxes pour les chargements/stockages mémoire
Précisent la taille de la valeur manipulée par l'instruction
w (word) : 32 bits
h (half) : 16 bits
b (byte) : 8 bits
Copies entre éléments mémorisants
entre registres : add $3, $2, $0
$3 ← $2
reg. vers mém. : sw $12, 96($5)
mem[$5 + 96]31..0 ← $12
mém. vers reg. : lb $2, -15($1)
$2 ← 024 ||mem[$1 − 15]7..0
const. vers reg. : ori $3, $0, 0xBEEF
$3 ← 016 ||0xBEEF
const. vers demi-mot poids fort reg. :
lui $4, 0xDEAD
$4 ← 0xDEAD ||016
const. vers mém. : impossible
mé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
sub $14, $9, $30
addi $2, $17, -1
sllv $1, $12, $7
sra $4, $3, 9
Logiques
and $14, $9, $30
ori $4, $3, 0xFF
xori $1, $12, 0xAAAA
nor $4, $12, $23
4 12 23
14 9 30
2 17 1
12
0
4 3 3
$ ←$ +$
$ ←$ −$
$ ←$ −
$ ← $ 31−$74...0 ...0 k $74...0
$ ← $ 931 k $ 31...9
1
14
4 3 0
1 12 0
4
9
30
$ ← $ and $
$ ← $ or 16 || x FF
$ ← $ xor 16 || xAAAA
$ ← $ or $
0 00
0
12 23
18 / 32
Conception et exploitation des processeurs
Introduction à l'assembleur MIPS
Instructions
Les plus courantes, ...
Comparaisons
4
sltu $4, $12, $23
slti $2, $17, -1
2
031 k 1 si 0||$12 < 0||$23,
032
sinon
031 k 1 si $17 < 116 ||0xFFFF ,
032
sinon
(
$ ←
(
$ ←
Branchements inconditionnels (sauts)
j label
jr $31
pc ← label
pc ← $31
19 / 32
Conception et exploitation des processeurs
Introduction à l'assembleur MIPS
Instructions
Les plus courantes, ...
Branchements conditionnels
beq $2,
( $3, label
label
pc ←
si $2 = $3,
adresse instruction suivante sinon
bne $2,
( $3, label
label
pc ←
si $2 6= $3,
adresse instruction(suivante sinon
blez $2, label
bgtz $2, label
si $2 ≤ 0,
adresse instruction suivante sinon
(
label
si $2 > 0,
pc ←
adresse instruction suivante sinon
pc ←
label
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:
x86 :
MIPS :
int x = ...;
if (x == 5) {
x += 2;
} else {
x -= 4;
}
; x est dans %eax
if:
cmpl $5, %eax
jne else
addl $2, %eax
jmp endif
else: subl $4, %eax
endif: ...
; x est dans $4
if:
li $1,
bne $4,
addi $4,
j endif
else: addi $4,
endif: ...
5
$1, else
$4, 2
$4, -4
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 :
MIPS :
while:
cmpl $5, %eax
jle endwhile
subl $1, %eax
jmp while
endwhile: ...
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
x86 :
C:
int x = ...;
unsigned int i;
for (i = 0;
i < 5;
i++) {
x = x + 4;
}
movl $0, %ecx
for:
cmpl $5, %ecx
jae endfor
addl $4, %eax
addl $1, %ecx
jmp for
endfor:
MIPS :
li
$2,
for:
slti $1,
beq $1,
addi $4,
addi $2,
j for
endfor: ...
$0
$2,
$0,
$4,
$2,
5
endfor
4
1
24 / 32
Conception et exploitation des processeurs
Traduction systématique des structures de contrôle
Premier programme : pgcd
x86 :
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;
}
.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
étent la visibilité de l'étiquette main aux autres
chiers
prologue et épilogue de fonction minimaux :
x86
MIPS
.globl main
enter $0,$0
...
leave
; retourne zéro
movl $0, %eax
ret
...
; retourne zéro
addi $2, $0, 0
; $31 contient l'adresse
; de retour de la fonction
jr $31
Permet de faire tourner vos premiers programmes
Clarication 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 seulement
Commence en bas de la mémoire
Données connues statiquement
Directive .data
Variables globales initialisées au lancement
En lecture/écriture
Directive .lcomm
Variables globales non explicitement initialisées, initialisées à
zéro au lancement
En 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 lancement
En 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........
.
.
.
0x00000000
0x........
0x........
pile
⇓
0x........
0x........
.
.
.
.
.
.
⇑
tas
⇑
0x........
0x........
0x........
0x........
0x........
0x00000000
données
⇑
code
.
.
.
.bss
.data
.rodata
.text
.
.
.
code
⇓
données
⇓
tas
⇓
.text
.rodata
.data
.bss
.
.
.
.
.
.
0x........
0x........
0x........
0xFFFFFFFF
⇑
pile
.
.
.
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 binaire
gcc -gstabs -o x x.s
-gstabs
-o file
: ajoute les information permettant de déverminer
: donne le nom file au chier produit
32 / 32

Documents pareils