Obligement - L'Amiga au maximum

Mercredi 19 décembre 2018 - 06:02  

Translate

En De Nl Nl
Es Pt It Nl


Rubriques

 · Accueil
 · A Propos
 · Articles
 · Galeries
 · Glossaire
 · Liens
 · Liste jeux Amiga
 · Quizz
 · Téléchargements
 · Trucs et astuces


Articles

 · Actualité (récente)
 · Actualité (archive)
 · Comparatifs
 · Dossiers
 · Entrevues
 · Matériel (tests)
 · Matériel (bidouilles)
 · Points de vue
 · En pratique
 · Programmation
 · Reportages
 · Tests de jeux
 · Tests de logiciels
 · Tests de compilations
 · Articles divers

 · Articles in english
 · Articles en d'autres langues


Twitter

Suivez-nous sur Twitter




Liens

 · Sites de téléchargements
 · Associations
 · Pages Personnelles
 · Matériel
 · Réparateurs
 · Revendeurs
 · Presse et médias
 · Programmation
 · Logiciels
 · Jeux
 · Scène démo
 · Divers


Jeux Amiga

0, A, B, C, D, E, F,
G, H, I, J, K, L, M,
N, O, P, Q, R, S, T,
U, V, W, X, Y, Z


Trucs et astuces

0, A, B, C, D, E, F,
G, H, I, J, K, L, M,
N, O, P, Q, R, S, T,
U, V, W, X, Y, Z


Glossaire

0, A, B, C, D, E, F,
G, H, I, J, K, L, M,
N, O, P, Q, R, S, T,
U, V, W, X, Y, Z


Partenaires

Annuaire Amiga

Amedia Computer

Relec

Hit Parade


Contact

David Brunet

Courriel

 


