TP Architecture et assembleur Codage numérique et arithmétique Eric Ramat [email protected] 17 octobre 2012 Durée : 3 heures (partie 1), 3 heures (partie 2) et 3 heures (partie 3) Ce premier TP va être l’occasion de manipuler les représentations binaires des nombres entiers signés et non signés et de développer des fonctions de calcul sur ces nombres. 1 Rappel Le programme minimal est le suivant : ;; compilation 32 bits [ BITS 32] ;; declaration des donnees section . data ;; section contenant le code section . text ;; declaration du symbole de point d ’ entree du programme global _start _start : mov mov int ebx ,0 eax ,1 0 x80 ; mise a zero du registre ebx Les outils à utiliser sont emacs (ou vim) pour l’écriture et la mise en forme du code, nasm pour la compilation de vos programmes et gdb pour le debuggage. Attention, les commentaires sont vitaux en assembleur. Tout programme non commenté et non indenté ne sera tout simplement pas lu. Toute déclaration de variables et d’instruction doit être décalée du début de ligne d’une tabulation (en général, 4 espaces). Les étiquettes (ou les labels) doivent être placées en début de ligne. Les commentaires sont placés soit après une instruction (séparée par une tabulation) soit sur une ligne ne comportant pas d’instruction. Dans le deuxième cas de figure, le commentaire est mis en début de ligne et débute par deux points-virgules. 1 2 Partie 1 Question 1. Développer l’addition du contenu du registre AX et BX sans utiliser l’instruction ADD. Seules les instructions de transfert (MOV), de décalage et d’opérations logiques doivent être utilisées. Le résultat doit être placé dans CX. Étape 1. Établir la table de vérité de l’addition sur un bit (c = a + b). Étape 2. Établir la table de vérité de l’addition sur un bit en tenant compte de la retenue (c = a+b+r). Étape 3. Établir la table de vérité de la retenue de l’addition sur un bit en tenant compte de la retenue. Étape 4. Ǵénéraliser sur 16 bits et traduire en assembleur. 3 Partie 2 Question 2. Déclarer une donnée de type tableau d’octets de longueur 10. Stocker dans les cases du tableau l’entier 1173862975 représenté sous sa forme décimale. Une case d’un tableau sera remplie par un chiffre du nombre global. Cet entier est représentable en binaire avec un nombre de 32 bits car il est inférieur à 232 − 1. Développer la fonction de conversion décimale vers binaire (le résultat doit être placé dans AX) puis la fonction de conversion binaire (le nombre binaire est dans AX) vers décimale (le résultat sera dans un tableau d’octets). 4 Partie 3 Question 3. Développer maintenant la multiplication en respectant les mêmes contraintes que la question 2. Question 4. L’addition et la multiplication peuvent s’appliquer seulement sur des données 8, 16 ou 32 bits. Développer l’addition et la multiplication sur des zones mémoires de taille quelconque. Pour cela, déclarer des tableaux d’octets d’une taille supérieure à 4 et initialiser les cases par la représentation hexadécimale des nombres que vous voulez additionner ou multiplier. 2