Introduction à l'assembleur
Instructions Questionnaire Support au questionnaire

Laboratoire d'introduction à l'assembleur

Le présent laboratoire est de nature analytique. Vous allez en effet devoir étudier le code assembleur correspondant à certaines parties d'un petit exécutable et à répondre à une série de questions concernant ce que vous y trouverez.

Il est présumé que vous avez au préalable fait--et compris--le laboratoire portant sur le dévermineur de VC, telle sorte que vous êtes maintenant habile à en faire usage (notamment les contrôles permettant de tracer le code pas à pas) et que vous comprenez en particulier le rôle des fenêtres "Memory", "Call Stack" et "Disassembly".

Étape 1: le code source

Créez un projet nommé "laboASM", dans lequel se trouvera un seul fichier source nommé "principal.cpp". Le contenu de ce dernier sera[1]:


const int MAX_COMPTEUR= 10;                                 //  (0)
int main ()
{
   int iCompteur= 0;                                        //  (1)
   unsigned short sSomme1= 0, sSomme2= 0;                   //  (2)
   while (iCompteur < MAX_COMPTEUR) // boucle while             (3)
   {
      sSomme1+= iCompteur++;                                //  (4)
      sSomme2= sSomme2 + sSomme1;                           //  (5)
   }
   sSomme1= sSomme2= 0;                                     //  (6)
   do // boucle do ... while                                    (7)
   {
      sSomme1= sSomme1+ iCompteur--;                        //  (8)
      iCompteur++;
      sSomme2= sSomme2+ --iCompteur;                        //  (9)
   } while (iCompteur > 0);                                 // (10)
   sSomme1= sSomme2= 0;
   // boucle for
   for (iCompteur= 0; iCompteur<MAX_COMPTEUR; iCompteur++)  // (11)
   {
      sSomme1 = sSomme1 + iCompteur;
   }                                                        // (12)
}

Prenez soin de compiler ce source et d'en générer l'exécutable avant de passer à l'étape 2. Soyez minutieuses/ minutieux dans votre entreprise, il en va de votre succès pour le reste de ce laboratoire.

Étape 2: tracer le code assembleur généré

Souvenez-vous que le code compilé d'un fichier source C++ (".cpp") est ce qu'on appelle du code objet (".obj"), et que le résultat de l'édition des liens des différents modules objets d'un projet de type "Win32 Console Application" est un exécutable (".exe").

Votre outil de travail ici sera le dévermineur de VC, et le sujet de votre analyse sera l'exécutable généré par la compilation.

Dans le cas qui nous intéresse, le seul module objet devrait être "principal.obj", et l'exécutable généré devrait être "laboASM.exe".

Votre tâche

Vous devrez remplir le rapport du questionnaire avec des réponses provenant de votre analyse personnelle du code assembleur généré par le compilateur pour ce programme. Annexez des pages de votre cru pour toute question relative à cet exercice et vous passant par la tête en chemin, ou si l'espace alloué ne vous convient pas.

Commencez à la ligne identifiée (1) dans le code.

Amusez-vous bien!


[1] Prenez note des numéros en commentaire à la droite du programme: ils seront utilisés comme référence dans le formulaire à remplir à la fin de ce laboratoire... Le code source est disponible en version "zip".