TRAVAUX ARCHITECTURE
DIRIGES DES ORDINATEURS
Architecture des ordinateurs-TD1
Exemple : l’utilisateur tape « 1234. », l’ordinateur doit afficher ensuite « 4 chiffres dont la somme est egale
a 10 ».
10. Comment réserver 100 octets pour y ranger une chaîne de caractères ? Trouver dans
les exemples d’assembleur les instructions nécessaires
Comment procéder à la lecture (2 solutions) ? Combien de lettres « utiles » pourront être
tapées au maximum par l’utilisateur ?
Comment faire pour réafficher la chaîne à l’écran ?, puis affichant le nombre de
caractères tapés par l’utilisateur.
11. Comment réserver 5 cases de 32 bits (4 octets) chacune, pour y stocker 5 valeurs entières
tapées successivement au clavier par l’utilisateur ?
Comment calculer leur somme, puis l’afficher ? Ecrire un algorigramme réalisant ces
opérations.
12. Ecrire un algorigramme qui permet à l’utilisateur de taper un message de moins de 500
lettres (octets), puis qui le code en substituant chaque lettre minuscule, une par une, par celle
symétrique dans l’alphabet (ex : az, by, cx…), et qui affiche, au final, le message codé.
Le programme ne doit pas changer les lettres autres que les minuscules.
Comment peut on procéder au décodage ? Essayer avec le message suivant : « Czvhzi
hvizrg urvi wv elfh ! ».
Masque
13. On veut forcer les bits 2, 4 et 7 de la valeur contenue dans le registre AL à être mis à un.
Comment procéder ?
14. Même question que la 13, mais pour forcer les bits à être à zéro.
15. On veut écrire une routine qui saute à l’adresse plouf si les bits numéro 2, 4 et 7 de la
représentation binaire de la valeur contenue dans le registre AL sont tous les trois à zéros, et
saute à l’adresse wizz sinon. Comment isoler les valeurs de ces bits, et comment procéder
pour le saut ?
Manipulations basiques de la pile
16. En vous servant de push et pop, écrire une routine « swap_ab » qui échange les valeurs
contenues dans les registres eax et ebx sans modifier d’autres registres et sans réserver de
mémoire ni en section .data, ni en section .bss. Exécuter la routine à la main, en faisant
des schémas représentatifs de l’état de la pile après chaque opération.
17. Ecrire une routine « ear1 » qui écrit en hexadécimal à l’écran, l’adresse à laquelle elle
effectuera son retour. (Indication : étudier le fonctionnement des instructions call et ret).
Faire comme précédemment des diagrammes illustrant l’état de la pile après chaque opération.
18. Ecrire une routine « ear2 » qui répond à la même question que précédemment, mais en
prenant garde à ne pas détruire la valeur contenue dans eax avant l’appel de la routine. Faire,
ici aussi, les schémas.