Automne 2002 Martin Dubois Programmation système IFT 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 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 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 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 Les outils de développement logiciel
Automne 2002 Martin Dubois Programmation système IFT 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 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 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 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 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 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 MASM32 Version décomercialisé de l’assembleur natif de MicroSoft Un éditeur conviviale à été ajouté : QEditor Site officiel : Très puissant – offre plus qu’un assembleur conventionnel
Automne 2002 Martin Dubois Programmation système IFT 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 Exemple 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 Utilisation MASM32 Assemblage Édition des liens Exécution Déverminage en utilisant Visual C++
Automne 2002 Martin Dubois Programmation système IFT Directive d’assemblage Obligatoire Définit le type de processeur Autres possibilités : 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 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 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 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 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 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 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 push 0 Instruction Placer la valeur 0 au sommet de la pile
Automne 2002 Martin Dubois Programmation système IFT 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 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 Ce qui nous manque encore Commentaires Définition de variables globales Définition de constantes
Automne 2002 Martin Dubois Programmation système IFT Les commentaires Tout ce qui suit un ; sur un ligne est considéré comme un commentaire ; Exemple02.asm ; //////////////////////////////////////////////////////////////////////////// ; IFT : Programmation systeme ; Martin Dubois - Automne 2002 ; Option de compilation ; ////////////////////////////////////////////////////////////////////////////.686 ; Type de processeur = P4.model flat, stdcall ; Un seul segment de 4 GB option casemap:none ; Tenir compte des majuscule-minuscule
Automne 2002 Martin Dubois Programmation système IFT 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 Les variables globales.data; Variable initialises db0; un octets initialise à 0 db“Toto”, 0; une chaine de caractere termine dw100; un mot initialise à 0 dw1, 2, 3; un tableau de 3 mots initialises dd456789abh; un double mot initialise à 0x456789ab dd10 dup(0); un tableau de 10 double mots tous ; initialise à 0.data?; Variables non initialisees db?; un octets non initialise dw10 dup(?); un tableau de 10 mots non initialise
Automne 2002 Martin Dubois Programmation système IFT Les constantes.const DIX equ 10 Ressemble aux #define du langage C ZERO db0 CENT dw100 Ressemble aux variables déclarés en utilisant le mot const
Automne 2002 Martin Dubois Programmation système IFT 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 Et encore… high expression highword expression low expression lowword expression
Automne 2002 Martin Dubois Programmation système IFT 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 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 Exemple 04 Programme principal généré par l’assistant de Visual C++ Module Fonction.asm
Automne 2002 Martin Dubois Programmation système IFT 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 Exemple04Dlg.cpp Déclaration de la fonction assembleur –Laissons croire au compilateur C++ que la fonction à été écrite en langage C extern “C” { voidFunction( void ) } Appel de la fonction assembleur –Difficile de faire plus simple Function()
Automne 2002 Martin Dubois Programmation système IFT 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 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 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 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++ »