Pl INSTRUC.DOC/fr
------------------------- 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 :[[pl_INSTRUC2.DOC]] 57980 TENTELING ------------------------
Back to ASM_Tutorial