COURS 4.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 4                         *
   *                                                                *
   ******************************************************************

   Nous allons aborder maintenant les registres d'adresse. Tout comme
   les registres de donn�es, ces registres sont cod�s sur 32 bits (un
   long  mot). Donc � priori aucune diff�rence, puisque le micro-pro-
   cesseur  ne conna�t que des chiffres, que ceux-ci repr�sentent des
   donn�es  ou  des  adresses, peu lui importe.  C'est vrai en grande
   partie  et  d'ailleurs  sur  certains  micro-processeurs, il n'y a
   qu'un  ou  deux  registres, qui  peuvent  contenir  indiff�remment
   adresse ou donn�es.

   Voyons, gr�ce  � un exemple, les diff�rences en ce qui concerne le
   68000 MOTOROLA.

   Tapons  donc  le  programme suivant, apr�s avoir, bien s�r, effac�
   l'ancien, et assemblons.

             MOVE.L     #$12345678,D0
             MOVE.B     #$AA,D0
             MOVE.L     #$12345678,A0
             MOVE.B     #$AA,A0 
             MOVE.L     #$12345678,A1
             MOVE.B     A1,D1

   L'assembleur  note 2 erreurs et nous les annonce par 'invalid size
   at line 4' et la m�me chose pour 'line 6'. Puisque c'est la taille
   et  non  l'op�ration  elle-m�me qui semble poser probl�me, nous en
   d�duisons  que  le  MOVE vers ou � partir d'un registre d'adresse,
   n'est  pas  possible sur un byte. Rectifions donc la ligne 4 et la
   ligne 6 en rempla�ant les MOVE.B par des MOVE.W et r�-assemblons.

   Note: Lorsque  l'assembleur  note une erreur, il donne la ligne o�
   se  situe  celle-ci. Dans cette num�rotation les lignes vides sont
   compt�es.

   Ainsi si vous aviez pass� une ligne apr�s MOVE.L #$12345678,D0 les
   erreurs auraient �t� annonc�es ligne 5 et 7.

   Cela  fait  d�j�  une  diff�rence puisque si vous regardez bien le
   programme, nous  voulions  r�aliser  une  op�ration  avec  D0:  Le
   remplir  au  maximum de sa taille, puis v�rifier que le MOVE de la
   ligne  2, n'affecterait que le byte de poids faible, puis r�aliser
   la m�me op�ration sur A0.

   Impossible  �  priori.  Tant  pis,  suite  �  notre  modification,
   l'op�ration se d�roulera donc sur un word au lieu d'un byte.

   D�buggons  notre  programme. Premi�re  constatation: l'assembleur,
   voyant que les op�rations ont lieu avec des registres d'adresse et
   non  pas  des  registres de donn�es, a automatiquement modifi� les
   MOVE  vers  A0 et A1, pour les transformer en MOVEA, ce qui se lit
   MOVE ADDRESS

   Ex�cutons  le  programme  pas-�-pas. D0 prend la valeur $12345678,
   puis  seul  son byte de poids faible est modifi�, D0 prenant alors
   la  valeur  $123456AA. Ensuite A0 prend la valeur $12345678. Apr�s
   la  ligne  suivante, l'op�ration  affectant le word, nous devrions
   avoir $123400AA. Et bien pas du tout! Nous obtenons $000000AA.

   Nous  venons  donc de voir qu'un registre d'adresse est totalement
   influenc�  (donc  sur un long mot) lorsqu'il est la destination de
   l'op�ration. Qu'en est-il donc lorsqu'il en est la source ?

   Continuons  donc  notre programme, avec le remplissage de A1 et de
   D1. Nous  constatons par la suite que seul le word de poids faible
   de A1 vient �craser celui de D1.

   NOTE: $AA  est  bien  en  chiffre  en hexad�cimal. Si vous pensiez
   qu'il  s'agissait  de simples lettres de l'alphabet, dormez 1 ou 2
   jours, et reprenez le cours � la premi�re le�on!

   De tout ceci nous d�duisons 2 d�finitions:

   REGISTRES DE DONN�ES: Chaque registre de donn�es a une longueur de
   32 bits. Les  op�randes  sous forme d'octet occupent les 8 bits de
   poids  faible, les  op�randes  sous  forme  de mot, les 16 bits de
   poids faible et les op�randes longs, la totalit� des 32 bits.

   Le  bit de poids le plus faible est adress� comme bit 0, le bit de
   poids le plus fort est adress� comme bit 31.

   Lorsqu'un  registre  de  donn�es  est  utilis� soit comme op�rande
   source, soit  comme  op�rande  destination, seule la partie appro-
   pri�e  de  poids  faible est chang�e.  La partie restante de poids
   fort n'est ni utilis�e, ni modifi�e.

   REGISTRES D'ADRESSE: Chaque registre a une longueur de 32 bits, et
   contient   une  adresse  sur  32  bits.  Les  registres  d'adresse
   n'acceptent  pas  une  op�rande  dont  la  taille est l'octet. Par
   cons�quent lorsqu'un registre d'adresse est utilis� comme op�rande
   source, soit  le mot de poids faible, soit l'op�rande long dans sa
   totalit� est utilis�, en fonction de la taille de l'op�ration.

   Lorsqu'un   registre   d'adresse  est  utilis�  comme  destination
   d'op�rande  le  registre entier est concern�, ind�pendamment de la
   taille  de  l'op�ration. Si l'op�ration porte sur un mot, tous les
   autres  op�randes  subissent  une  extension de signe sur 32 bits,
   avant que l'op�ration ne soit effectu�e.

   D�finitions  extraites  du  document r�f EF68000 (circuit int�gr�s
   MOS THOMSON EFCIS), 45 avenue de l'Europe 78140 Velizy.

   Dans  ces d�finitions, nous remarquons un nouveau terme: op�rande.
   C'est  le  terme  qui d�signe la valeur utilis�e dans l'op�ration.
   Ainsi  dans MOVE.W D0,D1 l'op�rande source, c'est le word de poids
   faible  de  D0 alors  que l'op�rande destination, c'est le word de
   poids faible de D1.

   Nous savons maintenant ce qu'est le PC, un registre de donn�es, un
   registre  d'adresse, nous  avons un peu id�e de ce que nous montre
   les  fen�tre  de  MONST, continuons donc � d�cortiquer ce fabuleux
   outil !

   Pour  observer la fen�tre de MONST, si vous n'avez pas assembl� de
   programme, impossible d'utiliser Alternate+D. Il vous sera r�pondu
   qu'il  n'y  a pas de programme en m�moire. Tapez donc Alternate+M,
   vous  voyez  MONST  appara�tre, mais  vous  demandant quel fichier
   charger. Tapez ESC et nous voici tranquille pour une observation.

   Nous  voyons bien dans la fen�tre du haut nos registres de donn�es
   et � droite nos registres d'adresse. Sous les registres de donn�es
   SR  puis  PC. Le  PC  (program counter), nous savons ce que c'est,
   mais le SR ?


   LE STATUS REGISTER

   Le  SR  (prononcer  Status  Register, ce qui veut dire en Fran�ais
   registre  d'�tat), est  un  registre cod� sur un word (16 bits) et
   qui, comme  son  nom  l'indique,  nous  renseigne  sur  l'�tat  du
   micro-processeur.

   Il est l'exemple frappant de ce que nous avons vu dans l'introduc-
   tion  du  cours 3, � savoir qu'il est bien dangereux de traiter un
   ensemble  de  bits  comme  un simple chiffre, plus ou moins grand.
   Voyons la d�composition du Status Register.

   num�ro des bits 15----------------------------------0
   appellation       T . S . . . I2 I1 I0 . . . X N Z V C

   Tout  d'abord  il  faut savoir que certains bits du SR ne sont pas
   utilis�s. Ils sont ici symbolis�s par un point chacun.

   Commen�ons  par  la  description des bits de droite, en commen�ant
   par le 0.

   Le bit C (C signifie Carry donc retenue en Fran�ais).
   Ce  bit  est mis � 1 lorsqu'il y a une retenue dans le bit le plus
   �lev�  (donc  de poids le plus fort) de l'op�rande objet, dans une
   op�ration arithm�tique.

   Le bit V (V signifie oVerflow donc d�passement en Fran�ais).
   Imaginons  une addition de 2 nombres positifs, lorsque le r�sultat
   va  d�border  les  limites  du  registres, on obtiendra en fait un
   nombre  n�gatif  �  compl�mente � 2. En effet le fait de mettre le
   bit  de  poids le plus fort � 1 indique que le nombre est n�gatif.
   Comme ce n'est pas,dans le cas pr�sent,  le r�sultat recherch�, on
   est  pr�venu  du d�passement par le fait que le bit V est mis � 1.
   Il indique �galement, lors de divisions,  que le quotient est plus
   grand qu'un word ou bien que nous avons un dividende trop grand.

   Le  bit  Z (Z signifie Z�ro). Il n'indique pas que le r�sultat est
   �gal  �  0, mais  plut�t que le r�sultat est pass� de l'autre cot�
   de 0. En  effet, ce  bit est � 1 lorsqu'apr�s une op�ration le bit
   de poids le plus fort du r�sultat est mis � 1, ce qui signifie que
   nous  sommes en pr�sence d'un nombre n�gatif en compl�ment � 2. Le
   bit N  (N  signifie Negate )  signifie que nous sommes en pr�sence
   d'un nombre n�gatif.

   Le  bit  X  (X  signifie eXtend donc extension). C'est un bit bien
   sp�cial qui se comporte un peu comme une retenue. Les instructions
   qui utilisent ce bit le pr�cisent dans leur nom.  Par exemple ADDX
   qui se lit add with extend est une op�ration d'addition prenant en
   compte  ce  bit  X. Ce  bit X est g�n�ralement le reflet du bit C,
   mais, contrairement, �  celui-ci, certaines instructions ne le mo-
   difient pas.

   Lorsque nous �tudierons de plus pr�s les instructions du 68000, le
   fait  que l'instruction affecte ou non tel ou tel bit sera parfois
   tr�s important.

   Le bit T (T signifie Trace donc suivre en Fran�ais).
   Lorsque ce bit est � 1, le 68000 se trouve en mode Trace.

   Alors  l�, soyez  bien  attentif, ce  qui va suivre est primordial
   pour la suite des cours!!!

   Le mode Trace est un mode de mise au point pour les programmes. Et
   oui, c'est carr�ment DANS le microprocesseur qu'une telle commande
   est  ins�r�e. A  chaque fois que le 68000 ex�cute une instruction,
   il va voir dans quel �tat se trouve le bit T. S'il trouve ce bit �
   0, il  passe � la prochaine instruction. Par contre, si ce bit est
   �  1, le  68000  laisse  de  c�t�  (temporairement)  le  programme
   principal  pour  se  d�tourner vers une routine (un 'bout' de pro-
   gramme) qui  affichera par exemple la valeur de tous les registres
   (D0 �  D7 et  A0 �  A7). Imaginons  qu'il  faille  appuyer sur une
   touche pour sortir de cette routine: Nous avons donc tout le temps
   de  consulter  ces  valeurs. Nous  appuyons sur une touche: fin de
   notre  routine, le  68000 retourne  donc  au  programme principal,
   ex�cute  l'instruction  suivante, teste le bit T, le trouve � nou-
   veau  �  1, se  branche  donc sur notre routine, etc... Nous avons
   donc  un  mode  pas-�-pas. Or, vous avez d�j� utilis� cette parti-
   cularit�  en  visualisant  le  d�roulement  des  instructions avec
   MONST!

   Tapez le programme suivant:
             MOVE.W     #$23,D0
             MOVE.W     #$15,D1

   Assemblez  et  faites  Alternate+D pour passer sous MONST. Appuyez
   une  fois  sur  Control+Z  et observez le Status Register. MONST a
   affich�  T, indiquant  ainsi  que ce bit est � 1. Nous sommes donc
   bien en mode Trace. Quittez le programme par Control+C.

   Nous  arrivons  maintenant  �  nous poser une question: Le 68000 a
   trouv�  le bit T � 1. D'accord, il sait o� est son Status register
   et  il  sait  que  le  bit T c'est le 15�me. Mais apr�s ? Le 68000
   s'est  d�tourn� vers une routine qui dans le cas pr�sent se trouve
   �tre une partie de MONST.

   Mais  comment  a-t-il trouv� cette routine ? MONST est en effet un
   programme  tout � fait  ordinaire, qui  a  �t� charg� en m�moire �
   partir  de  la disquette, et qui peut �tre plac� n'importe o� dans
   cette m�moire.

   Une  premi�re solution consisterait � toujours placer ce programme
   au  m�me  endroit. MOTOROLA  aurait ainsi pu concevoir le 68000 en
   pr�cisant: Les  programmes  de  mise  au  point qui seront appel�s
   gr�ce � la mise � 1 du bit T, devront commencer � l'adresse $5000.
   Simple, mais tr�s g�nant car il devient pratiquement impossible de
   faire  r�sider plusieurs programmes en m�moire simultan�ment, sans
   courir le risque qu'ils se marchent sur les pieds!!!

   Il y a pourtant une autre solution, un peu plus tordue mais en re-
   vanche  beaucoup  plus souple, qui consiste � charger le programme
   de mise au point n'importe o� en m�moire, de noter l'adresse � la-
   quelle  il  se trouve, et de noter cette adresse � un endroit pr�-
   cis. Lorsque  le 68000 trouvera le bit T � 1, il foncera � cet en-
   droit  pr�vu  �  l'avance  par  MOTOROLA, il y trouvera non pas la
   routine  mais un long mot, adresse de cette routine, � laquelle il
   n'aura plus qu'� se rendre.

   Cet  endroit  pr�cis, o�  sera  stock�  l'adresse  de la routine �
   ex�cuter lorsque le bit T sera trouv� � 1, c'est un endroit qui se
   situe dans le premier kilo de m�moire (donc dans les 1024 premiers
   bytes). En  l'occurrence pour le mode trace il s'agit de l'adresse
   $24.

   R�sumons: MONST  se  charge en m�moire. C'est un programme complet
   dont  certaines  routines  permettent  l'affichage  des registres.
   MONST  regarde  l'adresse � laquelle commencent ces routines, note
   cette  adresse  puis va la mettre � l'adresse $24. Ce long mot est
   donc  plac�  �  l'adresse $24, $25, $26 et $27 puisque nous savons
   que  le  'diam�tre' du 'tube' m�moire n'est que d'un octet (byte).
   Lorsque  le microprocesseur trouve le bit T � 1, il va � l'adresse
   $24, il  y  pr�l�ve  un  long mot qui se trouve �tre l'adresse des
   routines de MONST, et il fonce � cette adresse. ok?

   Nous  allons maintenant r�aliser un petit programme et nous allons
   'planter' votre ATARI!
   Tapez ce qui suit:

             MOVE.W     #$1234,D1
             MOVE.W     #$6789,D2
             MOVE.W     #$1122,D3

   Assemblez  puis  taper  Alternate+D pour passer sous MONST. Faites
   une fois Control+Z. Le bit T du Status register est mis � 1, indi-
   quant  que nous sommes en mode Trace. Comme nous avons ex�cut� une
   instruction, D1 se  trouve  rempli avec $1234. Appuyons maintenant
   sur Alternate + 3.

   Nous venons d'activer la fen�tre de droite (la num�ro 3).
   Appuyons  sur  Alternate+A. Une  demande  s'affiche:  nous  devons
   indiquer  quelle adresse sera la premi�re visible dans la fen�tre.
   Il faut taper cette adresse en hexad�cimal. Nous tapons donc...24.
   (pas  de $ avant, MONST sait de lui-m�me que nous parlons en hexa)
   Nous  voyons  s'afficher  l'adresse 24 en haut de la fen�tre et en
   face un chiffre qui est l'adresse de notre routine de MONST!

   Pour  moi  c'est 00027086 mais comme je l'ai dit pr�c�demment cela
   d�pend des machines. Dans mon cas lorsque le 68000 trouve le bit T
   � 1, il fonce donc ex�cuter la routine qui se trouve en $00027086.
   Je vais donc modifier cette adresse! Appuyons sur Alternate+E pour
   passer en mode �dition. Le curseur est plac� sur le premier nibble
   de  l'adresse. Tapez  par exemple 11112222 ou n'importe quel autre
   chiffre. 
   Repassez maintenant dans la fen�tre 1 en tapant Alternate+1.

   Maintenant  r�fl�chissons: Nous allons refaire Control+Z. Le 68000
   va  foncer en $24, va maintenant y trouver $11112222, et va foncer
   � cette adresse pour y ex�cuter ce qu'il va y trouver c'est-�-dire
   n'importe quoi! Il y a tr�s peu de chance pour qu'il r�ussisse � y
   lire des choses coh�rentes et vous indiquera une erreur.

   Allez  y, n'ayez  pas  peur, vous  ne  risquez pas de casser votre
   machine!

   Hop  Control+Z  et, suivant  les cas, vous obtenez divers messages
   (Illegal exception, Bus Error etc...). 

   Quittez  en faisant Control+C ou bien en dernier ressort faites un
   RESET.

   J'esp�re  que ce principe est TRES TRES BIEN COMPRIS. Si cela vous
   semble � peu pr�s clair, relisez tout car la suite va tr�s souvent
   faire  r�f�rence  �  ce  principe  d'adresse dans le premier kilo,
   contenant l'adresse d'une routine.

   La  prochaine fois, nous finirons d'�tudier le Status Register, en
   attendant  je  vais me prendre une petite vodka bien fra�che. A la
   v�tre!

Back to ASM_Tutorial