Le simulateur 68000
Auteur: Y. Autret
Ecrit en JAVA, le simulateur 68000 s'installe très facilement. Il suffit de télécharger le fichier sim68.jar et de l'exécuter (double-clic sous Windows, java -jar sim68.jar sous Unix).
Ce simulateur a été développé uniquement pour l'enseignement des principes du langage d'assemblage. Il permet d'utiliser les principales instructions et les principaux modes d'adressage. Lors d'une session il visualise en permanence, les instructions, les registres, la mémoire et la pile.
Utilisation du simulateur
Exemples de programmes (à mettre dans des fichiers terminés par .s)
BOUCLE: |
; somme de N premiers entiers MOVE.L #0,D0 MOVE.L #3,D1 ADD.L D1,D0 SUB.L #1,D1 BNE BOUCLE RTS |
|
CH: VAL: TAB: |
; utilisation des données DATA DC.B "ESSAI" DC.L 3 DS.W 2 CODE LEA CH,A2 MOVE.B #'W',(A2) MOVE.L VAL,D5 MOVE.W #$11,TAB RTS |
Caractéristiques générales du simulateur
Liste des instructions traitées par le simulateur
DATA
Directive indiquant le début d'une zone de données
CODE
Directive indiquant le début d'une zone de code
DC <valeur>
Réservation et initialisation d'un mot mémoire (octet, mot ou mot-long)
DC.B "CHAINE"
Réservation et initialisation d'une chaîne de caractères majuscules
DS <nombre>
Réservation d'un ensemble de mots mémoire (octets, mots ou mots-longs)
MOVE <ea>,<ea>
Adresse source
Mode d'adressage |
Mode |
Registre |
|
Mode d'adressage |
Mode |
Registre |
||||||
Dn |
000 |
Numéro |
|
d(An,Xi) |
~110 |
Numéro |
||||||
An |
001 |
Numéro |
|
Abs.W |
~111 |
000 |
||||||
(An) |
010 |
Numéro |
|
Abs.L |
111 |
001 |
||||||
(An)+ |
011 |
Numéro |
|
d(PC) |
~111 |
010 |
||||||
-(An) |
100 |
Numéro |
|
d(PC,Xi) |
~111 |
011 |
||||||
d(An) |
101 |
Numéro |
|
Imm |
111 |
100 |
MOVE <ea>,<ea>
Adresse destination
Mode d'adressage |
Mode |
Registre |
|
Mode d'adressage |
Mode |
Registre |
||||||
Dn |
000 |
Numéro |
|
d(An,Xi) |
~110 |
Numéro |
||||||
An |
001 |
Numéro |
|
Abs.W |
~111 |
000 |
||||||
(An) |
010 |
Numéro |
|
Abs.L |
111 |
001 |
||||||
(An)+ |
011 |
Numéro |
|
d(PC) |
- |
- |
||||||
-(An) |
100 |
Numéro |
|
d(PC,Xi) |
- |
- |
||||||
d(An) |
101 |
Numéro |
|
Imm |
- |
- |
LEA <ea>,An (utiliser LEA etiquette,An)
Mode d'adressage |
Mode |
Registre |
|
Mode d'adressage |
Mode |
Registre |
||||||
Dn |
- |
- |
|
d(An,Xi) |
~110 |
Numéro |
||||||
An |
- |
- |
|
Abs.W |
~111 |
000 |
||||||
(An) |
~010 |
Numéro |
|
Abs.L |
~111 |
001 |
||||||
(An)+ |
- |
- |
|
d(PC) |
~111 |
010 |
||||||
-(An) |
- |
- |
|
d(PC,Xi) |
~111 |
011 |
||||||
d(An) |
~101 |
Numéro |
|
Imm |
- |
- |
ADD/SUB <ea>,Dn
Mode d'adressage |
Mode |
Registre |
|
Mode d'adressage |
Mode |
Registre |
||||||
Dn |
000 |
Numéro |
|
d(An,Xi) |
~110 |
Numéro |
||||||
An |
001 |
Numéro |
|
Abs.W |
~111 |
000 |
||||||
(An) |
010 |
Numéro |
|
Abs.L |
111 |
001 |
||||||
(An)+ |
011 |
Numéro |
|
d(PC) |
~111 |
010 |
||||||
-(An) |
100 |
Numéro |
|
d(PC,Xi) |
~111 |
011 |
||||||
d(An) |
101 |
Numéro |
|
Imm |
111 |
100 |
ADD/SUB Dn,<ea>
Mode d'adressage |
Mode |
Registre |
|
Mode d'adressage |
Mode |
Registre |
||||||
Dn |
- |
- |
|
d(An,Xi) |
~110 |
Numéro |
||||||
An |
- |
- |
|
Abs.W |
~111 |
000 |
||||||
(An) |
010 |
Numéro |
|
Abs.L |
111 |
001 |
||||||
(An)+ |
011 |
Numéro |
|
d(PC) |
- |
- |
||||||
-(An) |
100 |
Numéro |
|
d(PC,Xi) |
- |
- |
||||||
d(An) |
101 |
Numéro |
|
Imm |
- |
- |
ADD <ea>,An
Mode d'adressage |
Mode |
Registre |
|
Mode d'adressage |
Mode |
Registre |
||||||
Dn |
000 |
Numéro |
|
d(An,Xi) |
~110 |
Numéro |
||||||
An |
001 |
Numéro |
|
Abs.W |
~111 |
000 |
||||||
(An) |
010 |
Numéro |
|
Abs.L |
111 |
001 |
||||||
(An)+ |
011 |
Numéro |
|
d(PC) |
~111 |
010 |
||||||
-(An) |
100 |
Numéro |
|
d(PC,Xi) |
~111 |
011 |
||||||
d(An) |
101 |
Numéro |
|
Imm |
111 |
100 |
ADD/SUB #data,<ea>
Mode d'adressage |
Mode |
Registre |
|
Mode d'adressage |
Mode |
Registre |
||||||
Dn |
000 |
Numéro |
|
d(An,Xi) |
~110 |
Numéro |
||||||
An |
- |
- |
|
Abs.W |
~111 |
000 |
||||||
(An) |
010 |
Numéro |
|
Abs.L |
111 |
001 |
||||||
(An)+ |
011 |
Numéro |
|
d(PC) |
- |
- |
||||||
-(An) |
100 |
Numéro |
|
d(PC,Xi) |
- |
- |
||||||
d(An) |
101 |
Numéro |
|
Imm |
- |
- |
MULS/DIV <ea>,Dn (mode .W uniquement)
Mode d'adressage |
Mode |
Registre |
|
Mode d'adressage |
Mode |
Registre |
||||||
Dn |
000 |
Numéro |
|
d(An,Xi) |
~110 |
Numéro |
||||||
An |
- |
- |
|
Abs.W |
~111 |
000 |
||||||
(An) |
010 |
Numéro |
|
Abs.L |
111 |
001 |
||||||
(An)+ |
011 |
Numéro |
|
d(PC) |
~111 |
010 |
||||||
-(An) |
100 |
Numéro |
|
d(PC,Xi) |
~111 |
011 |
||||||
d(An) |
101 |
Numéro |
|
Imm |
111 |
100 |
AND/OR <ea>,Dn
Mode d'adressage |
Mode |
Registre |
|
Mode d'adressage |
Mode |
Registre |
||||||
Dn |
000 |
Numéro |
|
d(An,Xi) |
~110 |
Numéro |
||||||
An |
- |
- |
|
Abs.W |
~111 |
000 |
||||||
(An) |
010 |
Numéro |
|
Abs.L |
111 |
001 |
||||||
(An)+ |
011 |
Numéro |
|
d(PC) |
~111 |
010 |
||||||
-(An) |
100 |
Numéro |
|
d(PC,Xi) |
~111 |
011 |
||||||
d(An) |
101 |
Numéro |
|
Imm |
111 |
100 |
AND/OR Dn,<ea>
Mode d'adressage |
Mode |
Registre |
|
Mode d'adressage |
Mode |
Registre |
||||||
Dn |
- |
- |
|
d(An,Xi) |
~110 |
Numéro |
||||||
An |
- |
- |
|
Abs.W |
~111 |
000 |
||||||
(An) |
010 |
Numéro |
|
Abs.L |
111 |
001 |
||||||
(An)+ |
011 |
Numéro |
|
d(PC) |
- |
- |
||||||
-(An) |
100 |
Numéro |
|
d(PC,Xi) |
- |
- |
||||||
d(An) |
101 |
Numéro |
|
Imm |
- |
- |
AND/OR #data,<ea>
Mode d'adressage |
Mode |
Registre |
|
Mode d'adressage |
Mode |
Registre |
||||||
Dn |
000 |
Numéro |
|
d(An,Xi) |
~110 |
Numéro |
||||||
An |
- |
- |
|
Abs.W |
~111 |
000 |
||||||
(An) |
010 |
Numéro |
|
Abs.L |
111 |
001 |
||||||
(An)+ |
011 |
Numéro |
|
d(PC) |
- |
- |
||||||
-(An) |
100 |
Numéro |
|
d(PC,Xi) |
- |
- |
||||||
d(An) |
101 |
Numéro |
|
Imm |
- |
- |
EOR Dn,<ea>
Mode d'adressage |
Mode |
Registre |
|
Mode d'adressage |
Mode |
Registre |
||||||
Dn |
000 |
Numéro |
|
d(An,Xi) |
~110 |
Numéro |
||||||
An |
- |
- |
|
Abs.W |
~111 |
000 |
||||||
(An) |
010 |
Numéro |
|
Abs.L |
111 |
001 |
||||||
(An)+ |
011 |
Numéro |
|
d(PC) |
- |
- |
||||||
-(An) |
100 |
Numéro |
|
d(PC,Xi) |
- |
- |
||||||
d(An) |
101 |
Numéro |
|
Imm |
- |
- |
EOR #data,<ea>
Mode d'adressage |
Mode |
Registre |
|
Mode d'adressage |
Mode |
Registre |
||||||
Dn |
000 |
Numéro |
|
d(An,Xi) |
~110 |
Numéro |
||||||
An |
- |
- |
|
Abs.W |
~111 |
000 |
||||||
(An) |
010 |
Numéro |
|
Abs.L |
111 |
001 |
||||||
(An)+ |
011 |
Numéro |
|
d(PC) |
- |
- |
||||||
-(An) |
100 |
Numéro |
|
d(PC,Xi) |
- |
- |
||||||
d(An) |
101 |
Numéro |
|
Imm |
- |
- |
ASL/ASR/LSL/LSR Dx,Dy
ASL/ASR/LSL/LSR #data,Dy (voir pb data=8)
CMP <ea>,Dn
Mode d'adressage |
Mode |
Registre |
|
Mode d'adressage |
Mode |
Registre |
||||||
Dn |
000 |
Numéro |
|
d(An,Xi) |
~110 |
Numéro |
||||||
An |
001 |
Numéro |
|
Abs.W |
~111 |
000 |
||||||
(An) |
010 |
Numéro |
|
Abs.L |
111 |
001 |
||||||
(An)+ |
011 |
Numéro |
|
d(PC) |
~111 |
010 |
||||||
-(An) |
100 |
Numéro |
|
d(PC,Xi) |
~111 |
011 |
||||||
d(An) |
101 |
Numéro |
|
Imm |
111 |
100 |
CMP <ea>,An
Mode d'adressage |
Mode |
Registre |
|
Mode d'adressage |
Mode |
Registre |
||||||
Dn |
000 |
Numéro |
|
d(An,Xi) |
~110 |
Numéro |
||||||
An |
001 |
Numéro |
|
Abs.W |
~111 |
000 |
||||||
(An) |
010 |
Numéro |
|
Abs.L |
111 |
001 |
||||||
(An)+ |
011 |
Numéro |
|
d(PC) |
~111 |
010 |
||||||
-(An) |
100 |
Numéro |
|
d(PC,Xi) |
~111 |
011 |
||||||
d(An) |
101 |
Numéro |
|
Imm |
111 |
100 |
CMP #data,<ea>
Mode d'adressage |
Mode |
Registre |
|
Mode d'adressage |
Mode |
Registre |
||||||
Dn |
000 |
Numéro |
|
d(An,Xi) |
~110 |
Numéro |
||||||
An |
- |
- |
|
Abs.W |
~111 |
000 |
||||||
(An) |
010 |
Numéro |
|
Abs.L |
111 |
001 |
||||||
(An)+ |
011 |
Numéro |
|
d(PC) |
- |
- |
||||||
-(An) |
100 |
Numéro |
|
d(PC,Xi) |
- |
- |
||||||
d(An) |
101 |
Numéro |
|
Imm |
- |
- |
BRA/BEQ/BNE/BGT/BGE/BLT/BLE
JSR (utiliser JSR etiquette)
Mode d'adressage |
Mode |
Registre |
|
Mode d'adressage |
Mode |
Registre |
||||||
Dn |
- |
- |
|
d(An,Xi) |
~110 |
Numéro |
||||||
An |
- |
- |
|
Abs.W |
~111 |
000 |
||||||
(An) |
~010 |
Numéro |
|
Abs.L |
~111 |
001 |
||||||
(An)+ |
- |
- |
|
d(PC) |
~111 |
010 |
||||||
-(An) |
- |
- |
|
d(PC,Xi) |
~111 |
011 |
||||||
d(An) |
~101 |
Numéro |
|
Imm |
- |
- |
RTS
LINK A6,#data
UNLK A6
JMP
Mode d'adressage |
Mode |
Registre |
|
Mode d'adressage |
Mode |
Registre |
||||||
Dn |
- |
- |
|
d(An,Xi) |
~110 |
Numéro |
||||||
An |
- |
- |
|
Abs.W |
~111 |
000 |
||||||
(An) |
010 |
Numéro |
|
Abs.L |
~111 |
001 |
||||||
(An)+ |
- |
- |
|
d(PC) |
~111 |
010 |
||||||
-(An) |
- |
- |
|
d(PC,Xi) |
~111 |
011 |
||||||
d(An) |
~101 |
Numéro |
|
Imm |
- |
- |
Exemple de programme: (l'exécution commence à la première instruction de la zone code)
Fichier test.s
data |
||||
x: |
dc.l |
21 |
; initialisation d'un mot de 32 bits |
|
str: |
dc.b |
"chaine" |
; initialisation d'une chaîne |
|
tab: |
ds.w |
4 |
; réservation de 4 mots de 16 bits |
|
y: |
dc.w |
$1234 |
||
code |
||||
move.l |
x,d0 |
|||
add.l |
#2,d0 |
|||
lea |
Str,a0 |
|||
move.b |
#'x',(a0) |
|||
lea |
tab,a1 |
|||
move.w |
#$abcd,(a1) |
|||
rts |