Asm sur ordinateur
142
Assembleur
143
1. Introduction
Pour mieux comprendre la structure interne d'un ordinateur, nous aborderons la langage d'assemblage d'un processeur contemporain, le Pentium III d'Intel. Le but du cours n'est donc pas de faire de vous des programmeurs en assembleur. Qu'est-ce que l'assembleur ou le langage d'assemblage ? Pour obtenir une réponse à cette question, nous vous recommandons de lire à ce stade-ci le chapitre 13 du volume de Zanella et Ligier. Nous utilisons pour ce cours l'assembleur Masm32 de Microsoft disponible gratuitement sur le Web à l'adresse suivante : http:;www.pbq.com.au/home/hutch/masm.htm. Comme débogueur, nous recommandons le Enhanced Debugger d'Intel, également disponible gratuitement à l'adresse suivante : http:;developer.intel.com/vtune/compilers/cpp/demo.htm. Il est fourni avec le compilateur C/C++ 4.5 que vous pouvez utiliser avec Visual Studio de Microsoft si le cœur vous en dit. Vous pouvez également faire de l'assembleur dans le cadre d'un compilateur C/C++, comme dans Visual C/C++ de Microsoft. Dans ce cas, vous créez une fonction en C ou en C++, puis vous y insérez la commande _asm { }. Vous pouvez ensuite insérer entre les accolades autant d'instructions assembleur que vous désirez. Il faut donc déclarer la fonction comme si c'était une fonction C, puis faire la déclaration en question comme suit : long maFonction (long x) { _asm { mov eax, x somme: add eax, 4 } }
; place la valeur de x dans le registre eax ; additionne 4 à eax. ; le résultat est le contenu de eax.
Cette fonction peut ensuite être appelée par un programme principal :
Assembleur
144 void main() { long resultat; resultat = maFonction(75); } Vous remarquerez en passant la structure d'une instruction assembleur. Elle est constituée d'un opcode, par exemple mov, add, etc. et d'opérandes, par exemple, eax, x, ou 4. L'opérande de gauche est appelé opérande destination et c'est là que le résultat de l'instruction