TD8 : Itérations en programmation
TD8 : Itérations en programmation
Nerzic
Dept Informatique TD8 - Itérations 2024-25
Ce TD explique comment programmer une itération, c’est à dire un traitement répété plusieurs
fois. Il y a traditionnellement plusieurs types d’itérations, qu’on appelle des « boucles ».
• boucle répéter jusqu’à
• boucle tant que
• boucle pour
Une seule est vraiment à connaître, la boucle tant que car toutes les autres peuvent être construites
avec. Par exemple, la boucle pour du langage C :
for (initialisation; condition; progression) {
instructions;
}
se transforme en :
initialisation;
while (condition) {
instructions;
progression;
}
1
IUT de Lannion Intro. à l’architecture des ordinateurs P. Nerzic
Dept Informatique TD8 - Itérations 2024-25
Le traitement est répété tant que la condition R0 == R1 n’est pas vraie. Il y a donc un branchement
au début du traitement lorsque la condition est fausse. L’instruction BNE saute à l’adresse fournie
si Z vaut 0 ; ça arrive quand la comparaison montre une différence entre les valeurs (R0 − R1 ̸= 0).
Relisez le TD7 concernant la programmation des conditionnelles. La différence ici, c’est qu’on
saute au début de la boucle au lieu de sauter au finsi.
Notez que la condition est vérifiée après avoir fait le traitement. Donc le traitement a lieu au
moins une fois.
répeter {instructions. . . } jusqu’à (condition) se programme ainsi :
... ; initialisations...
repeter: ; instructions...
La boucle s’arrête quand la condition est vraie, c’est à dire qu’il n’y a pas le saut au répéter.
2
IUT de Lannion Intro. à l’architecture des ordinateurs P. Nerzic
Dept Informatique TD8 - Itérations 2024-25
R0 = $54
repeter {
lire un nombre dans R1
si (R0 < R1) {
afficher -1 en utilisant R1
}
si (R0 > R1) {
afficher 1 en utilisant R1
}
} jusqu'à (R0 == R1)
afficher R0
Ce programme continue à demander un nombre tant qu’il n’est pas égal au nombre caché, mais il
vous aide en vous disant si le nombre caché est plus petit ou plus grand que votre proposition.
Remarquez que :
1. Les deux conditionnelles à l’intérieur du répéter sont indépendantes, mais on pourrait mettre
un sinon entre elles.
2. La valeur proposée par l’utilisateur dans R1 est perdue lors de l’affichage du +1 ou −1,
parce qu’on remplace R1 par 1 ou -1. Par contre, dans le cas où la réponse est bonne, on n’y
touche pas. Donc la comparaison finale reste correcte, sauf si malheureusement le nombre
caché est 1 ou −1.
Donc, l’algorithme peut être codé en n’utilisant que R0 et R1. Sinon, il aurait fallu employer une
cellule mémoire pour, par exemple stocker le nombre caché.
Rappel du TD7 : quand on veut tester la condition (A op B), on écrit CMP A,B et on choisit le
branchement qui correspond à l’inverse de op. Ici, on veut tester R0 < R1, donc on écrit CMP
R0,R1 et on choisit le branchement branch if higher or same, BHS.
On va améliorer la génération du nombre caché. À cause du fait qu’on n’utilise pas de cellules
mémoire, que tout est mis dans les deux seuls registres, il faut que le nombre caché ne soit ni 1, ni
255 (−1).
En plus, on veut qu’il soit tiré aléatoirement. Dans CimPU, le port 254 est spécial : il retourne
un octet aléatoire à chaque fois qu’on le lit, ex : IN R0, 254.
¬ Codez l’algorithme suivant au début de la version précédente :
repeter {
R0 = lire le port 254 /* octet aléatoire */
} jusqu'à ((R0 > 1) et (R0 < 255))
C’est plus compliqué. La condition est double, c’est une conjonction. Réfléchissez à ce qu’on doit
faire : retourner au répéter si l’une des deux conditions est fausse. Donc, c’est simplement deux
couples CMP + Bxx l’un après l’autre.
Attention à renommer les labels repeter et jusqua.
3
IUT de Lannion Intro. à l’architecture des ordinateurs P. Nerzic
Dept Informatique TD8 - Itérations 2024-25
faire: ; instructions...
La boucle s’arrête quand la condition est vraie, c’est à dire qu’il n’y a pas le saut au répéter.
¬ Assemblez ce programme :
LD R0, 89
LD R1, 23
faire: DEC R0 ; R0 = R0 - 1
INC R1 ; R1 = R1 + 1
¬ Lancez le programme pour tester différentes valeurs. Que fait ce programme ? On avait vu une
solution plus efficace dans le TD6.
2.1. Exercice
¬ Codez l’algorithme suivant :
4
IUT de Lannion Intro. à l’architecture des ordinateurs P. Nerzic
Dept Informatique TD8 - Itérations 2024-25
¬ Lancez l’exécution avec différentes valeurs. Essayez des multiples de 7, et leurs successeurs
comme 29, 36, 71. Que fait ce programme ?
N: DB 0 ; variable N
Dans ce programme, R1 joue le rôle de i dans for (int i=0; i<=10; i++).