Format PowerPoint

publicité
Semaine 02
• Retour sur la semaine 01
• Les outils de développement logiciel
• Les outils que nous utiliserons durant la
première partie
Automne 2002
Martin Dubois
Programmation système
IFT-17584
Retour sur la semaine 01
•
•
•
•
•
Plan de cours
Raisons de l’apprentissage de l’assembleur
Architecture des processeurs modernes
Architecture CISC vs RISC
Architecture du Pentium 4
Automne 2002
Martin Dubois
Programmation système
IFT-17584
L’assembleur
• Entrées
– Fichiers sources en langage assembleur
– Fichiers de définition
• Sortie
– Fichier objets
• Responsable de transformer le langage
assembleur en langage machine (binaire)
Automne 2002
Martin Dubois
Programmation système
IFT-17584
L’éditeur de liens
• Entrés
– Fichiers objets
– Librairies (assemblage de fichiers objets)
• Sortie
– Exécutable
• Responsable de trouver les dépendances
entre modules objets et de créer les liens.
Automne 2002
Martin Dubois
Programmation système
IFT-17584
Les outils de développement logiciel
Automne 2002
Martin Dubois
Programmation système
IFT-17584
Notre monde
• Pentium 4
• Première partie
– Windows 2000
– Visual C++
– MASM
• Seconde partie
– Linux
– Outils GNU (GCC et GAS)
Automne 2002
Martin Dubois
Programmation système
IFT-17584
Visual C++
•
•
•
•
•
Éditeur
Environnement de développement intégré
Compilateur C (CL.EXE)
Éditeur de liens (LINK.EXE)
Dévermineur
Automne 2002
Martin Dubois
Programmation système
IFT-17584
Les “Listing Files”
• Configuration du compilateur pour la
génération
• Utilités de ces fichiers
–
–
–
–
–
Apprentissage de l’assembleur
Déverminage de l’assembleur « inline »
Base d’optimisation
Génération des squelette de fonctions
Utilités historiques
Automne 2002
Martin Dubois
Programmation système
IFT-17584
L’assembleur “Inline”
• Avantages
– Simplicité
– Partage simple des variables du programme C
– Aucune préoccupation à propos de
l’organisation de la mémoire
– Aucune préoccupation à propos du passage des
arguments
– Aucune préoccupation de l’initialisation des
librairies systèmes
Automne 2002
Martin Dubois
Programmation système
IFT-17584
Les désavantages
• Aucun contrôle sur l’organisation de la
mémoire
• Aucun contrôle sur les méthodes utilisées
pour accéder aux variables
Automne 2002
Martin Dubois
Programmation système
IFT-17584
Utilités
Pédagogiques
• Test rapide d’une ou de quelques
instructions
Autres
• Réaliser un traitement court faisant appel à
des instructions spécialisés du processeurs
Automne 2002
Martin Dubois
Programmation système
IFT-17584
MASM32
• Version décomercialisé de l’assembleur
natif de MicroSoft
• Un éditeur conviviale à été ajouté : QEditor
• Site officiel : www.masm32.com
• Très puissant – offre plus qu’un assembleur
conventionnel
Automne 2002
Martin Dubois
Programmation système
IFT-17584
Installation de MASM32
• Téléchargez le fichier compresser
directement du site du cours
(\Outils\masmET.zip)
• Décompressez le de manière à ce que le
répertoire masm32 soit à la racine du
disque qui contiendra aussi vos programmes
assembleur
C’est terminé !
Automne 2002
Martin Dubois
Programmation système
IFT-17584
Exemple 01
.686
.model flat, stdcall
option casemap:none
include \masm32\include\kernel32.inc
includelib \masm32\lib\kernel32.lib
.code
start:
push 0
call ExitProcess
end start
Automne 2002
Martin Dubois
Programmation système
IFT-17584
Utilisation MASM32
•
•
•
•
Assemblage
Édition des liens
Exécution
Déverminage en utilisant Visual C++
Automne 2002
Martin Dubois
Programmation système
IFT-17584
.686
•
•
•
•
•
Directive d’assemblage
Obligatoire
Définit le type de processeur
Autres possibilités : .386 .486 .586
En ajoutant un P à la fin nous gagnons le
droit d’utiliser les instructions privilégiés.
Automne 2002
Martin Dubois
Programmation système
IFT-17584
.model flat, stdcall
• Directive d’assemblage
• Obligatoire
• Indique que nous utiliserons un seul
segment de 4 GB
• Indique aussi que la convention d’appel des
fonction sera celle du langage C standard
Automne 2002
Martin Dubois
Programmation système
IFT-17584
option casemap:none
• Directive d’assemblage
• Indique que la différence entre majuscule et
minuscule est importante
• Autres choix: all, notpublic
• Nécessaire pour l’interaction avec les
langages tel que le C
Automne 2002
Martin Dubois
Programmation système
IFT-17584
include \masm32\include\kernel32.inc
• include est la directive d’assemblage
permettant d’inclure un autre fichier source.
• \masm32\include\kernel32.inc et
le nom du fichier déclarant les fonctions de
la librairie “Kernel32”
• Cette directive ressemble en tous points à la
directive #include des langages C et
C++
Automne 2002
Martin Dubois
Programmation système
IFT-17584
includelib \masm32\lib\kernel32.lib
• includelib est la directive d’assemblage
qui indique qu’une librairie devra être lié
avec le fichier assembleur
• \masm32\lib\kernel32.lib est le
nom de la librairie
• Cette information n’est pas directement
utilisé par l’assembleur. Elle est simplement
transmise à l’éditeur de liens.
Automne 2002
Martin Dubois
Programmation système
IFT-17584
.code
• Directive de compilation
• Les instructions qui suivent doivent être
placés dans la section réservée aux
instructions exécutables
• Cette section peut toujours être lu et exécuté
• Plusieurs systèmes d’exploitation ne
permette pas l’écriture dans cette section.
Automne 2002
Martin Dubois
Programmation système
IFT-17584
Start:
• Symbole
• Ce symbole est reconnu par l’éditeur de
liens comme étant le point d’entrée du
programme
• Il remplace le main des langages C / C++
Automne 2002
Martin Dubois
Programmation système
IFT-17584
push 0
• Instruction
• Placer la valeur 0 au sommet de la pile
Automne 2002
Martin Dubois
Programmation système
IFT-17584
call ExitProcess
• Instruction
• Transférer le contrôle à la fonction
ExitProcess
• Habituellement l’exécution se continue à
l’instruction suivante quand la fonction
appelée rend le contrôle
• La fonction ExitProcess à cependant la
particularité de ne pas rendre le contrôle
Automne 2002
Martin Dubois
Programmation système
IFT-17584
end start
• Directive d’assemblage
• Indique la fin d’un fichier source
• Le symbole, si présent indique ou
l’exécution du programme doit débuter
Automne 2002
Martin Dubois
Programmation système
IFT-17584
Ce qui nous manque encore
• Commentaires
• Définition de variables globales
• Définition de constantes
Automne 2002
Martin Dubois
Programmation système
IFT-17584
Les commentaires
• Tout ce qui suit un ; sur un ligne est
considéré comme un commentaire
;
;
;
;
Exemple02.asm
////////////////////////////////////////////////////////////////////////////
IFT-17584 : Programmation systeme
Martin Dubois - Automne 2002
; Option de compilation
; ////////////////////////////////////////////////////////////////////////////
.686
.model flat, stdcall
option casemap:none
Automne 2002
Martin Dubois
; Type de processeur = P4
; Un seul segment de 4 GB
; Tenir compte des majuscule-minuscule
Programmation système
IFT-17584
Les commentaires (la suite)
; Includes
; ////////////////////////////////////////////////////////////////////////////
include \masm32\include\kernel32.inc
includelib \masm32\lib\kernel32.lib
; Debut du segment de code
; ////////////////////////////////////////////////////////////////////////////
.code
; ===== Start ================================================================
; Le point d'entree du programme
start:
push 0
; Nous desirons que le code retourne par le programme soit 0
call ExitProcess
end start
Automne 2002
Martin Dubois
Programmation système
IFT-17584
Les variables globales
.data
db
db
dw
dw
dd
dd
; Variable initialises
0
; un octets initialise à 0
“Toto”, 0
; une chaine de caractere termine
100
; un mot initialise à 0
1, 2, 3
; un tableau de 3 mots initialises
456789abh
; un double mot initialise à 0x456789ab
10 dup(0)
; un tableau de 10 double mots tous
; initialise à 0
.data? ; Variables non initialisees
db
?
; un octets non initialise
dw
10 dup(?)
; un tableau de 10 mots non initialise
Automne 2002
Martin Dubois
Programmation système
IFT-17584
Les constantes
.const
DIX equ 10
Ressemble aux #define du langage C
ZERO db
CENT dw
0
100
Ressemble aux variables déclarés en utilisant le mot const
Automne 2002
Martin Dubois
Programmation système
IFT-17584
D’autres directives
• align n
– Force un symbole à être aligné sur une adresse multiple
d’une puissance de 2 donnée
• extern symbol
– Indique qu’un symbole est définit dans un autre module
et utilisé dans celui-ci
• public symbol
– Indique qu’un symbole définit dans ce module est aussi
utilisé par un ou plusieurs autre modules
Automne 2002
Martin Dubois
Programmation système
IFT-17584
Et encore…
• high expression
• highword expression
• low expression
• lowword expression
Automne 2002
Martin Dubois
Programmation système
IFT-17584
Un programme tout en assembleur
• Avantages
– Parfait contrôle sur tout
– Espace utilisé et vitesse d’exécution optimale
• Désavantages
– Responsable de tout (initialisation, terminaison,
gestion de la mémoire)
– Utilisation des librairies standards plus
complexe
Automne 2002
Martin Dubois
Programmation système
IFT-17584
Le meilleur des deux mondes
• Ce qui serait bien c’est
– écrire l’ensemble du programme en langage de
haut niveau
– écrire les routines ou modules critiques en
assembleur
• Bonne nouvelle, c’est possible !
Automne 2002
Martin Dubois
Programmation système
IFT-17584
Exemple 04
• Programme principal généré par l’assistant
de Visual C++
• Module Fonction.asm
Automne 2002
Martin Dubois
Programmation système
IFT-17584
Fonction.asm
• Remarquez
–
–
–
–
plus de directive includelib
plus de symbole dans la directive end
la nouvelle directive public Fonction
le remplacement de l’appel de ExitProcess
par l’instruction ret
– Kernel32.inc n’est plus inclue
Automne 2002
Martin Dubois
Programmation système
IFT-17584
Exemple04Dlg.cpp
• Déclaration de la fonction assembleur
– Laissons croire au compilateur C++ que la
fonction à été écrite en langage C
extern “C”
{
void
Function( void )
}
• Appel de la fonction assembleur
– Difficile de faire plus simple
Function()
Automne 2002
Martin Dubois
Programmation système
IFT-17584
Et le partage des données alors ?
• Il est facile de partager des variables
globales
• C’est ce qui est fait dans l’exemple 05
• Nous apprendrons, plus tard dans ce cours,
comment passer des arguments lors d’un
appel assembleur – C ou C – assembleur.
Automne 2002
Martin Dubois
Programmation système
IFT-17584
Variable C utilisé en assembleur
• Déclaration
extern “C”
{
char gDlg_Message[ 64 ];
}
• Utilisation
extern gDlg_Message:
Automne 2002
Martin Dubois
Programmation système
IFT-17584
Variable assembleur utilisé en C
• Déclaration
.data?
public gFct_Titre
gFct_Titre db 32 dub(?)
• Utilisation
extern “C”
{
extern char gFct_Titre[ 32 ];
}
Automne 2002
Martin Dubois
Programmation système
IFT-17584
Petits trucs
• Simplifiez vous la tâche, n’utilisez qu’une
seule des deux méthodes dans un même
programme
• Personnellement je préfère déclarer mes
variables du cote « C / C++ »
Automne 2002
Martin Dubois
Programmation système
IFT-17584
Téléchargement