Dossier : Registres, exceptions et instructions du 68000
(Article écrit par Loïc Far et extrait d'Amiga News Tech - avril 1991)


Après avoir lu cet article, vous saurez tout sur le MC68000 qui équipe votre Amiga chéri, depuis les modes d'adressages jusqu'aux temps d'exécution en passant par une description détaillée de chaque instruction. Je vous l'ai dit : un véritable petit bijou.

Organisation des registres

Le MC68000 dispose de 18 registres internes, à savoir :
  • Huit registres de données 32 bits : D0, D1, D2, D3, D4, D5, D6 et D7.
  • Huit registres d'adresses 32 bits : A0, A1, A2, A3, A4, A5, A6 et A7.
  • Un compteur de programme 32 bis : PC.
  • Un registre d'état 16 bits : SR.
Le registre d'état SR est en fait composé de deux sous-registres 8 bits. L'octet de poids fort est appelé "octet superviseur", l'octet de poids faible "octet utilisateur" ou "condition codes register" (CCR).

Description des bits de CR
Bit Nom Signification
15 T Trace
14 - Non utilisé
13 S Mode superviseur
12 - Non utilisé
11 - Non utilisé
10 I2 Masque d'interruption
9 I1 Masque d'interruption
8 I0 Masque d'interruption
7 - Non utilisé
6 - Non utilisé
5 - Non utilisé
4 X Extend (bit d'extension)
3 N Negative (bit de signe)
2 Z Zero (bit de zéro)
1 V Overflow (bit de dépassement de capacité)
0 C Carry (bit de retenue)

Note : en mode utilisateur, on ne peut écrire que dans l'octet utilisateur (CCR) ; en mode superviseur, on peut écrire dans le mot entier.

Le registre A7 joue un rôle particulier : le 68000 l'utilise comme pointeur de pile système pour la sauvegarde du PC lors des sauts aux sous-programmes. En mode superviseur, A7 devient A7', pointeur de pile superviseur.

Organisation de la mémoire

Le MC68000 dispose d'un bus d'adresse de 24 bits. Les 8 bits de poids fort ne sont pas utilisés. Ce bus lui permet d'adresser 16 méga-octets de mémoire en ligne. Une adresse d'octet peut être indifféremment paire ou impaire, mais une adresse de mot ou de mot long doit obligatoirement être paire. Une instruction étant constitué de mois, elle aura nécessairement une adresse paire.

Les registres de données Dn peuvent être lus ou écrits sur leur octet de poids faible, sur leur mot de poids faible ou sur leur mot long tout entier : les registres d'adresse An ne peuvent être lu ou écrits que sur leur mot de poids faible ou sur leur mot long tout entier.

Les exceptions

Le processeur travaille dans deux modes :
  • Le mode utilisateur.
  • Le mode superviseur.
En mode superviseur, caractérisé par la mise à 1 du bit "S" de SR, toutes les instructions peuvent être utilisées et le pointeur de pile est A7', également appelé SSP (Supervisor Stark Pointer).

En mode utilisateur, le jeu d'instructions est restreint et le pointeur de pile est A7, également appelé USP (User Stock Pointer).

L'intérêt de l'existence de deux modes, est de permettre au système d'exploitation d'assurer la pérennité de son espace de données. Le passage du mode superviseur au mode utilisateur peut se réaliser de deux manières :
  • Au retour d'une exception.
  • Et invalidant le bit "S" de SR au moyen d'instructions spécialisés (MOVE to SR, ANDI to SR ou EORI to SR).
Toutes les exceptions sont exécutées en mode superviseur.

Lorsque le processeur détecte une exception (interruption. erreur dans le programme, instruction TRAP...), il génère de manière interne un numéro d'exception qui, une fois multiplié par 4, donne l'adresse du vecteur d'exception. Le 68000 y trouve l'adresse de la routine à exécuter pour traiter l'exception. Il existe 256 vecteurs d'exceptions, qui occupent le premier kilo-octet de mémoire.

Vecteur Adresse Exception concernée
0 $0000 Reset : initialisation de SSP
1 $0004 Reset : initialisation de PC
2 $0008 Erreur bus
3 $000C Erreur d'adresse
4 $0010 Instruction illégale
5 $0014 Division par zéro
6 $0018 Instruction CHK
7 $001C Instruction TRAPV
8 $0020 Violation de privilège
9 $0024 Mode Trace
10 $0028 Line A (instruction $Axxx)
11 $002C Line F (instruction $Fxxx)
12-14 $0030-38 Réservés
15 $003C Interruption non initialisée
16-23 $0040-5C Réservés
24 $0060 Interruption parasite
25 $0064 Interruption niveau 1
26 $0068 Interruption niveau 2
27 $006C Interruption niveau 3
28 $0070 Interruption niveau 4
29 $0074 Interruption niveau 5
30 $0078 Interruption niveau 6
31 $007C Interruption niveau 7
32-47 $0080-BC Intructions TRAP
48-63 $00C0-FC Réservés
64-255 $0100-3FC Vecteurs d'interruptions utilisateurs

Traitement d'une exception

Lorsqu'il détecte une exception, le 68000 procède en quatre étapes :
  • Copie du registre d'état SR dans un registre interne, mise à 1 du bit "S" et mise à 0 du bit "T" (TRACE étant elle-même une exception). Si l'exception est RESET ou une interruption, le masque d'interruption de SR (bits I2 à I0) est positionné en conséquence (niveau 7 pour RESET).
  • Le numéro du vecteur d'exception est déterminé par la logique interne.
  • Le 68000 sauvegarde son contexte actuel (sauf dans le cas du RESET).
  • La valeur du PC et la copie interne de SR sont placés dans la pile superviseur. PC pointe généralement l'instruction suivant immédiatement celle ayant déclenché l'exception, mais dans le cas d'une erreur Bus ou d'une erreur d'adresse, la valeur de PC est imprévisible (à cause du phénomène d'anticipation). Dans ces deux cas-là, des informations supplémentaires sont également empilées dans SSP.
  • Le PC est chargé avec le contenu du vecteur d'exception dont l'adresse a été déterminée dans la phase 2 et le processeur reprend l'exécution des instructions.
Les modes d'adressage

La partie logicielle du MC68000 distingue 14 modes d'adressages, regroupés sous six rubriques (chaque mode d'adressage est suivi d'un exemple de syntaxe et d'une rapide description) :

Adressage absolu
  • Adressage absolu court : TST.L $4.W
    L'adresse sur 16 bits est étendue à 32 bits avant d'être traitée comme opérande.
  • Adressage absolu long : TST.L $40000
    L'adresse sur 32 bits est directement traitée comme opérande.
Adressage direct de registres
  • Adressage direct de registres de données : TST D0
    Le registre est un des 8 registres de données Dn.
  • Adressage direct de registres d'adresses : TST.L A0
    Le registre est l'un des 8 registres de données An.
  • Adressage direct du registre d'état : ANDI #$20,SR
    Le registre d'état est directement traité comme opérande. Ces instructions sont privilégiées.
Adresse immédiat
  • Adressage immédiat "simple" : MOVE.W #$1010,D4
    L'opérande 16 ou 32 bits est contenu dans le mot suivant celui de l'instruction, ou dans le mot long suivant. Si un registre d'adresse est utilisé et si la taille est le mot, l'opérande subit une extension de signe avant le transfert.
  • Adressage immédiat "rapide" : MOVEQ #S10,D4
    L'opérande 8 bits est directement contenu dans le mot d'instruction. Seuls les registres de données Dn peuvent être utilisés.
    Note : les données immédiates sont notées #donnée.
