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.

1011
X 101
11 (D)
5 (D)
1011
1011..
11011155 (D)
A vous (test 5)
01011
x 1101
11100
x 100

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:

  • le reste d'une soustraction n'en permet plus une nouvelle et devient notre reste;
  • ce même reste augmenté du dernier chiffre de droite du dividende ne permet pas une nouvelle soustraction. Il devient bien entendu notre reste, mais il faut mettre 0 au quotient.

Les deux exemples suivants illustrent ces deux cas.

Exemple : 87/6= 14
reste 3
1010111
110...
110
01001..1100
110..
0111.
110.
0011

Exemple avec en cours d'opération, une soustraction impossible, soit : 55/6 = 9 reste 1.

110111
110:::
100
000111
110
1001
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).

1010110110111011010

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)

Table
1 AND 1
1 AND 0
0 AND 1
0 AND 0
=
=
=
=
1
0
0
0

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.

11010111
AND 01011010
01010010
11010110
AND 00001111
00000110

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).

a)Bits 7, 6 et 1 =................... (B) =.......... (D)
b)Bits 7 et 1 =................... (B) =.......... (D)
c)Bits 6, 3, 2, 1, 0 =................... (B) =.......... (D)
d)Bits 7, 6, 5, 1 =................... (B) =.......... (D)

OR (OU logique)

Table
0 OR 1
1 OR 0
1 OR 1
0 OR 0
=
=
=
=
1
1
1
0

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:

10111001
OR 11110110

11111111
00101011
OR 11110000
11111011

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

+ 96 (D) =.....................(B)
+ 14 (D) =.....................(B)
+ 30 (D) =.....................(B)
+ 79 (D) =.....................(B)

XOR (OU exclusif)

Table
1 XOR 0
0 XOR 1
1 XOR 1
0 XOR 0
=
=
=
=
1
1
0
0

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.

10101011
XOR 01110010
11111111
10101010
XOR 11111111
01010101

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

Guy Poli, Micromag

★ EDITEUR: MICROMAG
★ ANNÉE: 1990
★ AUTEUR: GUY POLI

★ AMSTRAD CPC ★ A voir aussi sur CPCrulez , les sujets suivants pourront vous intéresser...

Lien(s):
» Applications » Sprite (Micromag)
» Applications » Fiche (Micromag)
» Applications » Catimp (Micromag)
» Applications » Scanner (Micromag)
Je participe au site:

» Vous avez remarqué une erreur dans ce texte ?
» Aidez-nous à améliorer cette page : en nous contactant via le forum ou par email.

CPCrulez[Content Management System] v8.7-desktop/c
Page créée en 157 millisecondes et consultée 737 fois

L'Amstrad CPC est une machine 8 bits à base d'un Z80 à 4MHz. Le premier de la gamme fut le CPC 464 en 1984, équipé d'un lecteur de cassettes intégré il se plaçait en concurrent  du Commodore C64 beaucoup plus compliqué à utiliser et plus cher. Ce fut un réel succès et sorti cette même années le CPC 664 équipé d'un lecteur de disquettes trois pouces intégré. Sa vie fut de courte durée puisqu'en 1985 il fut remplacé par le CPC 6128 qui était plus compact, plus soigné et surtout qui avait 128Ko de RAM au lieu de 64Ko.