COURS 2.TXT/fr

From Atari Wiki
Revision as of 15:08, 23 November 2023 by Exxos (talk | contribs)
Jump to navigation Jump to search
   ******************************************************************
   *                                                                *
   *             COURS D'ASSEMBLEUR 68000 SUR ATARI ST              *
   *                                                                *
   *                 par Le F�roce Lapin (from 44E)                 *
   *                                                                *
   *                         Cours num�ro 2                         *
   *                                                                *
   ******************************************************************

   LES CHIFFRES 'MAGIQUES'

   Voyons d'abord d'une fa�on simple comment marche un ordinateur, en
   nous  pla�ant  dans la situation suivante: nous devons fournir des
   messages  �  une  personne  dont nous sommes s�par�s (par exemple,
   message de nuit entre des gens �loign�s).

   Nous  avons  une lampe de poche, que nous pouvons donc allumer, ou
   �teindre, c'est  tout. Nous  pouvons  donc  donner 2 messages 1)la
   lampe  est  �teinte  (par ex. tout va bien) 2)la lampe est allum�e
   (par ex. vla les flics!)

   Approfondissons les 2 �tats de la lampe:
                         Allum�e                  Eteinte

   qui revient �:      du courant               pas de courant
   ou: Du courant ?       OUI                       NON

   Valeur du courant ?      1                        0

   Les  tests  seront donc not�s par 0 ou 1 suivant l'allumage ou non
   de la lampe.

   Comme nous sommes riches, nous achetons une 2 �me lampe.
   Nous avons donc 4 possibilit�s de message

               LAMPE 1             LAMPE2

              �teinte              �teinte
              allum�e              �teinte
              �teinte              allum�e
              allum�e              allum�e

   En  comptant  avec  3,4,5,6 ... lampes, nous  nous  rendons compte
   qu'il  est possible de trouver une relation simple entre le nombre
   de lampes et le nombre de possibilit�s.

   Nombre de possibilit�s = 2 � la puissance nombre de lampes.

   Nous obtenons donc le tableau suivant
   Les remarques sont justes l� pour mettre la puce � l'oreille !

   Lampes     Possibilit�s                 Remarques
   1             2
   2             4
   3             8         Il y a des ordinateurs 8 bits ... 
   4             16        et des 16 bits...
   5             32        Le ST est un 16/32 bits
   6             64        Amstrad CPC... 64!!
   7             128       ou Commodore 128 ?
   8             256       En informatique le codage des caract�res
                           (lettres chiffres.. gr�ce au code ASCII)
                           permet d'avoir 256 caract�res !
   9             512       Un 520 a 512 Ko de m�moire et
                           Amstrad vend un PC1 512
   10            1024      La taille m�moire de mon 1040!
   11            2048      Celle du m�ga 2 de mon fr�re
   12            4096      Celle d'un m�ga 4. Aussi le nbr de
                           couleurs affichables avec un Amiga.
   etc...
   16            65536     Dans le GFA, un tableau
                           ne peut avoir plus de 65536 �l�ments.

   Si mes 4 lampes sont �teintes (0000) je suis donc � la possibilit�
   0. Si  elles sont allum�es (1111) je suis donc � la 15 (car de 0 �
   15 �a fait bien 16) donc 0000 --> 0 et 1111 --> 15

   J'ai  donc  un bouquin de 16 pages donnant les possibilit�s des 16
   allumages possibles, et mon correspondant a le m�me. Comment faire
   pour lui envoyer le message de la page 13 ?

   Le  chiffre le plus petit �tant � droite (on note les chiffre dans
   l'ordre centaines, dizaines, unit�s), pla�ons les lampes.

   Lampe num�ro:       4       3       2        1
   a) je  n'ai qu'une lampe (la 1) elle est allum�e donc j'obtiens la
   valeur 1. (je ne peut obtenir que 0 ou 1)

   b)j'ai  2 lampes  (1 et 2), allum�es toutes les deux, j'obtiens la
   4�me  possibilit�  . J'ai  donc la valeur 3 (puisque je compte les
   valeurs 0,1,2 et 3, ce qui en fait bien 4) Puisque la lampe 1 vaut
   au  maximum  la  valeur  1, j'en d�duis que la lampe 2 vaut � elle
   seule au maximum la valeur 2.

   En effet     lampe 1 allum�e --> valeur 1
                Lampe 2 allum�e --> valeur 2
   Donc les 2 allum�es ensemble --> valeur 3 = 4 possibilit�s.

   La lampe 2 peut donc donner une 'augmentation' de 0 ou de 2.

   Lampe num�ro         4             3            2            1
   'augmentation'       8             4            2            1

   Pour  envoyer  le  message  13, il  faut  donc  allumer la lampe 4
   (valeur de 8), la lampe 3 (valeur de 4) et la 1 (valeur de 1) 
   Lampe               4      3         2       1
   Etat de la lampe    1      1         0       1
   Valeur              8  +   4    +    0   +   1 = 13

   Nous sommes donc en train de compter en binaire.

   En  d�cimal  : d�c signifie 10, car un chiffre peut prendre 10 va-
   leurs (de 0 � 9).

   En binaire :bi = deux car chaque chiffre ne peut prendre que 2 va-
   leurs (0 ou 1).

   L'informatique  est  un domaine Anglo-saxon. Un 'chiffre binaire',
   en  Anglais, �a se dit 'binary digit'. On garde la premi�re lettre
   et  les  2 derni�res, et  on dit qu'un chiffe binaire c'est un BIT
   !!! Un bit peut donc �tre � 0 ou 1. C'est la plus petite unit� in-
   formatique,
   car, le  correspondant  � qui nous envoyons des messages, c'est en
   fait  un ordinateur. Au lieu d'allumer des lampes, nous mettons du
   courant  sur  un fil ou non. Un ordinateur 8 bits � donc 8 fil sur
   lesquels on met ou non du courant !

   Pour  envoyer  des  messages  nous allons donc pr�parer des lampes
   avec  des  petits interrupteurs puis, quand nos lampes seront pr�-
   tes, on  actionnera  l'interrupteur principal pour envoyer le cou-
   rant et donc allumer d'un coup les lampes pr�vues.

   Nous allons donc, par l'interm�diaire de nos 'lampes', envoyer des
   messages au coeur de la machine (dans le cas du ST c'est un micro-
   processeur  68000 de chez MOTOROLA) qui a �t� fabriqu� pour r�pon-
   dre d'une certaine mani�re aux diff�rents messages.

   On  pr�pare  donc  nos  lampes puis on allume. Nous, nous avons 16
   lampes. En effet le 68000 Motorola
   est un micro-processeur 16 bits.

   Voici  donc  un 'programme' (c'est-�-dire une succession d'ordres)
   tel  qu'il  est  au  niveau mise ou non de courant sur les 16 fils
   Tout  � gauche c'est la valeur du fil 16 et � droite celle du 1. 0
   = pas  de courant sur le fil, 1 du courant. Le microprocesseur est
   entour�  de multiples tiroirs (les cases m�moire) et parmi les or-
   dres qu'il sait ex�cuter il y a 'va chercher ce qu'il y a dans tel
   tiroir' ou  bien 'va mettre �a dans tel tiroir'. Chaque tiroir est
   rep�r�  par une adresse (comme chaque maison), c'est-�-dire par un
   num�ro.

   Nous  allons dire au microprocesseur: va chercher ce qu'il y a  au
   num�ro  24576, ajoutes-y  ce  qu'il y a au num�ro 24578 et mets le
   r�sultat au num�ro 24580. On pourrait remplacer 'au num�ro' par '�
   l'adresse'.

   Allumons donc les 16 lampes en cons�quences, cela donne:

   0011000000111000
   0110000000000000
   1101000001111000
   0110000000000010
   0011000111000000
   0110000000000100

   Une  seule  biarque s'impose, c'est la merde totale! Comment faire
   pour  s'y retrouver avec un programme comme �a, si on oublie d'al-
   lumer une seule lampe, �a ne marche plus, et pour rep�rer l'erreur
   dans un listing pareil, bonjour !
   la merde !!!! 

   On a donc la possibilit� de marquer �a non pas en binaire, mais en
   d�cimal. Malheureusement  la  conversion  n'est  pas commode et de
   toute  fa�on, on obtient quand m�me des grands chiffres (visuelle-
   ment  car leur taille en tant que nombre ne change pas, bien s�r!)
   Ainsi  la  3�me ligne donne 53368. On va donc convertir autrement,
   en s�parant notre chiffres binaire en groupe de 4 bits.


   REMARQUE DE VOCABULAIRE:

   Nous  ne parlerons qu'Anglais. Toutes les abr�viations en informa-
   tique  sont  des  abr�viations de mots ou d'expressions anglaises.
   Les lire � la Fran�aise impose d'apprendre par coeur leur signifi-
   cation. En  les  lisant  telles  qu'elles  DOIVENT  �tre  lues (en
   Anglais), ces  expressions  donnent d'elles m�mes leur d�finition.
   Un  des exemples est T$ qui est lu syst�matiquement T dollar ! Or,
   $ n'est  pas, dans  le  cas  pr�sent, l'abr�viation de dollar mais
   celle  de string. T$ doit donc se lire ET SE DIRE T string. String
   signifiant  'cha�ne' en  Anglais, T  est donc une cha�ne de carac-
   t�re. Evident, alors que lire T dollar ne signifie absolument rien
   ! Le seul int�r�t c'est que �a fait marrer Douglas, le joyeux bri-
   tannique qui programme avec moi!

   Une unit� binaire se dit donc BIT (binary digit)
   4 unit�s forment un NIBBLE

   8 unit�s  forment  un  octet (que nous appellerons par son nom an-
   glais c'est � dire BYTE)

   16 unit�s forment un mot (WORD)

   32 unit�s forment un mot long (LONG WORD)

   Revenons  donc  � notre conversion en groupant nos 16 lampes (donc
   notre WORD) en groupes de 4 (donc en NIBBLE)

    0011        0000         0011         1000

   Ces 4 nibbles forment notre premier word.

   Comptons dons les valeur possibles pour un seul nibble.

   �tat du nibble 0000         valeur 0
           0001         valeur 1
           0010         valeur 2
           0011         valeur 3
           0100         valeur 4
           0101         valeur 5
           etc..
           1010         valeur 10
           STOP  �a  va  plus ! 10 c'est 1 et 0 or on les a d�j� uti-
   lis�s!
   Ben  oui  mais � part 0,1,2,3,4,5,6,7,8,9 on n'a pas grand chose �
   notre disposition... Ben si, y'a l'alphabet !
   On  va  donc �crire 10 avec A, 11 avec B, 12 avec C, 13/D, 14/E et
   15 avec  F. Il y a donc 16 chiffres dans notre nouveau syst�me (de
   0 �  F). 'D�c' signifiant  10 et  'Hex' signifiant 6 (un hexagone)
   donc  Hex  + D�c=16. D�cimal = qui a 10 chiffres (0 � 9) hexad�ci-
   mal= qui en � 16!!!

   Notre programme devient donc en hexad�cimal:
   $3038
   $6000
   $D078
   $6002
   $31C0
   $6004

   Plus clair mais c'est pas encore �a.

   NOTE: pour  diff�rencier  un nombre binaire d'un nombre d�cimal ou
   d'un hexad�cimal, par convention un nombre binaire sera pr�c�d� de
   %, un nombre hexad�cimal de $ et il n'y aura rien devant un nombre
   d�cimal. $11 ne vaut donc pas 11 en d�cimal, mais 17.

   R�fl�chissons un peu. Nous avons en fait �crit:

   'Va chercher ce qu'il y a'
   '� l'adresse $6000'
   'ajoute y ce qu'il y a' '� l'adresse $6002'
   'met le r�sultat'
   '� l'adresse $6004'

   Le  microprocesseur peut bien s�r piocher dans les milliers de ca-
   ses  m�moire  qu'il  y a dans la machine, mais en plus il en a sur
   lui  (des  petites  poches  en  quelque  sorte, dans lesquelles il
   stocke temporairement des 'trucs' dont il aura besoin rapidement).
   Il a 17 poches: 8 dans lesquelles il peut mettre des donn�es, et 9
   dans  lesquelles  il  peut  mettre  des  adresses. Donn�e =DATA et
   adresse=ADRESS, ces  poches  seront  donc  rep�r�es  par D0,D1,D2,
   ...D7 et  par  A0,A1...A7 et  A7' (nous verrons plus tard pourquoi
   c'est pas A8, et les diff�rences entre ces types de poches).

   NOTE: le ph�nom�ne de courant/pas courant et le m�me pour TOUS les
   ordinateurs  actuels. Le  nombre  de  'poche' est  propre au 68000
   MOTOROLA .
   Il  y  a  donc  le  m�me nombre de 'poches' sur un Amiga ou un Mac
   Intosh puisqu'ils ont eux aussi un 68000 Motorala. Sur un PC ou un
   CPC, les  caract�ristiques (nombre de lampes allumables simultan�-
   ment, nombre  de 'poches'...)sont diff�rents, mais le principe est
   le m�me. C'est allum� OU c'est �teint.

   Modifions notre 'texte', qui devient donc.

   'd�place dans ta poche D0'
   'ce que tu trouveras � l'adresse $6000'
   'ajoute � ce que tu as dans ta poche D0'
   'ce que tu trouveras � l'adresse $6002'
   'mets le r�sultat de l'op�ration'
   '� l'adresse $6004'

   La  machine  est tr�s limit�e, puisque par conception, le r�sultat
   de  l'op�ration  de  la 3 �me ligne ira lui m�me dans D0, �crasant
   donc  ce qui s'y trouve. Pour garder la valeur qui s'y trouvait il
   faudrait au pr�alable la recopier par exemple dans la poche D1!!!

   D�placer se dit en Anglais MOVE
   Ajoute   se dit en Anglais ADD

   Notre programme devient donc

   MOVE    ce qu'il y a en $6000   dans  D0
   ADD     ce qu'il y a en $6002     �   D0
   MOVE    ce qu'il y a maintenant dans  D0 � $6004

   C'est � dire:
   MOVE    $6000,D0
   ADD     $6002,D0
   MOVE    D0,$6004

   Nous venons d'�crire en clair un programme en langage machine.

   La  diff�rence  fondamentale avec un programme dans n'importe quel
   autre  langage, c'est  que l�, chaque ligne ne correspond qu'� UNE
   SEULE  op�ration  du microprocesseur, alors que PRINT "BONJOUR" va
   lui  en  faire  faire  beaucoup. Il  est  �vident  que notre BASIC
   n'�tant  qu'un  traducteur  'm�canique' sa traduction a toutes les
   chances d'�tre approximative, et, bien qu'elle soit efficace, elle
   utilise  beaucoup  plus  d'instructions  (pour le microprocesseur)
   qu'il n'en faut r�ellement.

   Il  faut  bien  aussi avoir une pens�e �mue pour les premiers pro-
   grammeurs du 68000 qui ont d'abord fait un programme avec des 1 et
   des  0, programme qui ne faisait que traduire des chiffres hexad�-
   cimaux  en  binaires avant de les transmettre � la machine. Il ont
   ensuite r�alis�, en hexad�cimal des programmes traduisant des ins-
   tructions du genre MOVE, ADD etc... en binaire...

   Il  suffisait  ensuite  de  regrouper plusieurs instructions de ce
   type sous une autre appellation (incomprise directement par la ma-
   chine) et  de faire les traducteurs correspondants, et cr�er ainsi
   les langages '�volu�s' (PASCAL, C, BASIC ...)

   Nous allons donc nous int�resser � la programmation ou plut�t � la
   transmission  d'ordre  au 68000 Motorola. Combien d'ordres peut-il
   ex�cuter. Uniquement  56 !!!! (avec  des variantes quand m�me mais
   �a  fait pas beaucoup). Des recherches (� un niveau bien trop haut
   pour  nous!) on  en effet montr�es qu'il �tait plus rapide d'avoir
   peu  d'instructions  faisant peu de chose chacune et donc ex�cuta-
   bles  rapidement  les  unes  apr�s  les autres, plut�t que d'avoir
   beaucoup  d'instructions (le microprocesseur perdant sans doute du
   temps  �  chercher celle qu'on lui a demand� de faire) ou bien des
   instructions complexes.

   Travail  �  faire: relire  tout �a au moins 2 fois puis se reposer
   l'esprit avant de lire la suite.

   CONSEIL: ne commencez pas la suite tout de suite.
   Avalez  parfaitement  TOUT ce qui est marqu�, car la compr�hension
   du moindre d�tail vous servira.

   Une  lampe, ce  n'est pas grand chose, mais une de grill�e et vous
   comprendrez la merde que �a am�ne.
   L�, c'est  pareil. La plus petite chose incomprise et vous n'allez
   rien  comprendre  �  la  suite. Par contre si tout est compris, la
   suite sera aussi facile, et surtout aussi logique.

Back to ASM_Tutorial