Architecture des ordinateurs
Daniel Tschirhart - TP Architecture des ordinateurs 2/4
Exercice 1
a) Dans le répertoire SOURCES. Ecrire un programme (e1.asm) en langage assembleur x86 effectuant l'opération
suivante sur 16 bits : RES = D1 + D2.
D1 est initialisé avec 1234H et D2 avec 4567H dans la zone initialisée .data. Res est placé dans la zone non
initialisée .data? (voir les syntaxes des déclaration D1, D2 et RES en annexe).
Le code sera placé à partir de DoIt.
Se servir comme base de départ du fichier modèle.asm, puis sauvegarder le sous E1.asm.
b) Ouvrir une fenêtre de commande dans le répertoire SOURCES (sélectionner le répertoire, touche et clic droit
Ouvrir une fenêtre de commande ici). Assembler le programme par la commande asm E1 (faire contrôle C à la
fin de l'assemblage pour ne pas faire l'édition des liens).
c) Editer le fichier e1.lst et E1.map
1. Quelle est la taille totale des données
2. Quelle est la taille totale de votre code
3. Quelle sont les données relocalisées
4. Donner le code de l'instruction Call DoIt. Justifier les deux derniers octets du code de cette instruction.
d) Tester le programme avec la commande dbg e1
1. Donner l'adresse mémoire absolue du programme.
2. Exécuter le programme mode pas à pas (F7) et observer la valeur des registres et des indicateurs.
Exercice 2 : e2.asm
a) Sauvegarder E1.asm sous E2.asm.
b) Quelle est la valeur minimale de D2 qui additionnées à D1 provoque une retenue. Définir cette valeur dans le
programme. Modifier D2 avec la valeur calculée.
c) Assembler (asm e2) puis exécuter (dbg e2) le programme en mode trace pour vérifier votre calcul (observer la
valeur des registres et des indicateurs). Faire une copie d’écran des registres et des indicateurs après l’exécution
de l’instruction Add AX, D2.
Exercice 3
Soit le programme assembleur suivant (nota toutes les données sont en base hexadécimale).
Ce programme initialise la zone mémoire constitué d’un tableau de données 16bits situé à partir de
l’adresse 2000H avec l’entier 16 bits 1.
L’instruction Int 20 arrête le programme. Nota [valeur] ou [registre] indique contenu mémoire pointé (indiqué)
par valeur ou registre.
a) Que fait l’instruction située à l’adresse 0C94:106. Nota : le terme WORD PTR signifie que la donnée transférée
à l’adresse indiquée par [BX] doit être considéré comme un mot de 16bits (BYTE PTR indique un mot pointé de
8 bits). Pour quelle raison faut-il préciser WORD PTR dans cette instruction ?
b) Pour l’instruction située à l’adresse 0C94:10A, justifier le fait que l’on ajoute 2 à BX (au lieu de simplement
incrémenter (ajouter 1 à) BX).
c) Donner la taille en octets de la zone mémoire initialisée.
d) Ecrire un programme E3.asm initialisant à 0 (format 8 bits), une zone mémoire .DATA? de longueur 31 octets.
Déclaration de la zone mémoire : ZONE DB 31 DUP (?)
e) Assembler puis charger le programme en mémoire (asm e3 puis dbg e3).
Mettre un point d'arrêt après l'appel de DoIt (Breakpoint Toggle ou Breakpoint At) puis lancer le programme avec
la commande GO (F9). Faire une copie d'écran de la zone initialisée et la joindre dans votre rapport.
Exercice 4 : E4.asm
a) Enregistrer E3.asm sous E4.asm. Modifier le programme pour qu'il initialise 64 mots de 16 bits avec la valeur 1,
puis additionner les 64 mots de 16 bits adjacents et mémoriser la somme dans la variable 16 bits SOMME située
après la zone initialisée.
b) Assembler puis charger le programme en mémoire (asm e4 puis dbg e4).
Mettre un point d'arrêt après l'appel de DoIt (Breakpoint Toggle ou Breakpoint At) puis lancer le programme avec
la commande GO (F9). Faire une copie d'écran de la zone initialisée et du résultat et la joindre dans votre rapport.