Pl INSTRUC.DOC
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