Description de la machine microPIUP


Le processeur microPIUP a été défini par Alexandre PARODI, Professeur à l'UHP. La description ci-dessous est un résumé des trois documents de présentation qu'il a rédigés :

1 Architecture du processeur

La machine est à peu de choses près une machine RISC "load/store".

Le processeur comporte :

Le registre SR a le format suivant :


0

0

0

0

0

0

0

0

0

0

WF

IF

ZF

VF

CF

NF

15

14

13

12

11

10

9

8

7

6

5

4

3

2

1

0


Les indicateurs ont la signification suivante :

Remarque : Si WF=1 et IF=0 le processeur est dans l'état abandon et seule une initialisation (bouton reset) peut l'en faire sortir.

2 Mémoire et espaces d'adressage

Il y a deux espaces d'adressage : l'espace d'adressage normal, utilisé par la plupart des instructions et l'espace d'adressage d'entrées-sorties utilisé par les instructions IN et OUT.

L'espace d'adressage normal

Les adresses sont codées sur 16 bits et ce sont des adresses d'octets. La capacité d'adressage est donc de 216 octets c'est-à-dire 64 K octets. On considèrera que la taille de la mémoire utilisée ne peut être inférieure à la capacité d'adressage.

Un mot est constitué de deux octets consécutifs, le premier octet est l'octet de poids fort et doit être situé à une adresse paire.

Si cette contrainte n'est pas respectée lors de l'exécution d'une instruction utilisant un opérande de type mot, la machine lève une exception de type accès illégal (désalignement d'opérande en mémoire).


octet de poids fort

octet de poids faible

15

14

13

12

11

10

9

8

7

6

5

4

3

2

1

0

adresse N (paire)

adresse N+1


Les 1024 premiers octets de la mémoire (adresses 0x0 à 0x3FF) sont utilisés pour la table des 256 vecteurs d'interruption de 4 octets chacun.

L'espace d'adressage d'entrées-sorties

Cet espace est constitué de 256 octets adressés de 0x0 à 0xFF.

3 Jeu d'instructions et modes d'adressage du processeur

Les instructions du processeur permettent la manipulation d'adresses, d'octets et de mots.

Certaines instructions ne font intervenir que les registres du processeur. D'autres en revanche peuvent nécessiter un calcul d'adresse. Dans ce cas le codage de l'instruction comporte un champ spécifiant le mode d'adressage utilisé. Le format de codage des instructions étant régulier, un même mode d'adressage est toujours codé de la même façon quelle que soit l'instruction concernée.

Un mode d'adressage sert à déterminer une adresse. Le calcul de cette adresse, appelée adresse effective, ne dépend pas de l'instruction (il peut toutefois dépendre de la taille de la donnée traitée par l'instruction) : à un mode d'adressage donné correspond toujours le même processus de calcul de l'adresse effective correspondante. La description du fonctionnement des instructions concernées fera référence à l'adresse effective spécifiée par le mode d'adressage utilisé.

Les instructions se codent sur un ou deux mots. Dans ce dernier cas le deuxième mot de l'instruction est appelé le mot d'extension.

Modes d'adressage

Nom du mode d'adressage

Codage

(mode base)

Processus de calcul de l'adresse effective (ae)

Immediat

000 0000

ae = adresse du mot d'extension

Registre

001 nnnn

pas d'adresse à proprement parler, c'est le registre dont le numéro est codé sur les 4 bits nnnn qui est désigné.

Basé

010 nnnn

ae = contenu du registre spécifié sur les 4 bits nnnn

Basé post-incrémenté

011 nnnn

ae = contenu du registre spécifié sur les 4 bits nnnn

APRES calcul de ae, ce registre est incrémenté de 1 ou 2 selon la taille des opérandes de l'instruction.

Basé pré-décrémenté

100 nnnn

le registre spécifié sur les 4 bits nnnn est décrémenté de 1 ou 2 selon la taille des opérandes de l'instruction.

PUIS

ae = contenu du registre spécifié

Direct

101 0000

ae = contenu du mot d'extension

Indexé

110 nnnn

ae = somme du contenu du mot d'extension et du contenu du registre spécifié sur les 4 bits nnnn

Indirect pré-indexé

111 nnnn

ae = contenu du mot dont l'adresse est la somme du contenu du mot d'extension et du contenu du registre spécifié sur les 4 bits nnnn

Jeu d'instructions

Une instruction est codée sur un ou deux mots et doit donc débuter à une adresse paire.

Lorsque le processeur ne parvient pas à décoder le premier mot d'instruction, il lève une exception instruction illégale.

Une instruction utilisant un opérande de type octet placé dans un registre utilise l'octet de poids faible de ce registre (conventionnellement considéré comme l'octet de droite du registre).

