Traduction d'une boucle tantque en assembleur 68K |
Le dictionnaire des variables est 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'implanté cet algorithme en assembleur 68K. Enfin, le fait qu'en assembleur, il est possible que de faire une opération par instruction, il est nécessaire d'ajouter une variable intermédaire 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 un 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édut 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 renvois pas au début mais au fin si. |