TP Architecture et assembleur Codage numérique et

publicité
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
Téléchargement