Adressage indirect de registres
  • Adressage indirect de registre "simple" : MOVE.W (A1),D0
    Le registre d'adresse spécifié contient l'adresse de la donnée à transférer.
  • Adressage indirect postincrémenté : MOVE.W (A1)+,D0
    Le registre d'adresse spécifié contient l'adresse de la donnée à transférer. Il est ensuite incrémenté de un si la taille est l'octet, de deux si la taille est le mot ou de quatre si la taille est le mot long.
  • Adressage indirect prédécrémenté : MOVE.W -(A1),D0
    Le registre d'adresse spécifié est d'abord décrémenté avant de contenir l'adresse de la donnée à transférer. La décrémentalion est de un si la taille est l'octet, de deux si la taille est le mot ou de quatre si la taille est le mot long.
  • Adressage indirect avec déplacement : MOVE.W dd(A1),D0
    L'adresse de l'opérande est calculée en additionnant le déplacement dd 16 bits au contenu du registre d'adresse.
  • Adressage indirect indexé avec déplacement : MOVE d(A1,D1),D0
    L'adresse de l'opérande est calculée en additionnant le déplacement d 8 bits, le contenu du registre d'index et le contenu du registre d'adresse.
Adressage relatif au PC
  • Adressage relatif au PC avec déplacement : MOVE.W dd(PC),D0
    L'adresse de l'opérande est calculée en additionnant le déplacement dd 16 bits au contenu du PC.
  • Adressage indexé relatif au PC : MOVE.W d(PC,D1.L),D0
    L'adresse de l'opérande est calculée en additionnant le déplacement d 8 bits, le contenu du registre d'index et le contenu du PC.
    Note : dans tous les modes d'adressage indexés, le registre utilisé comme index peut être indifféremment un registre de données Dn ou un registre d'adresses An, et l'on peut spécifier la taille de l'index (mot ou mot long).
Codage des instructions

Les codes opératoires du MC68000 suivant presque tous le même schéma : un mot d'instruction pouvant être suivi d'un maximum de deux mots longs d'extension. La plus grande taille pour une instruction est donc de 10 octets.

Les 4 bits de poids fort (bits 15 à 12) du mot d'instruction spécifient le type de l'instruction :

0000 Manipulation de bits, MOVEP, immédiat
0001 MOVE sur des octets
0010 MOVE sur des mots longs
0011 MOVE sur des mots
0100 Autres instructions
0101 ADDQ, SUBQ, Scc, DBcc
0110 Bss, BSR
0111 MOVEQ
1000 OR, DIV, SBCD
1001 SUB, SUBX
1010 Non utilisé (line A)
1011 CMP, EOR
1100 AND, MUL, ABCD, EXG
1101 ADD, ADDK
1110 Décalages et rotations
1111 Non utilisé (line F)

Les modes d'adressages sont codés sur 3 bits dans le mot d'instruction. Dans le tableau ci-dessous, la colonne "Registre" contient sur 3 bits également, soit le numéro du registre utilisé dans l'instruction (de 0 à 7), soit un code distinctif du mode d'adressage. Quand un déplacement ou un registre d'index est utilisé, il est codé dans le mot d'extension de l'instruction.

Mode Code-Op Registre
Dn 000 Numéro du registre
An 001 Numéro du registre
(An) 010 Numéro du registre
(An)+ 011 Numéro du registre
-(An) 100 Numéro du registre
dd(An) 101 Numéro du registre
d(An,Ri) 110 Numéro du registre
xx.W 111 000
xx.L 111 001
dd(PC) 111 010
d(PC,Ri) 111 011
#xx, SR 111 100

Temps d'exécution des instructions

Conventions : dans les tableaux qui suivent, la notation x(y/z) représente la durée totale en cycles d'horloge de l'instruction. x, y et z sont définis comme suit :
  • x = nombre total de cycles d'horloge.
  • y = nombre de cycles de lecture.
  • z = nombre de cycles d'écriture.
Un cycle de lecture ou d'écriture prenant en général 4 cycles d'horloge, y et z doivent chacun être multipliés par 4 puis additionnés pour donner x. Si une différence subsiste, elle indique le nombre de cycles d'horloges nécessaires au fonctionnement interne. Les temps donnés dans ces tableaux sont calculés pour une horloge à 8 MHz, avec laquelle un cycle dure exactement 125 ns.