Dans les descriptions du fonctionnement des instructions, les notations suivantes sont utilisées pour spécifier le fonctionnement :

Groupe 1

Groupe des instructions arithmétiques et logiques à trois registres. Trois champs de 4 bits chacun servent à coder les numéros des registres utilisés. Les opérandes sont les contenus des registres s1 et s2, le résultat est rangé dans le registre d.


1

opération

registre s1

registre s2

registre d

15

14

13

12

11

10

9

8

7

6

5

4

3

2

1

0


champ opération

mnémonique

spécification

0 0 0

ADC

Range dans le registre d la valeur de l'expression

Rs1 + Rs2 + valeur de CF

Les indicateurs CF, ZF, NF, et VF sont positionnés conformément au résultat de l'addition.

0 0 1

XOR

Range dans le registre d la valeur de l'expression

Rs1 xor Rs2 (ou exclusif bit à bit : Rs10 xor Rs20, Rs11 xor Rs21 , .Rs12 xor Rs22 , )

VF <- 0 CF <- 0

ZF <- Rd == 0 NF <- Rd15

0 1 0

DIV

Range dans le registre d la valeur de l'expression

Rs1 / Rs2 (quotient)

Range dans le registre s1 la valeur de l'expression

Rs1 % Rs2 (reste)

VF <- 0 CF <- 0

ZF <- Rd == 0 NF <- Rd15

0 1 1

MUL

Range dans le registre d la valeur de l'expression

Rs1 * Rs2

VF <- 0 CF <- 0

ZF <- Rd == 0 NF <- Rd15

1 0 0

AND

Range dans le registre d la valeur de l'expression

Rs1 and Rs2 (et bit à bit : Rs10 and Rs20 ,

Rs11 and Rs21 , .Rs12 and Rs22 , )

VF <- 0 CF <- 0

ZF <- Rd == 0 NF <- Rd15

1 0 1

OR

Range dans le registre d la valeur de l'expression

Rs1 or Rs2 (ou bit à bit : Rs10 or Rs20 ,

Rs11 or Rs21 , .Rs12 or Rs22 , )

VF <- 0 CF <- 0

ZF <- Rd == 0 NF <- Rd15

1 1 0

ADD

Range dans le registre d la valeur de l'expression

Rs1 + Rs2

Les indicateurs CF, ZF, NF, et VF sont positionnés conformément au résultat de l'addition.

1 1 1

SUB

Range dans le registre d la valeur de l'expression

Rs1 - Rs2

Les indicateurs CF, ZF, NF, et VF sont positionnés conformément au résultat de la soustraction.

Groupe 2

Groupe des instructions arithmétiques et logiques à deux registres. Deux champs de 4 bits chacun servent à coder les numéros des registres utilisés. L'opérande est le contenu du registre s, le résultat est rangé dans le registre d.


0

1

0

0

opération

registre s

registre d

15

14

13

12

11

10

9

8

7

6

5

4

3

2

1

0


champ opération

mnémonique

spécification

0 0 0 0

RLC

Copie dans les 15 bits de poids forts du registre d les 15 bits de poids faibles du registre s et copie l'indicateur CF dans le bit 0 du registre d. Le bit 15 de s est ensuite copié dans l'indicateur CF.

VF <- 0 CF <- Rs 15

ZF <- Rd == 0 NF <- Rd15

0 0 0 1

RRC

Copie dans les 15 bits de poids faibles du registre d les 15 bits de poids forts du registre s et copie l'indicateur CF dans le bit 15 du registre d. Le bit 0 de s est ensuite copié dans l'indicateur CF.

VF <- 0 CF <- Rs 0

ZF <- Rd == 0 NF <- Rd15

0 0 1 0

SRL

