MEMO Assembleur
Jump to navigation
Jump to search
MEMO ASSEMBLEUR
---------------
Ce qui suit n'est pas une initiation … l'assembleur ni mˆme une
documentation technique, mais plut“t un aide m‚moire sur l'assembleur
68000. Ce document vous sera utile imprim‚, ou bien charg‚ en m‚moire dans
un ‚diteur de textes r‚sident, de maniŠre … l'avoir en permanence sous les
yeux.
Les registres
-------------
Registres de donn‚es.
8 registres de 32 bits : D0, D1, D2, D3, D4, D5, D6, D7.
Registres d'adresses.
7 registres de 32 bits : A0, A1, A2, A3, A4, A5, A6.
1 pointeur de pile : A7 (SP).
Compteur d'instructions sur 32 bits : PC
Registre d'‚tat de 16 bits : SR.
5 bits de mode utilisateur :
Bit 0 : Drapeau de retenue (Carry).
Bit 1 : Drapeau de d‚passement (oVerflow).
Bit 2 : Drapeau du valeur nulle (Zero).
Bit 3 : Drapeau de n‚gativit‚ (Negative).
Bit 4 : Drapeau d'extension (eXtend).
5 bits de mode superviseur :
Bit 8-10 : Masque d'interruption (7 niveaux).
Bit 13 : Mode superviseur.
Bit 15 : Mode Trace.
Les modes d'adressages.
-----------------------
La syntaxe g‚n‚rale est :
[Commande] [Op‚rande source], [Op‚rande destination].
Le format des donn‚es est :
.L : mot long (32 bits)
.W : mot court (16 bits)
.B : octet (8 bits)
Registre direct.
-----------------
L'op‚rande se trouve dans un registre.
Ex : move.w D0,D1
=> Mettre le contenu de D0 dans D1.
Adressage absolu.
-----------------
L'op‚rande se trouve dans une adresse de la m‚moire.
Ex : move.l $FF8240,A0
=> Mettre le contenu de l'adresse $FF8240 dans A0.
Adressage relatif au PC.
------------------------
L'op‚rande se trouve dans une adresse m‚moire calcul‚e par rapport au
compteur d'instructions.
Ex : move.l $1000(PC),D0
=> Mettre le contenu d'une adresse se trouvant … PC + $1000 octets.
Il est ‚galement possible d'ajouter … ce d‚calage le contenu d'un re-
gistre.
Ex : move.l A0,10(PC,D0)
=> Mettre le contenu de A0 dans une adresse se trouvant … PC + 10
octets + le contenu de D0.
Dans tous les cas, le d‚calage de l'op‚rande destination ne porte sur
que sur 8 bits, et la taille du registre ajout‚ doit ˆtre un mot de 16
bits.
Adressage indirect.
-------------------
L'adresse de l'op‚rande se trouve dans un registre d'adresse.
Ex : move.l A0,(A1)
=> Mettre le contenu du registre A0 dans l'adresse que contient le re-
gistre A1.
Adressage indirect post incr‚ment‚.
-----------------------------------
L'adressage s'effectue comme un adressage indirect, mais le contenu du
registre d'adresse est incr‚ment‚ de la taille de l'op‚rande APRES
l'ex‚cution de la commande.
Ex : move.b D0,(A0)+
=> Mettre le contenu du registre D0 dans l'adresse que contient le
registre A0, puis l'adresse que contient le registre A0 est augment‚e
de 1 octet (.B).
Ex : move.l (A1)+,(A0)+
=> Mettre le contenu de l'adresse que contient le registre A1 dans
l'adresse que contient le registre A0, puis les adresses que
contiennent A1 et A0 sont augment‚es de 4 octets (.L).
Adressage indirect pr‚ d‚cr‚ment‚.
----------------------------------
L'adressage s'effectue comme un adressage indirect, mais le contenu du
registre d'adresse est d‚cr‚ment‚ de la taille de l'op‚rande APRES
l'ex‚cution de la commande.
Ex : move.l D0,-(A7)
=> D‚cr‚menter de 4 octets l'adresse que contient le registre A7, et
mettre le contenu de D0 dans cette adresse. Le registre A7 servant de
pointeur de pile, cette op‚ration ‚quivaut … ranger le contenu de D0
au sommet de la pile.
Adressage indirect avec d‚calage.
---------------------------------
L'adressage s'effectue comme un adressage indirect, mais on rajoute un
d‚calage de 16 bits au contenu du registre d'adresse.
Ex : move D0,2(A0)
=> Mettre le contenu de D0 dans l'adresse + 2 octets que contient le
registre A0.
Adressage indirect ind‚x‚ avec d‚calage.
----------------------------------------
L'adressage s'effectue comme un adressage indirect avec d‚calage, mais
on rajoute le contenu d'un autre registre au contenu du registre
d'adresse.
Ex : move.l 10(A0,D0),D1
=> Prendre l'adresse contenue dans A0, lui ajouter 10 + le contenu de
D0; prendre le contenu de cette adresse et le mettre dans le registre
D1.
Adressage imm‚diat.
-------------------
L'op‚rande source est prise comme telle.
Ex : move #$10000,A2
=> Mettre la valeur $10000 dans le regisre A2.
Il existe une variante QUICK qui permet d'adresser des valeurs
imm‚diates plus rapidement (la commande prend moins de cycles); pour
cela, il faut que la valeur tienne sur 3 bits, sauf pour la commande
MOVE o— elle peut tenir sur 8 bits, … condition que la destination
soit un registre de donn‚es.
Ex : moveq #100,D0
Ex : addq.l #1,A0
Les instructions.
-----------------
Variantes :
-----------
Les variantes des instructions sont des suffixes qui sont plac‚s …
la fin de la commande.
A : Indique que l'op‚rande destination est un registre d'adresse.
La plupart des assembleurs le font automatiquement.
Ex : movea.l D0,A1
I : Indique que l'op‚rande source est une donn‚e imm‚diate. La
plupart des assembleurs le font automatiquement.
Ex : addi.l D0,A1
Q : Indique que l'adressage imm‚diat doit ˆtre trait‚ en QUICK (cf
plus haut).
Ex : moveq #$C0,D0
X : Sert … reconnaŒtre les op‚rations arithm‚tiques qui se servent
du drapeau X (extend). En g‚n‚ral, ce drapeau prend la valeur de
la retenue (carry); mais il arrive que la retenue soit modifi‚e
par des op‚rations de transfert de donn‚es sur 32 bits. Dans ce
cas, le drapeau X, lui, n'est pas modifi‚ et reste disponible pour
la suite des calculs.
Sens des op‚rations :
---------------------
Dans le cas d'op‚rations arithm‚tiques ou logiques, le r‚sultat de
l'op‚ration se trouve toujours dans l'op‚rande de destination.
Ex : add D0,D1
=> Ajoute le contenu de D0 au contenu de D1; le r‚sultat est dans
D1.
Format des op‚rations :
-----------------------
Toutes les instructions peuvent poss‚der une extension de type .B,
.W ou .L. Celle-ci pr‚cise la taille du traitement de l'op‚ration.
Par exemple, bien qu'un registre de donn‚e porte sur 32 bits, la
commande clr.b D0 n'effacera que l'octet le plus faible de ce
registre. La plupart des assembleurs considÅ rent la taille .W
comme ‚tant implicite.
Ex : move #1,D0 ‚quivaut … move.w #1,D0.
Les commandes :
---------------
ABCD (Add Decimal with Extend)
Aditionner deux valeurs de type Binaire Cod‚ D‚cimal.
Ex : abcd #$34,D0
ADD (Addition binary)
Additionner les deux op‚randes.
Ex : adda.l D1,A2
AND (Logical And)
Effectuer un ET logique entre les deux op‚randes.
Ex : andi #$7F,D0
ASL (Arithmetic Shift Left)
Effectuer un d‚calage de bits vers la gauche. Le nombre de bits
d‚cal‚s est sp‚cifi‚ par l'op‚rande source. Le bit de poids le
plus fort est plac‚ dans C et X, le bit de poids le plus faible
est remplac‚ par un 0. La taille de l'op‚rande source est de 3
bits en adressage imm‚diat, ou de 16 bits s'il est dans un regis-
tre. Pour la plupart des assembleurs, l'absence d'op‚rande source
‚quivaut … un d‚calage de 1 bit.
Ex : asl #2,D0
ASR (Arithmetic Shift Right)
Effectuer un d‚calage de bits vers la droite. Le nombre de bits
d‚cal‚s est sp‚cifi‚ par l'op‚rande source. Le bit de poids le
plus faible est plac‚ dans C et X, le bit de poids le plus fort
est remplac‚ par le bit de signe. La taille de l'op‚rande source
est de 3 bits en adressage imm‚diat, ou de 16 bits s'il est dans
un registre. Pour la plupart des assembleurs, l'absence d'op‚rande
source ‚quivaut … un d‚calage de 1 bit.
Ex : asr A1
Bcc (Branch Condionally)
G‚rer des sauts conditionnels. La destination du saut est toujours
une adresse relative allant de -128 … +127 octets. L'ex‚cution ef-
fective du saut d‚pend de la condition pos‚e par les drapeaux du
registre SR.
BRA : BRanch Always
=> Saut inconditionnel.
BCC : Branch Clear Carry
=> Saut si C=0.
BCS : Branch Carry Set
=> Saut si C=1.
BEQ : Branch EQual
=> Saut si Z=1.
BGE : Branch Greater or Equal
=> Saut si (N=1 ET V=1) OU (N=0 ET V=0)
BGT : Branch Greater Than
=> Saut si (N=1 ET V=1 ET Z=0) OU (N=0 ET V=0 ET Z=0)
BHI : Branch HIgher
=> Saut si (C=0 OU Z=0)
BLE : Branch Lesse or Equal
=> Saut si Z=1 OU (N=1 ET V=0) OU (N=0 ET V=1)
BLS : Branch Lower or Same
=> Saut si C=1 OU Z=1
BMI : Branch MInus
=> Saut si N=1
BNE : Branch Not Equal
=> Saut si Z=0
BPL : Branch PLus
=> Saut si N=0
BVC : Branch oVerflow Clear
=> Saut si V=0
BVS : Branch oVerflow Set
=> Saut si V=1
BCHG (Bit Test and Change)
Le bit donn‚ par l'op‚rande source de l'op‚rande destination est
invers‚. L'‚tat d'origine est enregistr‚ dans Z. La taille de
l'op‚rande source est .B si elle se trouve en m‚moire ou .L si
elle se trouve dans un registre.
Ex : bchg #1,D1
BCLR (Bit Test and Clear)
Le bit donn‚ est effac‚. Le reste est identique … BCHG.
Ex : bclr #3,$1234
BSET (Bit Test and Set)
Le bit donn‚ est mis … 1. Le reste est identique … BCHG.
Ex : bset (A0)
BSR (Branch to Subroutine)
Saut inconditionnel … un sous programme. La destination du saut
est toujours une adresse relative allant de -128 … +127 octets.
Ex : bsr truc
BTST (Bit Test)
Test de l'‚tat du bit donn‚, sans le modifier. Le reste est iden-
tique … BCHG.
Ex : btst D0
CHK (Check Register against Boundaries)
V‚rification si le contenu d'un registre de donn‚es est plus grand
que l'op‚rande source; si tel est le cas, le processeur se bran-
che sur le vecteur d'exception No 6, et le programme se poursuit …
l'adresse qui est indiqu‚e … l'adresse $18. Dans les autres cas,
il ne se passe rien.
Ex : chk #$FE,D0
CLR (Clear Operand)
L'op‚rande donn‚e est effac‚e.
Ex : clr.l D0
CMP (Compare)
L'op‚rande source est soustraite de l'op‚rande destination, sans
que celle-ci soit modifi‚e. Les drapeaux du registre SR sont
positionn‚s selon le r‚sultat. Avec la variante CMPM, les deux
op‚randes sont adress‚es selon le mode (Ax)+.
Ex : cmp #2,D0
DBcc (Test Condition Decrement and Branch)
Un registre de donn‚es est d‚cr‚ment‚ et le saut est effectu‚
selon le test des drapeaux de SR, ou si le registre est diff‚rent
de -1. Les conditions et l'‚tendue du saut sont identiques … Bcc.
Ex : dbra D0,truc
DIVS (Divide Signed)
L'op‚rande destination est divis‚e par l'op‚rande source, avec
consid‚ration des signes. AprŠs cette op‚ration, l'op‚rande
destination renferme dans sa partie inf‚rieure la partie entiŠre
du r‚sultat, et dans sa partie sup‚rieure, le reste ‚ventuel qui
pr‚sente le mˆme signe que le quotient.
Ex : divs #2,D0
DIVU (Divide Unsigned)
Mis … part le signe qui n'est pas utilis‚ ici, tout est identique
… DIVS.
EOR (Exclusive Or)
Effectuer un OU exclusif logique entre les deux op‚randes.
Ex : eor #$7F,D0
EXG (Exchange Register)
Interversion de deux registres.
Ex : exg D0,D1
EXT (Sign Extend)
L'op‚rande est compl‚t‚e avec son bit 7 (.W) ou avec son bit 15
(.L) pour ˆtre mise au format de traitement.
Ex : ext.l D0
JMP (Jump)
Saut inconditionnel … l'adresse donn‚e. La diff‚rence avec BRA est
que l'adresse n'est pas relative, mais repr‚sente effectivement la
destination du saut.
Ex : jmp (A2)
JSR (Jump to Subroutine)
Saut inconditionnel … un sous-programme. la diff‚rence avec BSR
est la mˆme qu'entre JMP et BRA.
LEA (Load Effective Address)
Chargement d'un registre d'adresse avec l'adresse elle-mˆme, et
non pas avec le contenu de l'adresse.
Ex : lea truc, A1
LINK (Link Stack)
Cette instruction place tout d'abord le registre d'adresse donn‚
en op‚rande source sur la pile. Le contenu du pointeur de pile
(SP) est ensuite transf‚r‚ dans ce registre, et il est
‚ventuellement additionn‚ au d‚calage donn‚ par l'op‚rande
destination et plac‚ su le pointeur de pile.
Ex : link a6,#0
LSL (Logical Shift Left)
Identique … ASL.
LSR (Logical Shift Right)
Identique … ASR, mais le bit de poids le plus fort est remplac‚
par un 0 et non par le bit de signe.
MOVE
L'op‚rande source est transf‚r‚e dans l'op‚rande destination.
MOVEM (Move Multiple Registers)
Dans ce cas particulier, l'op‚rande peut ˆtre constitu‚e d'une
liste de registres. De cette maniÅ re, une liste complÅ te de
registres peuvent ˆtre empil‚s en une seule instruction.
Ex : movem.l D0-D4,-(SP)
MOVEP (Move Peripheral Data)
Transfert de donn‚es pour l'emploi de p‚riph‚riques. L'op‚rande
source est toujours un registre de donn‚es, et l'op‚rande destina-
tion un registre d'adresse indirect avec d‚calage.
Ex : movep d0,12(A0)
MULS (Multiply Signed)
Multiplication des deux op‚randes avec respect du signe.
Ex : muls #2,D1
MULU (Multiply Unsigned)
Multiplication des deux op‚randes sans consid‚ration du signe.
NBCD (Negate Decimal with Extend)
N‚gation d'une op‚rande BCD avec le drapeau X.
Ex : nbcd D1
NEG (Negate Binary)
N‚gation de l'op‚rande donn‚e. Correspond … (0 - op‚rande).
Ex : neg D1
Variante : NEGX qui correspond … (0 - op‚rande - X).
NOP (No Operation)
Instruction qui n'a aucun effet, mais qui consomme deux cycles.
NOT (Logical Not)
Effectue un NON logique sur l'op‚rande.
Ex : not D0
OR (Logical Or)
Effectue un OU logique entre les deux op‚randes.
Ex : or #$3F,D0
PEA (Push Effective Address)
L'adresse d‚sign‚e, et non son contenu, est empil‚e.
Ex : pea truc(pc)
RESET (Reset External Devices)
Provoque la remise … z‚ro de tous les composants p‚riph‚riques
connect‚s. C'est une instruction privil‚gi‚e.
ROL (Rotate Left)
Provoque une rotation vers la gauche de l'op‚rande destination.
Le nombre de rotations est d‚sign‚ par l'op‚rande source. Le ou
les bits perdus sont r‚introduits par la droite. Cette instruction
modifie le drapeau C.
Ex : rol #2,D0
ROR (Rotate Right)
Mˆme action que ROL, … la diff‚rence que la rotation s'effectue
par la droite.
ROXL (Rotate Left with Extend)
Semblable … ROL, … la diff‚rence que le bit ‚ject‚ est recopi‚
dans le drapeau X, qui prend sa place.
Ex : roxl #4,(A0)
ROXR (Rotate Right with Extend)
Mˆme action que ROXL, … la diff‚rence que la rotation s'effectue
par la droite.
RTE (Return from Exception)
Retour de la routine d'exception, … l'endroit o— l'exception a ‚t‚
rencontr‚e. C'est une instruction privil‚gi‚e.
RTS (Return from Subroutine)
Retour d'un sous-programme, … l'endrit o— celui-ci a ‚t‚ appel‚.
RTR (Return and Restore)
Semblable … l'instruction pr‚c‚dente, mais avant le saut de re-
tour, l'instruction prend le mot au sommet de la pile pour le met-
tre dans SR.
SBCD (Subtract Decimal With Extend)
L'op‚rande source est soustraite de l'op‚rande destination. le
format des donn‚es est BCD.
Scc (Set Conditionally)
L'op‚rande (qui ne peut ˆtre que .B) est plac‚e … $FF si la
condition est remplie. Dans les autres cas, elle est effac‚e. les
tests sont semblables … Bcc.
Ex : sne D0
STOP
Interrompt le traitement du processeur qui ne peut ˆtre r‚activ‚
que par une interruption externe. C'est une instruction privil‚-
gi‚e.
SUB (subtract Binary)
L'op‚rande source est soustraite de l'op‚rande destination.
Ex : sub #10,D1
SWAP (Swap Register Halves)
Interversion des deux moiti‚s d'un registre.
Ex : swap d0
TAS (Test and Set)
L'op‚rande (qui ne peut ˆtre que .B) est test‚e par rapport … z‚ro
et sur son signe (C et N), puis son bit 7 est mis … 1.
Ex : tas D0
TRAP
D‚clenche un exception de fa‡on fictive, et le programme se pour-
suit … l'adresse pr‚cis‚e par le num‚ro du vecteur donn‚. Par cet-
te commande, on peut appeler les fonction du systÅ me d'exploita-
tion (GEMDOS, BIOS, XBIOS, AES et VDI).
Ex : trap #1
TRAPV (Trap on Overflow)
D‚clenche une exception si le drapeau V est … 1, et le programme
continue … l'adresse donn‚e par le vecteur d'exception No 7 ($1C).
TST (Test)
Mˆme action que TAS, mais l'op‚rande n'est pas modifi‚e.
Ex : tst D0
UNLK (Unlink)
Cette instruction est l'inverse de LINK. Le pointeur de pile est
charg‚ avec le registre d'adresse donn‚, et ce dernier est rempli
avec le dernier enregistrement de la pile.
Back to Assembly_language