TP 2 de programmation en assembleur

Exercice 1
Ecrire un programme assembleur qui saisit, caractère par caractère, une chaine de caractère, puis affiche le mot retourné (dernier caractère en premier, premier caractère en dernier).
La fin de la saisie pourra être déclenchée par le caractère espace.

Exercice 2
1. Ecrire un programme avec une procédure qui saisit un nombre entier positif et le stocke dans le registre EAX.
Quel sera la plus grande valeur possible pour un tel nombre ?
2. Ajouter une procédure supplémentaire au programme précédent pour qu'il affiche ensuite le nombre présent dans EAX.

Exercice 3
1. Ecrire un programme qui utilise l'instruction  texte : resb 5  pour stocker une chaîne de cinq caractères minuscules saisis au clavier, puis transforme cette chaîne en majuscules.
2. Peut-on aussi écrire une programme qui utilise l'instruction  texte : db 'abcdefghijkl'  et transforme cette constante en majuscule avant de l'afficher ?

Exercice 4
La fonction factorielle peut être définie récursivement par : 0!=1 et pour n>0 !n=n×(n-1).
1. Utiliser le programme de l'exercice précédent pour calculer récursivement n!
2. Comment gérer le dépassement de capacité si n! devient trop grand ?
3. La fonction de Fibonacci peut être définie récursivement par F(n≤1)=1 et F(n≥2)=F(n–1)+F(n–2).
En quoi cette fonction est-elle plus difficile à programmer que la fonction factorielle ?
Comment peut-on résoudre cette difficulté ?

Exercice 5
1. Créer un programme qui transfert dans EAX un nombre écrit sous forme texte avec l'instruction DB.
Comment gérer l'éventuel dépassement de capacité du registre ?
2. Ce programme affiche ensuite sous forme binaire le nombre présent dans EAX. (utiliser les opérations sur les bits des registres)

Exercice 6
1. Ecrire un programme qui détermine la valeur entière par défaut de la racine carrée d'un nombre entier naturel n (càd k tel que k2≤n<(k+1)2).
2. Utiliser ce programme pour créer un programme qui détermine si un entier naturel n est premier ou pas.
Le programme affichera "nombre premier" ou indiquera le premier facteur trouvé qui divise le nombre.
N.B. n est premier s'il n'est divisible par aucun nombre compris entre 2 et la racine entière par défaut de n.
3. Comment pourrait-on en assembleur déterminer sans faire de division si un entier positif placé dans le registre EAX est pair ?
© 2011-2015 – A. Guitton & A. Sigayret – 2016-09-21