COURS 2.TXT/fr

From Atari Wiki
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