Calcul des adresses effectives
Mode .B, .W .L
Dn 0(0/0) 0(0/0)
An 0(0/0) 0(0/0)
(An) 4(1/0) 8(2/0)
(An)+ 4(1/0) 8(2/0)
-(An) 6(1/0) 10(2/0)
d(An) 8(2/0) 12(3/0)
d(An,Ri) 10(2/0) 14(3/0)
xx,W 8(2/0) 12(3/0)
xx,L 12(3/0) 16(4/0)
d(PC) 10(2/0) 14(3/0)
#xx 4(1/0) 8(2/0)

La taille du registre d'index n'influence pas le temps d'exécution.

Source et destination de Move (octet et mot)
68000

La taille du registre d'index ne modifie pas le temps d'exécution.

Source et destination de Move (mot long)
68000

La taille du registre d'index ne modifie pas le temps d'exécution.

Instructions usuelles
Instructions Taille <ea>,An <ea>,Dn Dn,<M>
ADD .B, .W 8(1/0) 4(1/0) 8(1/1)
.L 6(1/0)** 6(1/0)** 12(1/2)
AND .B, .W - 4(1/0) 8(1/1)
.L - 6(1/0)** 12(1/2)
CMP .B, .W 6(1/0) 4(1/0) -
.L 6(1/0) 6(1/0) -
DIVS - - 158(1/0)* -
DIVU - - 140(1/0)* -
EOR .B, .W - 4(1/0)*** 8(1/1)
.L - 8(1/0)*** 2(1/2)
MULS - - 70(1/0)* -
MULU - - 70(1/0)* -
OR .B, .W - 4(1/0) 8(1/1)
.L - 6(1/0)** 12(1/2)
SUB .B, .W 8(1/0) 4(1/0) 8(1/1)
.L 6(1/0)** 6(1/0)** 12(1/2)

Notes :
  • Additionner aux présents temps, les temps de calcul de l'adresse effective.
  • "*" indique le temps maximum.
  • "**" indique si le mode d'adressage est indirect de registre ou immédiat, le temps de base est de 6 périodes.
  • "***" indique seulement si le mode d'adressage est direct de registre.
  • DIVS, DIVU : l'algorythrre de division engendre une marge de 10% entre le meilleur et le pire cas.
  • MULS, MULU : l'algorythrne de multiplication requiert 38+2n cycles, où "n" vaut :
    • Dans le cas de MULU : le nombre de bits à 1 dans <ea>.
    • Dans le cas de MULS : le nombre de combinaisons de bits à 10 et 01 dans la source.
Instructions immédiates
Instructions Taille #x,Dn #x,An #x,M
ADDI .B, .W 8(2/0) - 12(2/1)+
.L 16(3/0) - 20(3/2)+
ADDQ .B, .W 4(1/0) 8(1/0)* 8(1/1)+
.L 8(1/0) 8(1/0)* 12(1/2)+
ANDI .B, .W 8(2/0) - 12(1/2)+
.L 16(3/0) - 20(3/1)+
CMPI .B, .W 8(2/0) - 8(2/0)+
.L 14(3/0) - 12(3/0)+
EORI .B, .W 8(2/0) - 12(2/1)+
.L 16(3/0) - 20(3/2)+
MOVEQ .L 4(1/0) - -
ORI .B, .W 8(2/0) - 12(2/1)+
.L 16(3/0) - 20(3/2)+
SUBI .B, .W 8(2/0) - 12(2/1)+
.L 16(3/0) - 20(3/2)+
SUBQ .B, .W 4(1/0) 8(1/0)* 8(1/1)+
.L 8(1/0) 8(1/0)<*/td> 12(1/2)+

Notes :
  • "*" indique le mot seulement.
  • "+" indique ajouter le temps de calcul de l'adresse effective.
Instructions à l'opérande
Instructions Taille Registre Mémoire
CLR .B, .W 4(1/0) 8(1/1)+
.L 6(1/0) 12(1/2)+
NBCD .B 6(1/0) 8(1/1)+
NEG .B, .W 4(1/0) 8(1/1)+
.L 6(1/0) 12(1/2)+
NEGX .B, .W 4(1/0) 8(1/1)+
.L 6(1/0) 12(1/2)+
NOT .B, .W 4(1/0) 8(1/1)+
.L 6(1/0) 12(1/2)+
Scc .B, False 4(1/0) 8(1/1)+
.B, True 6(1/0) 8(1/1)+
TAS .B 4(1/0) 10(1/1)+
TST .B .W 4(1/0) 4(1/0)+
.L 4(1/0) 4(1/0)+

Notes :
  • "+" indique d'ajouter le temps de calcul de l'adresse effective.
