LES SCHEMAS DE TOUS TYPES .
Nous proposons dans ce paragraphe un schéma de traduction pour le schéma de contrôle SI.
Exemple 1 : SI sans partie SINON.
si 1 :
si AL=0 alors
CMP AL,0
JNE finsi1
{ programme soumis à la condition si }
finsi1:
Remarques :
l'étiquette si1: ne sert à rien , néanmoins l'écriture de cette étiquette améliore la lisibilité du programme
par rapport au schéma algorithmique SI, le branchement conditionnel suivant l'instruction de comparaison axprime la négation figurant dans l'algorithme.
Exemple 2 : SI avec partie SINON.
si 1 :
si AL=0 alors
CMP AL,0
JNE sinon1
{ programme soumis à la condition si }
JMP finsi1 ; sinon
sinon1:
{ programme }
finsi1:
Remarques :
-l'instruction JMP ( JUMP ) est un branchement conditionnel; cette instruction est indispensable
à la fin de la partie "alors" du "si" pour sauter la partie "sinon".
Exemple 3 : SI imbriqués.
Dans le cas de si imbriqués, ou de l'existence de plusieurs "si" dans l'algorithme, nous suggérons de numéroter les "si"
et d'appliquer les mêmes règles que ci-dessous.
si 1 :
si AL=0 alors
CMP AL,0
JNE sinon1
{ programme }
si 2 :
{ programme }
finsi2:
{ programme }
JMP finsi1 ; sinon
sinon1:
{ programme }
finsi1:
Exemple 4 : TANT QUE.
tq :
tant que AL=0 repeter
CMP AL,0
JNE ftq
{ programme soumis à la condition si }
JMP tq
ftq :
Remarques :
Comme pour les SI, nous suggérons de numéroter les étiquettes "tq" et "ftq" s'il existe
dans le programme plusieurs tant que. Ceci permet aussi de coder des tant que imbriqués.
Exemple 5 : Condition uniquement avec des ET.
si :
si AL>='a' et AL<="z" alors
CMP AL,'a'
JB finsi
CMP AL,'z'
JA finsi
{ programme }
finsi:
Exemple 6 : Condition uniquement avec des OU.
si :
si AL=0 ou CX>0 alors
CMP AL,0
JE alors
CMP CX,0
JA alors
JMP finsi
alors :
{ programme }
finsi:
Rappelons tout de même que certains problèmes viennent se greffer au monde merveilleux de branchement conditionnel .
Les branchements conditionnels ( JA , JE , ... ) ne permettent d'avoir une étiquette de branchement située à
une distance de + ou - 128 octets.
Si , par exemple, le nombre d'instructions situé à l'intérieur d'un TQ est trop élevé, le macro-assembleur génère des erreurs.
Pour remédier à ce problème, on utilise l'astuce suivante :
tq : tant que al=0 répéter
CMP Al,0
JE debut_tq
JMP ftq
debut_tq :
{ programme }
JMP tq
ftq :
Voilà c'est tout !!!!