Traduction d'une boucle tantque en assembleur 68K |
Le dictionnaire des variables correspondant à l'algorithme est (visualiser l'algorithme):
Le choix de l'allocation est arbitraire. Ce choix est généralement guidé par les contraintes imposées par le cahier des charges. La notation entier.b n'est pas normalisée. Elle est appliquée au choix qui est fait ici d'implanter cet algorithme en assembleur 68K. Enfin, le fait qu'en assembleur, il n’est possible que de faire une opération par instruction, il est nécessaire d'ajouter une variable intermédiaire denum.result allouée dans d3. La traduction de l'algorithme donne :
début
: clr.b d2
* result
<- 0 move.b
d2,d3 * d3
<- result mulu.b d1,d3 * d3 <- result.denum * tant que (result.denum < a) tantque: cmp.b d0,d3 bcc
fintq * faire add.b #$1,d2 * result <- result + 1 move.b d2,d3 * d3
<- result mulu.b d1,d3 * d3 <- result.denum bra tantque * fin tant que * si (result.denum < a) alors fintq cmp.b
d3,d0 bcs
alors * finsi retour rts * fin du code alors : sub.b
#$1,d2 *
result <- result – 1 bra retour Commentaires :
Comme le montre cet exemple, la boucle tant que débute par l'expression d'une condition (instruction cmp) et le branchement en fonction de la condition (sortie de la boucle) et se termine par un branchement inconditionnel (instruction bra) qui renvois au début de la boucle.
La structure de test si (condition) alors traitement commence elle aussi par l'expression de la condition (instruction cmp) suivit d'un branchement conditionnel et se termine aussi par un branchement inconditionnel mais qui ne renvoie pas au début mais au fin si. |