Décalage/Rotations
Instructions Taille Registre Mémoire
ASL,ASR .B, .W 6+2n(1/0) 8(1/1)+
.L 8+2n(1/0) -
LSL,LSR .B, .W 6+2n(1/0) 8(1/1)+
.L 8+2n(1/0) -
ROL,ROR .B, .W 6+2n(1/0) 8(1/1)+
.L 8+2n(1/0) -
ROXL,ROXR .B, .W 6+2n(1/0) 8(1/1)+
.L 8+2n(1/0) -

Notes :
  • "n" représente le nombre de décalages/rotations.
  • "+" indique d'ajouter le temps de calcul de l'adresse effective.
Manipulations de bits
Instructions Taille Registre
dynamique
Mémoire Registre
statique
Mémoire
BCHG .B - 8(1/1)+ - 12(2/1)+
.L 8(1/0)* - 12(2/0)* -
BCLR .B - 8(1/1)+ - 12(2/1)+
.L 10(1/0)* - 14(2/0)* -
BSET .B - 8(1/1)+ - 12(2/1)+
.L 8(1/0)* - 12(2/0)* -
BTST .B - 4(1/0)+ - 8(2/0)+
.L 6(1/0)* - 10(2/0)* -

Notes :
  • "*" indique le temps maximum.
  • "+" indique d'ajouter le temps de calcul de l'adresse effective.
Instructions de branchement
Instructions Taille Saut Pas saut
Bcc .S 10(2/0) 8(1/0)+
.L 10(2/0) 12(2/0)+
BRA .S 10(2/0) -
.L 10(2/0) -
BSR .S 18(2/2) -
.L 18(2/2) 12(2/0)+
DBcc cc True - 12(2/0)+
cc False 10(2/0) 14(3/0)+

Source et destination de JMP, JSR, LEA, PEA et MOVEM
68000

Notes :
  • "n" représente le nombre de registres. La taille du registre d'index de modifie pas le temps d'exécution.
Instructions en multiprécision
Instructions Taille Dn,Dn M,M
ADDX .B, .W 4(1/0) 18(3/1)
.L 8(1/0) 30(5/2)
CMPM .B, .W - 12(3/0)
.L - 20(5/0)
SUBX .B, .W 4(1/0) 18(3/1)
.L 8(1/0) 30(5/2)
ABCD .B 6(1/0) 18(3/1)
SBCD .B 6(1/0) 30(3/1)

Instructions diverses
Instructions Taille Registre Mémoire
ADDI to CCR .B 20(3/0) -
ANDI to SR .W 20(3/0) -
CHK 10(1/0)+ -
EORI to CCR .B 20(3/0) -
EORI to SR .W 20(3/0) -
ORI to CCR .B 20(3/0) -
ORI to SR .W 20(3/0) -
MOVE from SR 6(1/0) 8(1/1)
MOVE to CCR 12(2/0) 12(2/0)
EXG 6(1/0) -
EXT .W 4(1/0) -
.L 4(1/0) -
LINK 16(2/2) -
MOVE from USP 4(1/0) -
MOVE to USP 4(1/0) -
NOP 4(1/0) -
RESET 132(1/0) -
RTE 20(5/0) -
RTS 16(4/0) -
STOP 4(0/0) -
SWAP 4(1/0) -
TRAPV 4(1/0) -
UNLK 4(1/0) -

Note :
  • "+" indique d'ajouter le temps de calcul de l'adresse effective.
MOVEP
Instructions Taille R->M M->R
MOVEP .W 16(2/2) 16(4/0)
.L 24(2/4) 24(6/0)

Procédures d'exceptions
Exception Périodes
Adress Error 50(4/7)
Bus Error 50(4/7)
CHK Instruction 44(5/4)+
Divide by zero 42(5/4)
Illegal instruction 34(4/3)
Interrupt 44(5/3)*
Privilege violation 34(4/3)
RESET** 40(6/0)
Trace 34(4/3)
TRAP Instruction 38(4/4)
TRAPV Instruction 34(4/3)

Notes :
  • "+" indique d'ajouter le temps de calcul de l'adresse effective.
  • "*" indique le cycle de reconnaissance de l'interruption est considéré prenant 4 périodes d'horloge.
  • "**" indique le temps passé entre l'instant où RESET et HALT sont affirmés et le début de l'instruction.
Le mois prochain, nous vous proposerons une liste complète et détaillée de toutes les instructions du 68000 : syntaxe, mode(s) d'adressage, codage de l'instruction, drapeaux modifiés...


[Retour en haut] / [Retour aux articles]