Copie dans les 15 bits de poids faibles du registre d les 15 bits de poids forts du registre s et copie 0 dans le bit 15 du registre d. Le bit 0 de s est ensuite copié dans l'indicateur CF.

VF <- 0 CF <- Rs 0

ZF <- Rd == 0 NF <- 0

0 0 1 1

SRA

Copie dans les 15 bits de poids faibles du registre d les 15 bits de poids forts du registre s et copie le bit de poids fort du registre s dans le bit 15 du registre d. Le bit 0 de s est ensuite copié dans l'indicateur CF.

VF <- 0 CF <- Rs 0

ZF <- Rd == 0 NF <- Rd15

0 1 0 0

NOT

Range dans le registre d la valeur de l'expression

not Rs (négation bit à bit)

VF <- 0 CF <- 0

ZF <- Rd == 0 NF <- Rd15

0 1 0 1

SBB

Range dans le registre d la valeur de l'expression

Rs - valeur de CF

Les indicateurs CF, ZF, NF, et VF sont positionnés conformément au résultat de la soustraction.

0 1 1 0

SHL

Copie dans les 15 bits de poids forts du registre d les 15 bits de poids faibles du registre s et copie 0 dans le bit 0 du registre d. Le bit 15 de s est ensuite copié dans l'indicateur CF.

VF <- 0 CF <- Rs 15

ZF <- Rd == 0 NF <- Rd15

0 1 1 1

NEG

Range dans le registre d la valeur de l'expression

0 - Rs

Les indicateurs CF, ZF, NF, et VF sont positionnés conformément au résultat de la soustraction.

1 0 0 0

INP

Copie dans l'octet de droite du registre d le contenu de l'octet d'adresse Rs (i.e. contenu du registre s) dans la mémoire d'entrées-sorties.

VF <- 0 CF <- 0

ZF <- Rd == 0 NF <- Rd15

1 0 0 1

OUT

Copie dans la mémoire d'entrées-sorties à l'adresse Rd (i.e. contenu du registre d) l'octet de droite du registre s.

VF <- 0 CF <- 0

ZF <- Rs == 0 NF <- Rs15

1 0 1 0

SWB

Copie dans l'octet de droite du registre d l'octet de gauche du registre s et dans l'octet de gauche du registre d l'octet de droite du registre s.

VF <- 0 CF <- 0

ZF <- Rd == 0 NF <- Rd15

1 0 1 1

inutilisé

provoque une exception instruction illégale

1 1 0 0

ANI

