Retour index

Traduction d'une boucle tantque en assembleur 68K

Retour

Le dictionnaire des variables est correspondant à l'algorithme est (visualiser l'algorithme):

Nom

Type

Catégorie

Allocation

num

entier.b

variable

d0

denum

entier.b

variable

d1

result

entier.b

variable

d2

denum.result

entier.w

variable

d3

 

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.

 

Retour index

Retour