UGA - UFR IM2AG - MASTER 2 CCI
Exercices : codage des structures de contrôle
1 Codage d’une instruction conditionnelle
On veut coder l’algorithme suivant : si a = b alors c <– a-b sinon c <– a+b.
L’évaluation de l’expression booléenne a = b est réalisée par une soustraction a-b
dont le résultat ne nous importe guère ; on veut juste savoir si le résultat est 0ou non.
Pour cela on va utiliser l’indicateur Zdu code de condition arithmétique positionné
après une opération :
Z = 1 si et seulement si le résultat est nul
Z = 0 si et seulement si le résultat n’est pas nul.
De plus nous allons utiliser l’instruction de rupture de séquence Bcc qui peut être
conditionnée par les codes de conditions arithmétiques cc.
On peut proposer beaucoup de solutions dont les deux suivantes assez classiques :
@ a dans r0, b dans r1
CMP r0, r1 @ a-b ?? CMP r0, r1 @ a-b ??
BNE sinon BEQ alors
alors: @ a=b : c <-- a-b sinon: @ a!=b : c <-- a+b
BAL finsi BAL finsi
sinon: @ a!=b : c <-- a+b alors: @ a=b : c <-- a-b
finsi: finsi:
Exercices :
1. Comprendre l’évolution du contrôle (compteur de programme, valeur des codes
de conditions arithmétiques) pour chacune des deux solutions.
2. Quel est l’effet du programme suivant :
CMP r0, r1
BNE sinon
SUB r2, r0, r1
sinon: ADD r2, r0, r1
3. Coder en langage d’assemblage ARM l’algorithme suivant :
si x est pair alors x <-- x div 2 sinon x <-- 3 * x + 1
la valeur de la variable xétant rangée dans le registre r5.
2 Notion de tableau et accès aux éléments d’un ta-
bleau
Considérons la déclaration de tableau suivante :
TAB : un tableau de 5 entiers représentés sur 32 bits.
1