Cette instruction se code sur 2 mots (le deuxième mot est le mot d'extension).

Range dans le registre d la valeur de l'expression

Rs and contenu du mot d'extension (et bit à bit)

VF <- 0 CF <- 0

ZF <- Rd == 0 NF <- Rd15

1 1 0 1

inutilisé

provoque une exception instruction illégale

1 1 1 0

ADI

Cette instruction se code sur 2 mots (le deuxième mot est le mot d'extension).

Range dans le registre d la valeur de

Rs + contenu du mot d'extension

Les indicateurs CF, ZF, NF, et VF sont positionnés conformément au résultat de l'addition.

1 1 1 1

CMP

Le seul effet de cette instruction est de positionner les indicateurs du registre SR.

Calcule la valeur de

Rs - Rd (négation bit à bit)

Les indicateurs CF, ZF, NF, et VF sont positionnés conformément au résultat de la soustraction.

Groupe 3

Groupe des instructions de transfert (copie serait plus approprié) de mémoire à registre, de registre à mémoire ou de registre à registre. Un champ de 4 bits sert à coder le numéro du registre utilisé comme source ou destination et un champ de 7 bits (3 bits de mode, 4 bits de base) code le mode d'adressage de l'autre opérande. Dans tous les cas, le contenu de la source est copié dans la destination.


0

1

type

registre r

D

mode

base

15

14

13

12

11

10

9

8

7

6

5

4

3

2

1

0


mot d'extension (avec certains modes d'adressage)

15

14

13

12

11

10

9

8

7

6

5

4

3

2

1

0


Le champ type code le type, octet ou mot, de l'opérande copié, le champ D le sens du transfert. Selon le mode d'adressage, l'instruction se code ou non avec un mot d'extension.


champ type

champ D

mnémonique

spécification

0 1

0

STB

copie l'octet de poids faible du registre r spécifié par les bits 11 à 8 à l'adresse effective destination spécifée par le mode d'adressage.

Si la destination est un registre, le bit de poids fort de cet octet est recopié dans tous les bits de l'octet de poids fort du registre destination (extension de signe).

Le mode d'adressage Immédiat est interdit avec cette instruction.

VF <- 0 CF <- 0

ZF <- Rr == 0 NF <- Rr15

0 1

1

LDB

copie le contenu de l'octet d'adresse effective source dans l'octet de poids faible du registre r spécifié par les bits 11 à 8 à l'adresse. Le bit de poids fort de cet octet est recopié dans tous les bits de l'octet de poids fort du registre r (extension de signe).

VF <- 0 CF <- 0

ZF <- Rr == 0 NF <- Rr15

1 0

0

STW

copie le contenu du registre r spécifié par les bits 11 à 8 à l'adresse effective destination spécifée par le mode d'adressage.

Le mode d'adressage Immédiat est interdit avec cette instruction.

VF <- 0 CF <- 0

ZF <- Rr == 0 NF <- Rr15

1 0

1

LDW

copie le contenu du mot d'adresse effective source dans le registre r spécifié par les bits 8 à 11.

VF <- 0 CF <- 0

ZF <- Rr == 0 NF <- Rr15


Remarque :

Lorsque le mode d'adressage utilisé est le mode registre, il est abusif de parler d'adresse effective (un registre n'est pas situé en mémoire et n'a donc pas d'adresse). Cependant, pour simplifier les descriptions, on appelle dans ce cas adresse effective source ou adresse effective destination, le registre spécifié par le mode d'adressage (celui dont le numéro est codé par le champ base du mode d'adressage).

Groupe 4 : instructions Jcc

Groupe des instructions de branchements conditionnels relatifs, i.e. des instructions permettant de tester une configuration des indicateurs du registre d'état SR et de copier une adresse dans le compteur ordinal (registre PC du processeur). Cette instruction se code sur deux mots : il s'agit en fait d'une instruction utilisant un mode d'adressage nommé "relatif au compteur ordinal" sur certains processeurs. Dans ce cas, l'adresse effective est calculée en ajoutant un déplacement au contenu du compteur ordinal. Le déplacement est ici codé en complément à 2 dans le mot d'extension.


0

0

0

0

CC

1

0

0

0

0

0

0

0

15

14

13

12

11

10

9

8

7

6

5

4

3

2

1

0


déplacement

15

14

13

12

11

10

9

8

7

6

5

4

3

2

1

0


Spécification : La condition codée sur les bits 11 à 8 de l'instruction est évaluée. Si elle est vraie, le contenu du mot d'extension est ajouté au compteur ordinal. Attention : le compteur ordinal a déjà été incrémenté de 2 lorsque l'addition est effectuée.

Les différentes configurations du champ CC sont :


CC

mnémonique

signification

condition évaluée

0 0 0 1

(J)MP

saut

1

0 0 1 0

(J)EQ

EQual

ZF

0 0 1 1

(J)NE

Not Equal

! ZF

0 1 0 0

(J)GE

Greater or Equal

(entiers signés)

! (NF xor VF)

0 1 0 1

(J)LE

Lower or Equal

(entiers signés)

(NF xor VF) or ZF

0 1 1 0

(J)GT

GreaTer

(entiers signés)

!(NF xor VF) and !ZF

0 1 1 1

(J)LW

LoWer

(entiers signés)

NF xor VF

1 0 0 0

(J)AE (J)CC

Above or Equal

Carry Cleared

(valeurs non signées)

! CF

1 0 0 1

(J)BE

Below or Equal

(valeurs non signées)

CF or ZF

1 0 1 0

(J)AB

ABove

(valeurs non signées)

!CF and !ZF

1 0 1 1

(J)BL (J)CS

BeLow

Carry Set

(valeurs non signées)

CF

1 1 0 0

(J)VS

oVerflow Set

VF

1 1 0 1

(J)VC

oVerflow Cleared

!VF


N.B. La même codification et les mêmes mnémoniques de conditions sont utilisés pour les instructions Bcc, c'est pour cela que le caractère J figure entre parenthèses dans le tableau ci-dessus.

Groupe 5

Groupe des instructions à un opérande.


0

0

0

0

1

opération

0

mode

base

15

14

13

12

11

10

9

8

7

6

5

4

3

2

1

0


mot d'extension (avec certains modes d'adressage)

15

14

13

12

11

10

9

8

7

6

5

4

3

2

1

0


champ opération

mnémonique

spécification

0 0 0

JPA

Copie dans le registre PC le contenu du mot d'adresse effective en cas d'adressage immédiat ou le contenu du registre base en cas d'adressage de registre.

Les indicateurs CF, ZF, NF, et VF ne sont pas modifiés.

Seuls les modes d'adressage Immédiat et Registre sont autorisés.

0 0 1

JEA

Copie l'adresse effective dans le registre PC.

Les indicateurs CF, ZF, NF, et VF ne sont pas modifiés.

Les modes d'adressage Immédiat et Registre sont interdits.

0 1 0

JSR

Empile le contenu du registre PC (après incrémentation de 2 ou 4 selon le mode d'adressage utilisé), plus précisément :

- le registre SP (R15) est décrémenté de 2 (taille du registre PC en nombre d'octets)

- le contenu du registre PC est copié en mémoire à l'adresse contenue dans SP

puis l'adresse effective est copiée dans le registre PC.

Les indicateurs CF, ZF, NF, et VF ne sont pas modifiés.

Les modes d'adressage Immédiat et Registre sont interdits.

0 1 1

TRP

(exception programmée ou trappe logicielle)

Empile le contenu du registre SR, puis le contenu du registre PC (après incrémentation de 2 ou 4 selon le mode d'adressage utilisé ), plus précisément :

- le registre SP (R15) est décrémenté de 2 (taille du registre SR en nombre d'octets)

- le contenu du registre SR est copié en mémoire à l'adresse contenue dans SP

- le registre SP est décrémenté de 2 (taille du registre PC en nombre d'octets)

- le contenu du registre PC est copié en mémoire à l'adresse contenue dans SP

puis copie dans le registre PC le contenu du mot d'adresse

4 * (contenu de l'octet de droite du mot d'adresse effective

and FFFE)

Les indicateurs CF, ZF, NF, et VF ne sont pas modifiés.

N.B. Si le mode d'adressage est Registre, c'est l'octet de droite du registre base qui est utilisé.

Il n'y a pas extension de signe, l'octet utilisé représente un entier dans l'intervalle [1 .. 255]. Si l'octet est nul, il y a déclenchement d'une exception CPU non programmée de type « Instruction Illégale ».

1 0 0

TST

VF <- 0 CF <- 0

ZF <- contenu du mot d'adresse effective == 0

NF <- bit 15 du mot d'adresse effective

N.B. Si le mode d'adressage est Registre, c'est le contenu du registre base qui est utilisé.

1 0 1

TSR

positionne les indicateurs :

VF <- 0 CF <- 0

ZF <- contenu du mot d'adresse effective == 0

NF <- bit 15 du mot d'adresse effective

puis met à 0 le mot d'adresse effective.

N.B. Si le mode d'adressage est Registre, c'est le registre base qui est utilisé. Le mode d'adressage immédiat est interdit pour cette instruction.

1 1 0

MSR

Copie le registre SR dans le mot d'adresse effective.

Les indicateurs CF, ZF, NF, et VF ne sont pas modifiés.

N.B. Si le mode d'adressage est Registre, c'est le registre base qui est utilisé comme destination. Le mode d'adressage immédiat est interdit pour cette instruction.

1 1 1

MPC

Copie le registre PC dans le mot d'adresse effective.

Les indicateurs CF, ZF, NF, et VF ne sont pas modifiés.

N.B. Si le mode d'adressage est Registre, c'est le registre base qui est utilisé comme destination. Le mode d'adressage immédiat est interdit pour cette instruction.

Groupe 6

Groupe des instructions sans opérande.


0

0

0

0

0

opération

0

0

0

0

0

0

0

0

15

14

13

12

11

10

9

8

7

6

5

4

3

2

1

0


champ opération

mnémonique

spécification

0 0 0

NOP

Aucune action, seul le registre PC est modifié.

0 0 1

HLT

WF <- 1

Les autres indicateurs ne sont pas modifiés.

0 1 0

RTS

Dépile le sommet de pile dans le registre PC, plus précisément :

- le contenu du mot dont l'adresse est dans SP est copié dans le registre PC

- le registre SP est incrémenté de 2 (taille du registre PC en nombre d'octets)

Les indicateurs CF, ZF, NF, et VF ne sont pas modifiés.

0 1 1

RTI

Dépile le sommet de pile dans le registre PC, puis dépile le sommet de pile dans le registre SR plus précisément :

- le contenu du mot dont l'adresse est dans SP est copié dans le registre PC

- le registre SP est incrémenté de 2 (taille du registre PC en nombre d'octets)

- le contenu du mot dont l'adresse est dans SP est copié dans le registre SR

- le registre SP est incrémenté de 2 (taille du registre SR en nombre d'octets)

1 0 0

CLC

CF <- 0

Les autres indicateurs ne sont pas modifiés.

1 0 1

STC

CF <- 1

Les autres indicateurs ne sont pas modifiés.

1 1 0

DSI

IF <- 0

Les autres indicateurs ne sont pas modifiés.

1 1 1

ENI

IF <- 1

Les autres indicateurs ne sont pas modifiés.

Groupe 7

Groupe d'instructions n'utilisant qu'un registre et une valeur codée sur un octet du mot d'instruction.


0

0

1

op

registre d

valeur

15

14

13

12

11

10

9

8

7

6

5

4

3

2

1

0


champ op

mnémonique

spécification

0

LDQ

Copie le champ valeur dans l'octet de poids faible du registre d, le bit 7 du champ valeur est copié dans tous les bits de l'octet de poids fort du registre d.

VF <- 0 CF <- 0

ZF <- Rd == 0 NF <- Rd15

1

ADQ

Ajoute au contenu du registre d l'entier relatif codé dans le champ valeur (auparavant il y a extension de signe)

Les indicateurs CF, ZF, NF, et VF sont positionnés conformément au résultat de l'addition.

Groupe 8 : instructions Bcc

Instructions de branchements conditionnels courtes


0

0

0

1

CC

déplacement

15

14

13

12

11

10

9

8

7

6

5

4

3

2

1

0


Spécification : La condition codée sur les bits 11 à 8 de l'instruction est évaluée. Si elle est vraie, le contenu du champ déplacement est ajouté au compteur ordinal après extension de signe. Attention : le compteur ordinal a déjà été incrémenté de 2 lorsque l'addition est effectuée.

Les configurations et les interprétations du champ CC sont les mêmes que pour les instructions du groupe 4. Les mnémoniques de ces instructions Bcc sont constitués par la concaténation à B du mnénonique du code condition.

4 Exceptions

Une exception est un fonctionnement exceptionnel momentané du processeur suite à une requète extérieure :

ou intérieure au processeur causée par :

Le contrôleur d'exceptions non programmées

Les interruptions matérielles numérotées de 0 à 31 et les exceptions CPU non programmées, elles aussi numérotées de 0 à 31 sont prises en compte par un contrôleur d'exceptions non programmées (noté XCU, eXception Control Unit) qui mémorise les requètes dans un registre de 64 bits noté ERF (Exception Request Flag) :

Bien entendu si le bit correspondant est déjà à 1 lors d'une requète, il reste à 1 et cette occurrence de la requète sera ignorée.

Prise en compte des exceptions dans le cycle d'exécution

Le début du cycle d'exécution des instructions par le processeur est le suivant :

Si l'indicateur IF est à 1 et si il y a un bit à 1 dans ERF alors

  1.  le numéro k de l'exception la plus prioritaire est déterminé en parcourant ERF : la priorité d'une exception décroit quand son numéro croit, l'exception CPU n° 0 est la plus prioritaire, l'interruption matérielle n° 31, i.e. l'exception n° 63, est la moins prioritaire,

  2.  l'indicateur de l'exception n° k dans le registre ERF est mis à zéro : ERF[k] <- 0

  3.  si l'exception est une erreur, la valeur 0x0020 est empilée sinon le registre d'état SR est empilé,

  4.  si l'exception est une faute, l'adresse de l'instruction fautive3 est empilée sinon le contenu de PC est empilé,

  5.  les exceptions non programmées sont inhibées et le processeur est « réveillé » : IF <- 0 WF <- 0

  6.  l'adresse ast de la séquence de traitement de l'exception4 est calculée : ast = contenu_du_mot_d_adresse(4 * k) et 0xFFFE

  7.  l'adresse ast est copiée dans le PC : PC <- ast

Ensuite, qu'il y ait eu ou non traitement d'une exception, si l'indicateur WF est à zéro, l'exécution se poursuit normalement (sinon le processeur est en attente d'une interruption matérielle ou d'une réinitialisation).

Quelques précisions sur le traitement des exceptions

Pour empiler un mot, le registre SP (R15) est décrémenté de 2 et le mot est copié en mémoire à l'adresse contenue dans SP. Si une exception survient lors de l'accès à la pile le processeur passe dans l'état abandon (IF <- 0 et WF <- 1).

Les 4*256 premiers octets de la mémoire sont destinés à mémoriser la table des vecteurs d'interruptions. Cette zone de la mémoire doit avoir été initialisée avec les adresses des séquences de traitement d'exceptions pour que le mécanisme ait un sens. Quatre octets sont réservés pour chaque adresse de façon à permettre une extension à 32 bits du processeur. Les adresses des handlers sont nécessairement paires (bit de poids faible à zéro). Le masquage du dernier bit du vecteur d'interruption effectué avant chargement dans le PC permettra d'utiliser ce bit, à des fin de protection par exemple, dans une version ultérieure.

L'algorithme ci-dessus montre qu'en cas d'erreur le registre d'état empilé a l'indicateur WF à 1 et l'indicateur IF à 0. Une fois le « handler » de traitement d'erreur exécuté, affichage d'un message d'erreur sur la console par exemple, l'exécution de l'instruction RTI5 provoquera donc le passage du processeur dans l'état abandon. Il devra être réinitialisé avec le bouton reset.

En cas de faute c'est l'adresse de l'instruction fautive qui est empilée et non l'adresse de l'instruction suivante. Au retour du traitement d'exception l'instruction fautive sera donc réexécutée, le traitement de faute doit donc supprimer la cause de l'erreur. En revanche dans les autres cas, une fois le traitement d'exception effectué le programme interrompu se poursuit normalement.

Les étapes 3, 4, 6 et 7 de l'algorithme ci-dessus sont comparables au déroulement de l'instruction TRP. Cette instruction permet de déclencher des exceptions par programme, d'où le nom d'exception programmée. Cependant dans ce cas le contrôleur d'exception n'intervient pas et il n'est pas possible d'inhiber l'exception. De plus il est impossible avec cette instruction de déclencher une exception de numéro 0, cela provoque une trappe 1 (instruction illégale).

Tableau des exceptions CPU non programmées

Le tableau ci-dessous indique le type et la cause des exceptions CPU non programmées. Certaines exceptions sont réservées pour permettre une évolution ultérieure du processeur.


Numéro

Type

Nom

Cause

0

faute

Faute de bus

Il n'y a pas de mémoire à l'adresse indiquée. Cette exception est utilisée pour la gestion de la mémoire virtuelle.

1

trappe

Instruction illégale

Le code de l'instruction n'est pas valide.

2

trappe

Accès illégal

Tentative d'accès à un mot avec une adresse impaire.

3

?

Réservé : faute de protection

Réservé pour la gestion des droits d'accès dans une version ultérieure.

4

trappe

Division par zéro

L'instruction DIV a été utilisée avec un diviseur nul.

5 à 31

trappe, faute ou erreur

réservé

Réservé pour des exceptions non programmées du processeur.

5 Initialisation du processeur

L'initialisation du processeur (signal RESET) a pour effet d'initialiser le registre SR avec 0x0000 (les interruptions sont invalidées) et le registre PC avec 0xFFFA. Le contenu des registres R0 à R15 est indéterminé.


1On dit aussi exception programmée.

2La version actuelle du processeur ne comporte pas d'exception de type erreur.

3L'instruction fautive est celle qui s'exécutait lorsque la faute a été détectée.

4Une telle séquence de traitement d'exception est nommée handler en Anglais.

5Tout handler correctement programmé se termine par RTI.