Pl INSTRUC.DOC/fr

From Atari Wiki
Revision as of 14:19, 9 October 2006 by Zorro 2 (talk | contribs)
Jump to navigation Jump to search


                         -------------------------
                            CHAPITRE    QUATRE

                         LES INSTRUCTIONS DU 68000

                         -------------------------



                     *** LES INSTRUCTIONS DU 68000 ***
                     ---------------------------------

- Voilà un chapitre qui est consacr‚ en entier aux diff‚rentes 
  instructions de l'assembleur 68000.

- Maintenant que vous savez, grƒce aux modes d'adressage,atteindre les
  donn‚es en m‚moire, nous allons nous interesser aux instructions qui
  permettent de modifier,d‚placer... donc de se servir des donn‚es.

- Pour chaque instruction, je vous donnerais:
 
  .La syntaxe pour l'instruction et ses op‚randes.
  .Ses effets,son but.
  .Les modes d'adressages autoris‚s pour les op‚randes.
  .L'effet de l'instruction au niveau des registres et notament au 
   niveau du CCR.
  .Et bien sur des exemples d'utilisation...

- De nouvelles notions apparaitront dans les explications conscernant
  les instructions, elles seront d‚taill‚es,expliqu‚es et comment‚es.



                           --------------------

                    *** LES INSTRUCTIONS DU 68000 ***
                    ---------------------------------

     
   MOVE       source,destination   :(.B),[.W],(.L)
   -----------------------------
   Les 3 tailles d'op‚rations sont autoris‚es pour cette instruction,
   La taille [.W] est prise par d‚faut.
   
   L'op‚rande 'source' est copi‚e (et demeure inchang‚e) à (dans) 
   l'op‚rande 'destination'

   Les modes d'adressages autoris‚s pour l'op‚rande source sont:
                                                    ------
     dn       (registres de donn‚es)
     an       (registres d'adresses)
     BBBB
     BB
     #BBB
     (an)
     (an)+
     -(an)
     d(an)
     d(an,rn)
     d(pc)
     d(pc,rn)

   Les modes d'adressage autoris‚s pour l'op‚rande destination sont:
                                                   -----------
     dn
     an
     BBBB
     BB
     (an)
     (an)+
     -(an)
     d(an)
     d(an,rn)


   Au niveau du CCR: Seuls les Bits N et Z sont affect‚s 
                ---


   Exemple d'utilisation:
   ----------------------  
     Move.l    #1456701,d0

     On pose le L-M ‚gal à 1256701 dans le registre de donn‚e d0

       

   MOVEQ        #D,dn       
   ------------------
   L'op‚rande source est une donn‚e imm‚diate,sign‚e,contenue dans un
   octet (-128<= D <128)
   L'op‚rande destination est un registre de donn‚e

   On copie la donn‚e source,sign‚e,contenue dans un octet dans un 
   registre de donn‚e après avoir ETENDU LE SIGNE DU REGISTRE:
   
      C.à.d. que la donn‚e est plac‚e dans l'octet de poids faible du 
   registre Dn et que le MSB a ‚t‚ ‚tendu (copi‚) jusqu'au 31° bit du
   registre,ceci afin que le registre de donn‚e soit affect‚ en entier
   par le  'chargement' de la donn‚e et que le signe de la donn‚e soit
   conserv‚.

   L'op‚rande source admet donc le mode d'adressage:
              ------
   #BBB   ( -128<= BBB <128 )

   L'op‚rande destination admet est un registre de donn‚e.
              -----------              ------------------


   Seuls les Bits N et Z du CCR sont affect‚s par cette instruction
                            ---  

   Exemple:
   --------
   MOVEQ  #%01100101,d0

   On pose l'octet 01100101 dans d0:

   d0= :          00000000000000000000000001100101
          Bit nr 31                       .
                  .                       .    
             MSB (0) <---------------MSB (0)   

   Il y a eu extension du signe de d0 (ici MSB=0 car 01100101>0)

   NB:Moveq se distingue de Move par une plus grande rapidit‚, mais
   -- n'oubliez pas les conditions d'utilisation de Moveq !



   MOVEA      source,an   :(.W),(.L)
   --------------------
   L'instruction Movea complète l'instruction Move car elle accepte un
   Registre d'Adresse pour op‚rande destination.
   
   Sur la plupart des assembleurs,la syntaxe MOVE  source,an est
   accept‚e et automatiquement traduite par  MOVEA source,an

   Si l'op‚rande source utilise la taille d'op‚rantion .W, il y a
   extension du signe du registre d'adresse an.
   La taille .B n'est pas autoris‚e pour MOVEA.


   Les modes d'adressage autoris‚s pour l'op‚rande source sont:
                                                   ------
     dn
     an  
     BBBB
     BB
     #BBB
     (an)
     (an)+
     -(an)
     d(an)
     d(an,rn)
     d(pc)
     d(pc,rn)


   L'op‚rande destination est un registre d'adresse
              -----------        ------------------
   L'instruction MOVEA n'influence pas le CCR.
                                          ---

   Exemple d'utilisation:
   ----------------------
   MOVEA.L   #etiq,a5

   Le registre d'adresse a5 est charg‚ avec l'adresse point‚e par le
   label 'etiq'



   LEA    source,an      : [.L]
   ----------------
                   
   Cette instruction se lit:'Load Effective Address'

   Seule la taille d'op‚ration .L est possible,elle est d'ailleurs prise
   par d‚faut.

   Elle permet de poser l'adresse point‚e par l'op‚rande source dans
   un registre d'adresse.

   L'op‚rande source admet les modes d'adressage:
              ------

     BBBB
     BB     
     (an)
     d(an)
     d(an,rn)
     d(pc)
     d(pc,rn)

   L'op‚rande destination est un registre d'adresse
              -----------        ------------------             
   
   L'instruction LEA n'influence pas le CCR
                                        ---

   Exemple d'utilisation:
   ----------------------
   LEA    etiq,a2

   On pose l'adresse point‚e par le label 'etiq' dans le registre
   d'adresse a2.
   En fait,cela peut aussi se faire avec MOVE.L  #etiq,a2 ,  mais
   c'est moins rapide.         



   CLR    destination    :(.B),[.W],(.L)
   ------------------

   Cette instruction se lit: 'CLeaR  destination'  

   Et permet de mettre à 0 tous les bits de l'op‚rande destination.
   
   Elle admet les 3 tailles d'op‚ration.

   Les modes d'adressages autoris‚s pour l'op‚rande destination sont:      
                                                    -----------
     dn 
     BBBB
     BB
     (an)
     (an)+
     -(an)
     d(an)
     d(an,rn)

       
   Le bit Z du CCR est mis à 1 , les Bits N,V,C à 0.
               ---

   Exemple d'utilisation:
   ----------------------
   CLR.W   D0

   Les 16 Bits du MOT de poids faible de d0 sont mis à 0.             


   NEG       destination     : (.B),[.W],(.L)
   ---------------------  

   Permet d'effectuer la NEGation de l'op‚rande destination.
 
   Les 3 tailles d'op‚ration sont possibles.

   L'op‚rande destination est soustraite de 0, ceci a pour effet de
   changer le signe de l'op‚rande:Les Bits qui ‚taient activ‚s sont
   ‚tteints et les Bits qui ‚taient etteints sont activ‚s.
   
   L'op‚rande destination admet les modes d'adressage suivants:
              -----------
     dn       
     BBBB
     BB
     (an)
     (an)+
     -(an)
     d(an)
     d(an,rn)


   Tous les Bits du CCR sont affect‚s par la NEGation en fonction du
   r‚sultat obtenu. ---


   Exemple d'utilisation:
   ----------------------
   MOVE   #%1010101010101010,d0
   NEG.W  d0

   On obtient le MOT %0101010101010101 dans d0



   EXT       dn           : [.W],(.L)
   ------------

   Permet d'obtenir une EXTension du signe de l'op‚rande destination.

   La taille .B n'est pas autoris‚e.

   Dans le cas de EXT.W  dn:
   Le MSB (bit n°7) du registre de donn‚e est ‚tendu jusqu'au bit n°15   
   
   Dans le cas de EXT.L  dn:
   Le MSB (bit n°15) du registre de donn‚e est ‚tendu jusqu'au bit n°31

   Ceci permet de prolonger le contenu du registre de donn‚e sur un MOT
   ou sur un L-M en pr‚servant le signe de ce registre. 


   L'op‚rande destination ne peut ètre qu'un registre de donn‚e.
              -----------                    ------------------

   Les Bits N et Z du CCR sont positionn‚s suivant le r‚sultat de
   l'op‚rantion.      ---


   Exemple d'utilisation:
   ----------------------
   MOVE.W   #%0001011001010010,d5
   EXT.L    d5

   Le MSB (ici 0) sera copi‚ du bit n°16 au bit n°31, d5 contiendra donc
   un L-M :%00000000000000000001011001010010 et non plus un MOT.


   EXG     rn,rm
   -------------

   EXG permet d'‚changer le contenu de 2 registres dn ou an.

   La taille .L est prise par d‚faut

   L'op‚rande source est un registre de donn‚e ou d'adresse
              ------        --------          
   L'op‚rande destination est un registre de donn‚e ou d'adresse
              -----------        --------

   Le CCR n'est pas affect‚ par EXG
      ---
   Exemple d'utilisation:
   ----------------------
   MOVE.L   #$FF,d0
   MOVE.L   #$A2,d1
   EXG      d1,d0

   D0 contiendra le L-M $A2 et d1 le L-M $FF.



   SWAP     dn  
   -----------

   Echange les 2 MOTS du L-M contenu dans le registre de donn‚e dn

   L'op‚rande destination doit être un registre de donn‚e.
              -----------              ------------------                     
   Les Bits N et Z du CCR sont affect‚s en fonction du r‚sultat obtenu.
                      ---

   Exemple d'utilisation:
   ----------------------
   MOVE.L     #%11111111111111110000000000000000,d3
   SWAP       d3

   D3 contiendra le L-M :%00000000000000001111111111111111

   Remarquez que le signe du registre dn n'est pas conserv‚ et qu'il
   peut être chang‚ !




   ADD      dn,destination     :(.B),[.W],(.L)
   -----------------------
ou

   ADD         source,dn       :(.B),[.W],(.L)
   ---------------------  

   Ajoute l'op‚rande source DANS l'op‚rande destination ( l'op‚rande
   source est donc inchag‚e et le r‚sultat se trouve dans l'op‚rande
   destination! )

   Les 3 tailles d'op‚ration sont accept‚es.


   Les modes d'adressage autoris‚s pour l'op‚rande source si ADD
   s'‚crit: ADD.x  source,dn  sont:                ------          
            ----------------  
     dn
     an  
     BBBB
     BB
     #BBB
     (an)
     (an)+
     -(an)
     d(an)
     d(an,rn)
     d(pc)
     d(pc,rn)

    Si l'op‚rande source est un registre d'adresse, la taille .B n'est
    pas autoris‚e,si la taille est .W,il y a EXTension du signe de an.


   Les modes d'adressage autoris‚s pour l'op‚rande destination si ADD
   s'‚crit ADD.x  dn,destination sont:             -----------    
           --------------------- 

     dn
     BBBB
     BB
     (an)
     (an)+
     -(an)
     d(an)
     d(an,rn)


 
    Tous le Bits du CCR peuvent r‚agir à l'op‚ration ADD en fonction
    du r‚sultat obtenu.

    Exemple d'utilisation:
    ----------------------
    ADD.B  d0,d1
 
    L'octet de poids faible du registre de donn‚e d0 est ajout‚ a
    l'octet de poids faible de d1,le r‚sultat est dans d1:
    d0=d0, d1=d1+d0



    ADDI     #BBB,destination     :(.B),[.W],(.L)
    -------------------------

    ADDI se lit: 'ADD Immediate'

    Les 3 tailles d'op‚ration sont autoris‚es.
 
    La donn‚e imm‚diate source est ajout‚ à l'op‚rande destination.
              --------- ------
    Les modes d'adressage qui sont autoris‚s pour l'op‚rande 
    destination sont:
    -----------
    
     dn
     BBBB
     BB
     (an)
     (an)+
     -(an)
     d(an)
     d(an,rn)


    Les 5 codes du CCR sont affect‚s par ADDI
                   ---      
    Exemple d'utilisation:
    ----------------------
    ADDI.W   #12,(a0)

    On ajoute le mot 12 au mot point‚ par le registre d'adresse a0.



    ADDQ     #BBB,destination   :(.B),[.L],(.L)      
    -------------------------

    La donn‚e imm‚diate non sign‚e #BBB est ajout‚e DANS l'op‚rande
    destination.

    Il faut obligatoirement que  1<= #BBB <=8

    L'op‚rande destination admet les modes d'adressage:

     dn
     an
     BBBB
     BB
     (an)
     (an)+
     -(an)
     d(an)
     d(an,rn)

     Si l'op‚rande destination est un registre d'adresse an,la taille
     .B est interdite,si on utilise la taille .W il y aura EXTension
     du signe de an sur un L-M.


     Les 5 Bits du CCR sont modifi‚s par ADDQ en fonction du r‚sultat.
                   ---

     Exemple d'utilisation:
     ----------------------  
     ADDQ.W   #3,d0

     Ajoute le mot 3 au mot de poids faible de d0.
     
     Remarque:ADDQ est plus rapide que ADDI, ceci explique le nom
     -------- de l'instruction:ADD Quick
              Attention tout de même à ce que 1<= #BBB <=8

   
  
   ADDA       source,an     :(.W),(.L)
   --------------------

   Cette instructon se lit: 'ADD Adress'

   Elle complète ADD car ici l'op‚rande destination est un registre
   d'adresse.                           -----------        --------
   ---------
   Seuls les tailles .W et .L sont autoris‚es.

   ADDA ajoute l'op‚rande source au registre d'adresse an.

   Les modes d'adressages autoris‚s pour l'op‚rande source sont:
                                                    ------
     dn  
     an  
     BBBB
     BB
     #BBB
     (an)
     (an)+
     -(an)
     d(an)
     d(an,rn)
     d(pc)
     d(pc,rn)
     
   Le CCR n'est pas modifi‚ par ADDA
      ---
  
   Exemple d'utilisation:
   ----------------------
   ADDA.L    #2,a0

   a0 est incr‚ment‚ de 2 unit‚s.



   SUB       dn,destination     :(.B),[.W],(.L)
   ------------------------
ou

   SUB            source,dn     :(.B),[.W],(.L)
   ------------------------  

   Retranche l'op‚rande source DANS l'op‚rande destination ( l'op‚rande
   source est donc inchag‚e et le r‚sultat se trouve dans l'op‚rande
   destination! )

   Les 3 tailles d'op‚ration sont accept‚es.


   Les modes d'adressage autoris‚s pour l'op‚rande source si SUB
   s'‚crit: SUB.x  source,dn  sont:                ------          
            ----------------  
     dn
     an  
     BBBB
     BB
     #BBB
     (an)
     (an)+
     -(an)
     d(an)
     d(an,rn)
     d(pc)
     d(pc,rn)

    Si l'op‚rande source est un registre d'adresse, la taille .B n'est
    pas autoris‚e,si la taille est .W,il y a EXTension du signe de an.


   Les modes d'adressage autoris‚s pour l'op‚rande destination si SUB
   s'‚crit SUB.x  dn,destination sont:             -----------    
           --------------------- 

     dn
     BBBB
     BB
     (an)
     (an)+
     -(an)
     d(an)
     d(an,rn)


 
    Tous le Bits du CCR peuvent r‚agir à l'op‚ration SUB en fonction
    du r‚sultat obtenu.

    Exemple d'utilisation:
    ----------------------
    SUB.B  d0,d1
 
    L'octet de poids faible du registre de donn‚e d0 est retranch‚ a
    l'octet de poids faible de d1,le r‚sultat est dans d1:
    d0=d0, d1=d1-d0



    SUBI     #BBB,destination     :(.B),[.W],(.L)
    -------------------------

    SUBI se lit: 'SUBtract Immediate'

    Les 3 tailles d'op‚ration sont autoris‚es.
 
    La donn‚e imm‚diate source est retranch‚e à l'op‚rande destination.
              --------- ------
    Les modes d'adressage qui sont autoris‚s pour l'op‚rande 
    destination sont:
    -----------
    
     dn
     BBBB
     BB
     (an)
     (an)+
     -(an)
     d(an)
     d(an,rn)


    Les 5 codes du CCR sont affect‚s par SUBI
                   ---      
    Exemple d'utilisation:
    ----------------------
    SUBI.W   #12,(a0)

    On retranche le mot 12 au mot point‚ par le registre d'adresse a0.


    SUBQ     #BBB,destination   :(.B),[.L],(.L)      
    -------------------------

    La donn‚e imm‚diate non sign‚e #BBB est retranch‚e DANS l'op‚rande
    destination.

    Il faut obligatoirement que  1<= #BBB <=8

    L'op‚rande destination admet les modes d'adressage:
               -----------
     dn
     an
     BBBB
     BB
     (an)
     (an)+
     -(an)
     d(an)
     d(an,rn)

     Si l'op‚rande destination est un registre d'adresse an,la taille
     .B est interdite,si on utilise la taille .W il y aurra EXTension
     du signe de an sur un L-M.


     Les 5 Bits du CCR sont modifi‚s par SUBQ en fonction du r‚sultat.
                   ---

     Exemple d'utilisation:
     ----------------------  
     SUBQ.W   #3,d0

     Retranche le mot 3 au mot de poids faible de d0.
     
     Remarque:SUBQ est plus rapide que SUBI, ceci explique le nom
     -------- de l'instruction:SUBtarct Quick
              Attention tout de même à ce que 1<= #BBB <=8

   
  
   SUBA       source,an     :(.W),(.L)
   --------------------

   Cette instructon se lit: 'SUBtract Adress'

   Elle complète SUB car ici l'op‚rande destination est un registre
   d'adresse.                           -----------        --------
   ---------
   Seuls les tailles .W et .L sont autoris‚es.

   SUBA ajoute l'op‚rande source au registre d'adresse an.

   Les modes d'adressages autoris‚s pour l'op‚rande source sont:
                                                    ------
     dn  
     an  
     BBBB
     BB
     #BBB
     (an)
     (an)+
     -(an)
     d(an)
     d(an,rn)
     d(pc)
     d(pc,rn)
     
   Le CCR n'est pas modifi‚ par SUBA
      ---
  
   Exemple d'utilisation:
   ----------------------
   SUBA.L    #2,a0

   a0 est d‚cr‚ment‚ de 2 unit‚s (comme avec .W, -(a0) ).


   
   MULS    source,dn    
   -----------------

   Permet une MULtiplication Sign‚e de l'op‚rande source DANS le 
   registre de donn‚e dn.

   L'entier relatif 'source' est ‚tendu sur 16 bits et il est multi-
   pli‚ par le MOT de poids faible de dn.   -------
               ---
   Le r‚sultat est dans dn et c'est un L-M, entier relatif SIGNE.
                                        ---                ------
   L'op‚rande source admet les modes d'adressage:
              ------
     dn  
     BBBB
     BB
     #BBB
     (an)
     (an)+
     -(an)
     d(an)
     d(an,rn)
     d(pc)
     d(pc,rn)

    Les bits V et C du CCR sont mis à 0,les bits N,Z sont positionn‚s
    suivant le r‚sultat, X n'est pas affect‚.

    Exemple d'utilisation:
    ----------------------
    MOVE.W     #3,D0
    MULS       #-5,D0

    D0 contiendra le L-M ‚gal à 3*(-5)=-15


  
   MULU    source,dn    
   -----------------

   Permet une MULtiplication non sign‚e (Unsigned) de l'op‚rande source
   DANS le registre de donn‚e dn.

   L'entier relatif 'source' est ‚tendu sur 16 bits et il est multi-
   pli‚ par le MOT de poids faible de dn.   -------
               ---
   Le r‚sultat est dans dn et c'est un L-M,entier relatif NON SIGNE.
                                       ---                ----------
   L'op‚rande source admet les modes d'adressage:
              ------
     dn  
     BBBB
     BB
     #BBB
     (an)
     (an)+
     -(an)
     d(an)
     d(an,rn)
     d(pc)
     d(pc,rn)

    Les bits V et C du CCR sont mis à 0,les bits N,Z sont positionn‚s
    suivant le r‚sultat, X n'est pas affect‚.

    Exemple d'utilisation:
    ----------------------
    MOVE.W   #4,d2     
    MULU     #3,d2

    D2 contiendra le L-M ‚gal à 4*3=12

   
   DIVS    source,dn    
   -----------------

   Permet une Division Sign‚e du registre de donn‚e dn par l'entier 
   relatif ‚tendu sur 1 mot 'source'.

   L'entier relatif 'source' est ‚tendu sur 16 bits et c'est le diviseur
   du registre de donn‚e dn.                -------
      
   Le r‚sultat est dans dn et c'est un L-M, entier relatif SIGNE tel que:
                                       ---                 -----
   Le quotient occupe le mot de poids faible de dn.
      --------         
   Le reste (si il y en a) a le signe du dividende et occupe le mot de 
      -----  
   poids fort de dn.

   L'op‚rande source admet les modes d'adressage:
              ------
     dn  
     BBBB
     BB
     #BBB
     (an)
     (an)+
     -(an)
     d(an)
     d(an,rn)
     d(pc)
     d(pc,rn)

    Le bit C du CCR est mis à 0,les bits N,Z,V sont positionn‚s suivant
    le r‚sultat, le bit X n'est pas affect‚.

    Exemple d'utilisation:
    ----------------------  
    MOVE.W   #4,D2     
    MOVE.W   #12,D0
    DIVS     D2,D0
    MOVE.L   D0,RES

    BSS

RES DS.W     1
QUO DS.W     1

    Le mot point‚ par QUO contient 3 et le mot point‚ par RES contient
    0 car il n'y a pas de reste.

    NB:.Pour atteindre facilement les 2 mots (reste/quotient) du registre
    --  de donn‚e destination, on peut par exemple utiliser l'instruction
        'SWAP dn' vue pr‚c‚dement.

       .Si on pratique une division par 0, ceci entraine une proc‚dure
        d'exception et interromps l'execution du programme !
        (J'expliquerai plus tard ce que sont les proc‚dures d'exception.)

       
   DIVU    source,dn    
   -----------------

   Permet une Division NON SIGNEE du registre de donn‚e dn par l'entier 
   relatif ‚tendu sur 1 mot 'source'.

   L'entier relatif 'source' est ‚tendu sur 16 bits et c'est le diviseur
   du registre de donn‚e dn.                -------
     
   Le r‚sultat est dans dn et c'est un L-M, entier relatif NON SIGNE
   tel que:                            ---                 ---------
  
   Le quotient occupe le mot de poids faible de dn.
      --------         
   Le reste (si il y en a) occupe le mot de poids fort de dn.
      -----

   L'op‚rande source admet les modes d'adressage:
              ------
     dn  
     BBBB
     BB
     #BBB
     (an)
     (an)+
     -(an)
     d(an)
     d(an,rn)
     d(pc)
     d(pc,rn)

    Le bit C du CCR est mis à 0,les bits N,Z,V sont positionn‚s suivant
    le r‚sultat, le bit X n'est pas affect‚.


    NB:.Il faut bien veiller à ce que les donn‚es ('source' et 'dn') sont
    --  positives et à ce que l'op‚rande source soit diff‚rente de 0 !

       .Les Instructions qui oppèrent sur des donnn‚es non sign‚es sont
        plus rapides que leurs instructions compl‚mentaires qui opèrent
        sur des donn‚es sign‚es (MULS/MULU, DIVS/DIVU) , c'est là leur
        unique int‚rèt.

        Les instructions MULS et DIVS peuvent bien entendu aussi oppèrer
        sur des instructions positives.


   CLR      destination  (.B),[.W],(.L)
   --------------------
   L'instruction CLR permet d'‚teindre tous les BITS de l'op‚rande  
   destination (CLeaR).
   
   Les 3 tailles d'op‚rantion sont possibles.

   Les modes d'adressage autoris‚s pour l'op‚rande destination sont:
                                                   -----------
     dn
     BBBB
     BB
     (an)
     (an)+
     -(an)
     d(an)
     d(an,rn)


   Le bit Z du CCR est mis à 1, les bits N,V,C à 0 , le bit X n'est pas
   affect‚.    ---

   Exemple d'utilisation:
   ----------------------
   MOVE.W    #%1111011101110110,d0
   CLR.B     d0
 
   L'octet de poids faible de d0 est mis à 0, d0 contiendra donc le mot:
   %1111011100000000 .

   NB: .L'instruction CLR.x est logiquement ‚quivalente à l'instruction 
   ---  'MOVEQ.x  #0,destination' mais est curieusement moins rapide !
   



   AND  source,dn       (.B),[.W],(.L)
   --------------
   ou 

   AND  dn,destination  (.B),[.W],(.L)
   -------------------
  
   Permet d'effectuer un AND (et) logique entre ses deux op‚randes.   

   C.à.d qu'on ajoute les 2 op‚randes cod‚es en Binaire en se fixant
   une règle selon laquelle:

   1+1 donne 1
   1+0 donne 0
   0+0 donne 0
   0+1 donne 0

   Et cela pour chacun des bits des 2 op‚randes de l'instruction.
   
   Exemple:  MOVE.B     #%11101011,d0;  %11101011
   -------   MOVE.B     #%10101000,d1;  %10101000
             AND.B      d0,d1        ;   ||||||||
                                         ||||||||
                                         ''''''''
             on obtient l'octet:        %10101000

   Pour la première syntaxe possible de AND, les modes d'adressage 
   possibles pour l'op‚rande 'source' sont:
                              ------
     dn      
     an
     BBBB
     BB
     #BBB
     (an)
     (an)+
     -(an)
     d(an)
     d(an,rn)
     d(pc)
     d(pc,rn)

   Pour la seconde forme de AND,les modes d'adressage autoris‚s pour 
   l'op‚rande 'destination' sont:
               -----------
     dn
     an
     BBBB
     BB
     (an)
     (an)+
     -(an)
     d(an)
     d(an,rn)

    
    Seuls les bits N et Z du CCR sont affect‚s par cette instruction.         
                             ---                             


   OR   source,dn       (.B),[.W],(.L)
   --------------
   ou 

   OR   dn,destination  (.B),[.W],(.L)
   -------------------
  
   Permet d'effectuer un OR (ou) logique entre ses deux op‚randes.   

   C.à.d qu'on ajoute les 2 op‚randes cod‚es en Binaire en se fixant
   une règle selon laquelle:

   1+1 donne 1
   1+0 donne 1
   0+1 donne 1
   0+0 donne 0

   Et cela pour chacun des bits des 2 op‚randes de l'instruction.
   
   Exemple:  MOVE.B     #%11101011,d0;  %11101011
   -------   MOVE.B     #%10101000,d1;  %10101000
             OR.B      d0,d1         ;   ||||||||
                                         ||||||||
                                         ''''''''
             on obtient l'octet:        %11101011

   Pour la première syntaxe possible de OR, les modes d'adressage 
   possibles pour l'op‚rande 'source' sont:
                              ------
     dn      
     an
     BBBB
     BB
     #BBB
     (an)
     (an)+
     -(an)
     d(an)
     d(an,rn)
     d(pc)
     d(pc,rn)

   Pour la seconde forme de OR,les modes d'adressage autoris‚s pour 
   l'op‚rande 'destination' sont:
               -----------
     dn
     an
     BBBB
     BB
     (an)
     (an)+
     -(an)
     d(an)
     d(an,rn)

    
    Seuls les bits N et Z du CCR sont affect‚s par cette instruction.         
                             ---                             
        


   EOR  dn,destination  (.B),[.W],(.L)
   -------------------
  
   Permet d'effectuer un EOR (ou exclusif) logique entre ses deux 
   op‚randes.   

   C.à.d qu'on ajoute les 2 op‚randes cod‚es en Binaire en se fixant
   une règle selon laquelle:

   1+1 donne 0
   0+0 donne 0
   0+1 donne 1
   1+0 donne 1

   Et cela pour chacun des bits des 2 op‚randes de l'instruction.
   
   Exemple:  MOVE.B     #%11101011,d0;  %11101011
   -------   MOVE.B     #%10101000,d1;  %10101000
             EOR.B      d0,d1        ;   ||||||||
                                         ||||||||
                                         ''''''''
             on obtient l'octet:        %01000011


   Les modes d'adressage autoris‚s pour l'op‚rande 'destination' sont:
                                                    -----------
     dn
     an
     BBBB
     BB
     (an)
     (an)+
     -(an)
     d(an)
     d(an,rn)

    
    Seuls les bits N et Z du CCR sont affect‚s par cette instruction.         
                             ---                             


   NOT  dn,destination  (.B),[.W],(.L)
   -------------------
  
   Permet d'effectuer un NOT (n‚gation) logique.   

   NOT calcule le compl‚ment à 1 d'un nombre. (NEG le compl‚ment à 2)
    
   Les modes d'adressage possibles pour l'op‚rande 'source' sont:
                                                    ------
     dn
     an
     BBBB
     BB
     (an)
     (an)+
     -(an)
     d(an)
     d(an,rn)

    
    Seuls les bits N et Z du CCR sont affect‚s par cette instruction.         
                             ---                             

    
    
    Les instructions  AND,OR,EOR sont complèt‚es par les 3 instructions
    logiques imm‚diates:

    ANDI    #BBB,destination (.B),[.W],(.L)
    ------------------------
    ORI     #BBB,destination (.B),[.W],(.L)
    ------------------------
    EORI    #BBB,destination (.B),[.W],(.L)
    ---------------------------------------
    .Ces instructions ont un  r“le commun à leurs instructions
     compl‚mentaires mais elles admettent une donn‚e imm‚diate 
     comme op‚rande source.                   ----------------
                    ------
     L'op‚randes destination admet les modes d'adressage:
                 -----------
     dn
     BBBB
     BB
     (an)
     (an)+
     -(an)
     d(an)
     d(an,rn)
    
    Seuls les bits N et Z du CCR sont affect‚s par ces 3 instructions.         
                             --- 
    NB: L'op‚rande destination peut aussi être: 'SR' ou 'CCR'.
    --  Mais dans le cas o— l'op‚rande destination est CCR, l'exectution 
        de ces instruction n‚cessitent qu'on soit en MODE SUPERVISEUR !
                                                    ----------------
        Exemple:  ANDI.B  #%11111011,sr
        -------  
        met à 0 le bit Z du SR sans changer les autres bits du SR. 
        
        
        Je r‚pète: ATTENTION! 
        Le CCR ne peut ètre atteint qu'en MODE SUPERVISEUR , sinon ceci 
        provoquerait l'execution d'une proc‚dure d'exception et l'arrêt 
        du programme.
        Avec les modes d'adressage SR ou CCR ,les instructions ANDI, 
        ORI,EORI sont donc des instructions qui n‚cessitent que l'on 
        soit un mode superviseur si l'on modifie le CCR ,c'est l'unique
        manière d'atteindre le CCR.
        Ce sont donc des INSTRUCTIONS PRIVILEGIEES dans ce cas.
        Le SR est par contre aussi disponible en mode utilisateur.
       


    MOVE     sr,destination  
    -----------------------

    Sauve le registre d'‚tat SR à l'adresse destination.

    Le contenu du CCR n'est pase affect‚ par l'instruction.
                  ---  
    Les modes d'adressage autoris‚s pour l'op‚rande destination sont:
                                                    -----------   
     dn
     an
     BBBB
     BB
     (an)
     (an)+
     -(an)
     d(an)
     d(an,rn)


     Exemple d'utilisation:
     ----------------------
     MOVE   sr,dest

     BSS

dest DS.W   1

     le mot point‚ par 'dest' contiendra le SR.



    MOVE     source,sr  
    ------------------

    Restaure le CCR contenu dans (à) l'op‚rande source.

    Le CCR est charg‚ avec sa nouvelle valeur, le SR n'est pas affect‚.
       ---                                        --
    Les modes d'adressage autoris‚s pour l'op‚rande source sont:
                                                    ------
     dn
     an
     BBBB
     BB
     (an)
     (an)+
     -(an)
     d(an)
     d(an,rn)


     Exemple d'utilisation:
     ----------------------
     MOVE   sr,dest             ;sauve le SR avec Z=0
     CLR    d0                  ;ici le bit Z du CCR est mis à 1 (CLeaR)
     MOVE   aaa,ccr             ;on recharge le CCR de 'aaa': Z=0   
    
     BSS

dest DS.B   1  ;SR
aaa  DS.B   1  ;CCR
   
     le CCR est charg‚ avec le mot point‚ par 'aaa'.


     
     TST      destination    (.B),[.W],(.L)
     --------------------

     TeST compare l'op‚rande destination à 0 et modifie les bits du
     CCR en cons‚quence.
     ---
     Les 3 tailles d'op‚ration sont possibles.

     Les modes d'adressage autoris‚s pour l'op‚rande destination sont:
                                                     -----------
     dn
     an
     BBBB
     BB
     (an)
     (an)+
     -(an)
     d(an)
     d(an,rn)

    Les bits N,Z du CCR sont affect‚s en fonction du r‚sultat de la
    comparaison ,Les bits V et C sont mis à 0 ,X n'est pas affect‚.
         
    Exemple d'utilisation:
    ---------------------- 
    MOVE.W     #5,d0     ;d0=5
    TST.W      d0        ;le bit Z du CCR est mis à 0 car d0=5
    SUB        #5,d0     ;d0=5-5=0
    TST.W      d0        ;le bit Z du CCR est mis à 1 car d0=0
  
     

     CMP      source,destination    (.B),[.W],(.L)
     ---------------------------

     CoMPare l'op‚rande destination à l'op‚rande source en effectuant la
     soustraction 'destination' - 'source' et modifie les bits du CCR en
     cons‚quence.                                                 ---
                                                            
     Les 3 tailles d'op‚ration sont possibles.

     Les modes d'adressage autoris‚s pour l'op‚rande source sont:
                                                     ------
     dn
     an        (taille .B interdite)
     BBBB
     BB
     #BBB
     (an)
     (an)+
     -(an)
     d(an)
     d(an,rn)
     d(pc)
     d(pc,rn)

    Les modes d'adressage autoris‚s pour l'op‚rande destination sont:
                                                    -----------
     dn
     BBBB
     BB
     (an)
     (an)+
     -(an)
     d(an)
     d(an,rn)


    Les bits N,Z,V,C du CCR sont affect‚s en fonction du r‚sultat de 
    la comparaison ,Le bit X n'est pas affect‚.
         
    Exemple d'utlisation:
    --------------------- 
    MOVE.B     #2,d0
    MOVE.B     #98,d1
    CMP.B      d0,d1

    L'instruction CMP sera utilis‚e avec les instructions du type B**
    et DB** que nous ‚tudierons plus loin.



     CMPI      #BBB,destination    (.B),[.W],(.L)
     --------------------------

     CoMPare l'op‚rande destination à l'op‚rande source imm‚diate en
     effectuant la soustraction  'destination' - 'source' et modifie 
     les bits du CCR en cons‚quence.
                 ---   
     Les 3 tailles d'op‚ration sont possibles.

     Les modes d'adressage autoris‚s pour l'op‚rande destination sont:
                                                     -----------
     dn
     BBBB
     BB
     (an)
     (an)+
     -(an)
     d(an)
     d(an,rn)


    Les bits N,Z,V,C du CCR sont affect‚s en fonction du r‚sultat de 
    la comparaison ,Le bit X n'est pas affect‚.
         
    Exemple d'utilisation:
    ---------------------- 
    CMPI.L   #3,d3

    Compare le contenu du registre de donn‚e d3 à 3.



     CMPA      source,an    [.W],(.L)
     -------------------

     CoMPare le registre d'adresse 'an' à l'op‚rande source en effectuant
     la soustraction  'an' - 'source' et modifie les bits du CCR en con-
     s‚quence.                                               ---

     Seules les tailles d'op‚ration .W et .L sont possibles.

     Les modes d'adressage autoris‚s pour l'op‚rande source sont:
                                                     ------
     dn
     an
     BBBB
     BB
     #BBB
     (an)
     (an)+
     -(an)
     d(an)
     d(an,rn)
     d(pc)
     d(pc,rn)


    Les bits N,Z,V,C du CCR sont affect‚s en fonction du r‚sultat de 
    la comparaison ,Le bit X n'est pas affect‚.
         
    Exemple d'utilisation:
    ---------------------- 
    CMPA.L   a2,a3

    Compare le contenu du registre d'adresse a3 au contenu du regitre
    d'adresse a2.


     CMPM       (an)+,(am)+    (.B),[.W],(.L)
     ----------------------

     CoMPare l'op‚rande destination à l'op‚rande source en effectuant
     la soustraction  'destination' - 'source' et modifie les bits du
     CCR en cons‚quence.

     Les 3 tailles d'op‚ration sont possibles.

     Le mode d'adressage autoris‚ pour l'op‚rande destination et pour
     l'op‚rande destination est le mode POSTINCREMENTE.
                                        --------------                                                   
     Les bits N,Z,V,C du CCR sont affect‚s en fonction du r‚sultat de 
     la comparaison ,Le bit X n'est pas affect‚.

         
     Exemple d'utilisation:
     ----------------------
     LEA      TAB,a1     ;pose l'adresse de 'TAB' dans a1
     LEA      BAT,a2     ;et l'adresse de 'BAT' dans a2
     MOVE     #5,d3

BBB  CMPM.B   (a1)+,(a2)+     ;CMPM l'octet point‚ par a1 à l'octet point‚
                              ;par a2 et incr‚mente d'une unit‚ les 2
                              ;registres d'adresses.
     DBF      d3,BBB          ;boucle 6 fois

     DATA                     ;table des donn‚es (octets)     

TAB  DC.B      1,2,3,4,5,6
BAT  DC.B      6,5,4,3,2,1




     B**     label      (Branch & Condition Code)
     -------------
     
     L'instruction admet diff‚rents Codes Condition (**) qui peuvent
     changer l'action de B**. 

     B** oppère un saut à l'adresse point‚e par le 'label' si le
     code condition demand‚ est justifi‚ après une CoMParaison ,
     sinon le programme continue normalement.


     Les ** sont:

     B**         Si A et B sont SIGNES            | Sinon, syntaxe:
     ---------------------------------------------+----------------
     Bgt  si   A>B  (Greater Than)                | Bbi  (Higher)
     Beq  si   A=B  (EQual)                       | Beq  (EQual)   
     Blt  si   A<B  (Less Than)                   | Bcs  (inf‚rieur)   
     Bne  si   A est diff‚rent de B   (Not Equal) | Bne  (Not Equal)   
     Bge  si   A >= B (Greater or Equal)          | Bcc  (sup. ou ‚gal)   
     Ble  si   A <= B (Less or Equal)             | Bls  (inf. ou ‚gal)
                                                  

     L'instruction B** teste en fait les bits du CCR:

     Beq test si le bit Z du CCR est à 1 (CPM soustrait les op‚randes
                                          pour les tester)


     On retrouve aussi les Codes de condition qui ne tiennent que compte
     de certains bits du CCR et non pas du r‚sultat d'une comparaison :
     
     Bmi  si le bit N du CCR est à 1  
          (Donc N‚gatif)

     Bpl  si le bit N du CCR est nul OU si le bit Z du CCR est à 1 
          (Donc Positif ou nul)
 
     Bvc  si le bit V du CCR est nul 
          (Donc si il n'y a pas d‚bordement)

     Bvs  si le bit V du CCR est à 1
          (Donc si il y a d‚bordement)

     Bcc  si le bit C du CCR est à 1

     Bcs  si le bit C du CCR est nul


     Exemple d'utilisation:
     ----------------------
     MOVE.W    #4,d3     ;d3=4
     MOVE.W    dat,d0    ;d0=-20
     ADD       d3,d0     ;d0=-20+4=-16
     CMPI      #4,d0     ;Compare -16 à 4
     BEQ       egal      ;Si c'est ègal (Z=1) on saute en 'egal'
     BMI       negatif   ;Si c'est n‚gatif (N=1) on saute en 'negatif'

     DATA

dat  DC.W      -20 


     Dans notre exemple, le programme sautera en 'negatif', ceci serait
     le cas même si il n'y avait pas de 'CMPI #4,d0' car avec Bmi, seul
     le bit N du CCR intervient, il n'y a pas besoin de comparaison,
     contrairement à Beq.

     NB: Le saut au label destination s'effectue par le chargement de
     --  la valeur du PC à ce label dans le PC actuel.




     DB**    dn,label
     ----------------

     Permet d'effectuer une boucle:

     Le nombre de passages est contenu dans le registre de donn‚e dn.
     L'adresse a laquelle le saut pour la boucle doit d'effectuer est
     un label.
     L'instruction admet aussi diff‚rents codes condition (**) qui 
     peuvent op‚rer un d‚branchement de la boucle si ils sont
     v‚rifi‚s.

     Les Codes condition possibles sont les mêmes qu'avec l'instruction
     B** .

     DB** teste d'abord la condition ** ,si celle-ci est v‚rifi‚e il y
     a d‚branchement de la boucle et le programme continue à l'instruc-
     tion suivante, sinon , le registre dn est d‚cr‚ment‚ d'1:
     Si dn vaut -1 il y a arrèt de la boucle et le programme continue à
     la prochaine instruction.
     Si dn est positif ou nul, il s'oppère un saut à l'adresse point‚e
     par le label.

     Le CCR n'est pas modifi‚ par DB**
        ---

     NB:DB** admet aussi les codes condition suivant:
     --
        .DBf  = toujours faux, il n'y a pas de comparaison ou de test
 
        .DBt  = toujours vrai, idem

     Exemple d'utilisation:
     ----------------------
     LEA       dat,a0    ;adresse de 'dat' dans a0
     MOVE      #7,d1     ;7 dans d1

boo  MOVE.W    (a0)+,d2  ;pose le MOT point‚ par a0 dans le MOT de poids
                         ;faible de d2 en mode postincr‚ment‚
     DBMI      d1,boo    ;teste si N=1 (mi), d‚cr‚mente d1 et saute en
                         ;'boo' si d1 est positif ou nul.
     MOVE.W    d2,res    ;pose le MOT de poids faible de d2 en 'res'

     DATA

dat  DC.W      1,5,486,0,-2,0,4,8,100,20,5   ;11 mots
 
     BSS

res  DS.W      1                        ;r‚serve 1 mot en 'res'

     END

     La condition MI (N=1) a ‚t‚ v‚rifi‚e au bout de 5 passages en 'boo',
     il y a eu d‚branchement de la boucle avant l'execution des 8 pass-
     ages pr‚vus car on a pos‚ le MOT -2 dans d2: Ceci avait pour effet
     de mettre le bit N du CCR à 1 et par là mème de sortir de la boucle
     car la condition MI a ‚t‚ v‚rifi‚e.
 
     A la fin du programme: d2=-2, a0 pointe le mot ‚gal à 0, d1=3 
     et 'res' pointe sur le mot ‚gal à -2




    S**    Destination
    ------------------

    L'instruction S** admet elle aussi les diff‚rents Codes condition.

    Elle teste si la condition ** est v‚rifi‚e.

    Si elle s'avère vraie, l'OCTET qui se trouve à l'adresse point‚e 
    par l'op‚rande destination est mis à -1 (soit $FF ou %11111111)

    Si elle s'avère fausse, l'OCTET est mis à 0 ($00 ou %00000000)

    Il faudra bien entendu r‚serv‚ cet Octet ! (avec DS.B 1 par exp)

    Les modes d'adressage possibles pour l'op‚rande destination sont:
                                                    -----------

     dn
     an
     BBBB
     BB
     (an)
     (an)+
     -(an)
     d(an)
     d(an,rn)


    Le CCR n'est pas affect‚ par S**
       ---
 
    Exemple d'utilisation:
    ---------------------- 
     MOVE      #3,d0     ;mot 3 dans d0
     MOVE      #3,d1     ;mot 3 dans d1
     CMP.W     d0,d1     ;compare les mots de poids faible de d1 et d0
     SEQ       res       ;Si c'est Egal:met L'octet de 'res' à -1 sinon
                         ;met le à 0 (ici d1=d0 on le met donc à -1)
     TST.B     res       ;Compare loctet de 'res' à 0 (0=faux pour S**)
     BEQ       fin       ;si il est ‚gal à 0:va en 'fin'
     BNE       egal      ;sinon (Not Equal) va en 'egal'

     BSS

res  DS.W      1         ;l'octet pour S**

     END

     Dans notre exemple: Le programme va sauter en 'egal'.


          
     
                        ------------------------



  PIECHOCKI Laurent
  8,impasse Bellevue                    Suite dans :INSTRUC2.DOC
  57980 TENTELING                       ------------------------



        

Back to ASM_Tutorial