★ CODING ★ PROGRAMMATION : L'ASSEMBLEUR EN DOUCEUR (3eme partie) ★ |
L'assembleur en Douceur (3/x) (Micro-Mag) | Cours et Initiation MICROMAG |
Familiarisés avec la base 2 et impatients d'approfondir la question, poursuivons dans l'allégresse notre parcours initiatique.La multiplication Très facile, 0x0 = 0, 0x1=0, 1x0 = 0,1x1 = 1. L'opération habituelle posée sur papier montre un truc très simple: lorsque dans le multiplicateur (nombre du bas) le bit est à 1, on inscrit en résultat le multiplicande (nombre du haut). Lorsque le bit du multiplicateur est à 0, inutile de mettre une suite de 0 en résultat, contentons-nous de déplacer le résultat d'un rang. En définitive, la multiplication se transcrit par l'addition de x fois (multiplicateur) un nombre n (multiplicande). Cette constatation est essentielle, car le Z80 ne possédant pas d'instructions de multiplication, nous voyons bien là comment la simuler.
Familiarisés avec la base 2 et impatients d'approfondir la question, poursuivons dans l'allégresse notre parcours initiatique. La division Il n'y a pas de table de cas à établir, car la division se réalise par une série de soustractions. Comme pour la multiplication, c'est le principe qui est intéressant à retenir, la division devant elle aussi être simulée. Il n'est pas inutile de se remémorer quelques termes. Par exemple 100/33 = 3 et reste 1. 100 est le dividende, 33 le diviseur, 3 le quotient et 1 le reste. N. B. Ne sera -pas développée ici en théorie pure, la représentation de nombres fractionnaires tels que 99,125 soit 1100011,001 en binaire. Les puissances des rangs après ht virgule devenant négatives (2-1, 2-2, 2-3) , vous ne serez sans doute jamais amené à vous en préoccuper. Pour effectuer des divisions en nous arrêtant au reste, le topo est simple. On soustrait sur la gauche du dividende, le diviseur. Si l'opération est possible, 1 est placé en quotient (résultat), sinon on y met 0. On poursuit avec le chiffre suivant du dividente comme dans une division classique. Finalement, deux cas se présentent:
Les deux exemples suivants illustrent ces deux cas.
Exemple avec en cours d'opération, une soustraction impossible, soit : 55/6 = 9 reste 1.
Remarquez que les deux 1 supplémentaires pris au dividende, ont donné deux zéro en quotient. Soyez vigilants pour les exercices qui suivent (test 6).
Les opérations logiques Elles sont capitales de par les possibilités qu'elles offrent, Il est donc indispensable de bien les connaître. Ce sera d'autant plus facile que les calculs à effectuer sont simples et ne génèrent aucune retenue. Il vous suffit d'apprendre une mini-table de vérité pour chacun des opérateurs AND, OR et XOR. AND (ET logique)
La plus simple: le résultat d'un AND entre deux bits sera 1, uniquement lorsque ces deux bits sont à 1. D'un point de vue purement logique et en décidant de représenter par 1 une condition vraie, on poserait: Si le premier ET (AND) le deuxième argument sont vrais, alors le résultat est correct. Passons à quelques opérations.
La seconde opération démontre bien une des utilisations du AND. En faisant subir un AND 00001111 au premier octet 11010110, nous l'avons amputé de ses quatre bits de gauche. On dit qu'ils ont été masqués par les quatre bits à zéro du deuxième octet. Ainsi peuvent être extraits d'un octet, les bits désirés à l'aide d'un masque approprié. Donnez en binaire et décimal le deuxième octet masque qui suivra AND afin d'extraire les bits donnés (test 7).
OR (OU logique)
Ici, la condition est moins stricte; un seul des arguments à 1 donne 1 comme résultat. Soit l'un OU (OR) l'autre des arguments. Ladite condition n'est pas restrictive puisque deux bits à 1 donnent aussi 1. Au point où nous en sommes, retenons seulement que 1 AND 1 = 1 et 0 OR 0 = 0. Quelques opérations:
Une fois encore, la deuxième opération illustre bien l'effet de masque. Avec OR 11110000, on est sûr de mettre à 1 les quatre bits de gauche du résultat (les quatre 0 laissant le quartet faible du premier octet
XOR (OU exclusif)
Seul changement par rapport au OR, le X signifiant eXclusif. Ici, le résultat correct (à 1) n'est admis que lorsqu'un seul des arguments est vrai. Il considère l'un OU l'autre dans son sens le plus strict. Ainsi 1 XOR 1 = 0.
Observez l'effet produit dans la seconde opération. Chaque bit à 1 du XOR inverse les bits du premier octet. Ainsi, XOR 11111111 inverse entièrement le premier octet. Test 9: pourriez-vous déterminer rapidement ce que donne 128 (D) XOR 128 (D). Inscrivez s'il le faut les représentations en binaire et faites l'opération suivant la table de vérité. Pendant que vous y êtes, tentez de résoudre le problème que pose le listing basic ci dessus. Celui-ci use du mode XOR graphique du CPC (ligne 70). Si vous affichez par exemple un A avec le stylo 1, puis à la même place un A avec le stylo 2 (ligne 90), pourquoi apparaît-il de la couleur du stylo 3? Et si vous affichez de nouveau à cet endroit un A avec le stylo 2 (ligne 100), pourquoi s'affiche-t-il de la couleur du stylo 1? Transcrivez les numéros 1, 2 et 3 des stylos en binaire, un petit coup de XOR et comme Spock de vous exclamer: c'est logique! Résultat des tests
|