Documentation sur le CPU V

publicité
Small Virtual Machine - Documentation
Documentation sur la
Virtual Register Machine
EBArtSoft@
Version 1.0, Décembre 2002
Page 1 / 21
Small Virtual Machine - Documentation
Copyright
Copyright ©2002 EBArtSoft@
La VRM, l’émulateur et l’éditeur sont des freewares, leurs
utilisations et leurs distributions sont gratuites. Toute utilisation à des
fins commerciales est strictement interdite.
Page 2 / 21
Small Virtual Machine - Documentation
Sommaire
1 Introduction
1.1 Histoire ........................................................................... 4
1.2 Où obtenir ce document .................................................. 4
1.3 Feedback.......................................................................... 4
2 Overview
2.1 Registres .......................................................................... 5
2.2 Flags ................................................................................ 5
2.3 Mise en service ................................................................ 6
2.4 La ROM........................................................................... 6
2.5 La RAM........................................................................... 6
3 Opcodes
3.1 Informations générales .................................................... 7
3.2 Les modes d’adressage .................................................... 7
3.3 Les instructions ............................................................... 8
4 Informations Pratiques
4.1 Exemple de code ............................................................. 17
4.2 Optimisation .................................................................... 17
5 Annexes
5.1 Carte des instructions ...................................................... 18
5.2 Liste des instructions par ordre alphabétique .................. 19
5.3 Liste des instructions et modifications des drapeaux ...... 20
6 Conclusion
6.1 Remerciements ................................................................ 21
Page 3 / 21
Small Virtual Machine - Documentation
Chapitre 1
Introduction
1.1 Histoire
La VRM est un « faux » microprocesseur simplifié crée dans le but
d’apprendre le fonctionnement d’un microprocesseur.
1.2 Où obtenir ce document
Ce document est joint avec la VRM et peut être également
disponible
par
simple
demande
à
l’adresse
suivante :
[email protected]
1.3 Feedback
Je suis soucieux de connaître toutes les améliorations possibles que
vous pouvez apporter à cette documentation ou à la VRM, pour cela
faites-moi part de vos suggestions…
Page 4 / 21
Small Virtual Machine - Documentation
Chapitre 2
Overview
2.1 Registres
Les registres du VRM sont les suivants :
Registre
R1
R2
R3
R4
IP
SP
Description
Registre d'utilisation courante
Registre d'utilisation courante
Registre d'utilisation courante
Registre d'utilisation courante
Pointeur d'instruction
Pointeur de pile
Tous les registres sont 16 bits et peuvent contenir les valeurs suivantes :
Signé
Valeur
Min
-32768
Max
32767
Min
0
Non signé
Max
65535
Hexadecimal
Max
FFFF
2.2 Flags
Les flags sont des « drapeaux » signifiant une altération de l’état du
CPU. Ils sont utilisés, entre autres, par les instructions de saut
conditionnel :
Bit
Nom
7
6
5
4
Non utilisé
3
2
1
FZ
0
FC
FC flag - Vaut 1 si l’opération dépasse la capacité du registre
FZ flag - Vaut 1 si le résultat de l’opération fait zéro
Page 5 / 21
Small Virtual Machine - Documentation
2.3 Mise en service
Lors de la mise en service du CPU, les registres prennent les valeurs
suivantes :
Registre
R1
R2
R3
R4
SP
IP
Valeur
0000
0000
0000
0000
FFFE
0100
Flags
FC
FZ
Bit
0
1
2.4 LA ROM
La ROM (Read Only Memory) est un espace mémoire de 32Ko en
lecture seule contenant les données à exécuter par la VRM. C’est dans
cet espace qu’est chargé le programme créé par le compilateur.
2.5 LA RAM
La RAM (Random Acces Memory) est un espace mémoire de 32Ko
contiguë à la ROM pouvant être lue et écrite. C’est dans cet espace que
sont stockés les variables, la pile et l’interface avec le « Hardware »
Page 6 / 21
Small Virtual Machine - Documentation
Chapitre 3
Opcodes
3.1 Informations Générales
Tous les opcodes sont codés sur un octet, sauf le préfixe FF qui sera
utilisé dans d’autre version pour gérer, entre autre, des données sur
8bits (voir la carte des opcodes). Le codage de la VRM comporte
quatre parties :
Les étiquettes
Les mnémoniques
Les opérandes
Les commentaires
Permettent de repérer une adresse
Identifient les instructions
Complètent les instructions
Permettent d’ajouter des remarques au code
3.2 Les modes d’adressage
Il existe dans la version 1.0 de la VRM trois types d’adressages :
L’adressage immédiat : Registre <= Valeur immédiate
Le contenu du registre est initialisé par une valeur immédiate
Ex : MOV R1,10
L’adressage direct : Registre <= Mémoire
Le contenu du registre est initialisé par le contenu de la mémoire
Ex : MOV R1,[A000]
L’adressage basé : Registre <=[R1]
Le contenu du registre est initialisé par le contenu de la mémoire situé
à l’adresse contenu par R1
Ex : MOV R1,[R1]
Page 7 / 21
Small Virtual Machine - Documentation
3.3 Les instructions
NOP (Alignement)
Cette instruction passe un cycle et permet d’aligner le code, c’est en
réalité la fonction XCH R1, R1.
Syntaxe :
NOP
XCH (Transfert)
Cette instruction échange les valeurs de deux registres.
Syntaxe :
XCH reg, reg
Exemple :
MOV R1, 10
MOV R2, 20
XCH R1, R2
; R1 = 10 et R2 = 20
ADD (Addition)
Cette instruction additionne des valeurs.
Syntaxe :
ADD reg, reg
ADD R1, imm
Exemple :
MOV R1, 10
MOV R2, 20
ADD R1, R2
; R1 = 10 + 20 = 30
ADD R1, 10
; R1 = 30 + 10 = 40
Page 8 / 21
Small Virtual Machine - Documentation
SUB (Soustraction)
Cette instruction soustrait deux valeurs.
Syntaxe :
SUB reg, reg
SUB R1, imm
Exemple :
MOV R1, 10
MOV R2, 20
SUB R2,R1
; R2 = 20 – 10 = 10
SUB R1, 10
; R1 = 10 -10 = 0
MOV (Déplacement)
Cette instruction copie le contenu de l’opérande de droite dans
l’opérande de gauche.
Syntaxe :
MOV reg, reg
MOV reg, imm
MOV reg, mem
MOV mem, reg
Exemple :
; R1 = 0
MOV R1, 10
; R1 = 10
MOV R2, R1
; R2 = R1 = 10
MOV [A000],R1
; La mémoire à l’adresse A000 = 10
MOV R3, [A000]
; R3 = 10
Page 9 / 21
Small Virtual Machine - Documentation
AND (ET Logique)
Cette instruction effectue un ET logique sur les bits de deux registres.
0 AND 0 = 0
0 AND 1 = 0
1 AND 0 = 0
1 AND 1 = 1
Syntaxe :
AND reg, reg
AND R1, imm
Exemple :
MOV R1, 255
MOV R2, 15
AND R1, R2
; R1 = R1.R2 = 255 AND 15 = 15
AND R1,7
; R1 = R1.7 = 15 AND 7 = 7
XOR (OU Exclusif Logique)
Cette instruction effectue un OU Exclusif Logique sur les bits de deux
registres.
0 XOR 0 = 0
0 XOR 1 = 1
1 XOR 0 = 1
1 XOR 1 = 0
Syntaxe :
XOR reg, reg
XOR R1, imm
Exemple :
MOV R1, 10
XOR R1, R1
; R1 = 0
Page 10 / 21
Small Virtual Machine - Documentation
OR (OU Logique)
Cette instruction effectue un OU Logique sur les bits de deux registres.
0 OR 0 = 0
0 OR 1 = 1
1 OR 0 = 1
1 OR 1 = 1
Syntaxe :
OR reg, reg
OR R1, imm
Exemple :
MOV R1, 1
MOV R2, 2
OR R1, R2
; R1 = 1 OR 2 = 3
OR R1, 4
; R1 = 3 OR 4 = 7
CMP (Comparaison)
Cette instruction compare deux valeurs et affecte les drapeaux en
conséquence. Elle est souvent suivie d’un saut conditionnel.
Syntaxe :
CMP reg, reg
CMP R1, imm
Exemple :
MOV R1, 10
MOV R2, 2
CMP R1, R2
JMPZ @Label1
; Si R1 = R2 …
CMP R2,0
JMPNZ @Label2
; Si R2 = 0 …
Page 11 / 21
Small Virtual Machine - Documentation
NOT (NON Logique)
Cette instruction effectue un NON Logique sur les bits d’un registre.
NOT 0 = 1
NOT 1 = 0
Syntaxe :
NOT reg
Exemple :
MOV R1, FFFF
NOT R1
; R1 = 0
NOT R1
; R1 = FFFF ou -1
NEG (Négation)
Cette instruction change le signe d’un registre.
Syntaxe :
NEG reg
Exemple :
MOV R1, 2
NEG R1
; R1 = -2
PUSH (Empile)
Cette instruction place le contenu d’un registre dans la pile.
Syntaxe :
PUSH reg
Exemple :
MOV R1, 10
PUSH R1
POP R2
; R2 = R1 = 10
Page 12 / 21
Small Virtual Machine - Documentation
POP (Restore)
Cette instruction récupère dans la pile le contenu d’un registre.
Syntaxe :
POP
reg
Exemple :
MOV R1, 10
PUSH R1
POP R2
; R2 = R1 = 10
INC (Incrément)
Cette instruction incrémente le registre.
Syntaxe :
INC reg
Exemple :
MOV R1, 10
INC R1
; R1 = 10 + 1 =11
DEC (Décrément)
Cette instruction décrémente un registre.
Syntaxe :
DEC reg
Exemple :
MOV R1, 10
DEC R1
; R1 = R1 -1 = 9
Page 13 / 21
Small Virtual Machine - Documentation
JMP (Saut et saut conditionnel)
Cette instruction saute vers le label ou l’adresse spécifiée. Elle affecte
directement le registre IP qui prend la valeur de l’opérande.
JMP
JMPC
JMPZ
JMPNC
JMPNZ
Saute sans condition
Saute si FC = 1
Saute si FZ = 1
Saute si FC = 0
Saute si FZ = 0
Syntaxe :
JMP @Lbl
JMP mem
La condition ne s’applique pas dans les cas suivants :
JMP R1
JMP [R1]
Exemple :
MOV R1, 10
; R1 = 10
@Label1
DEC R1
; R1 = R1 -1
JMPNZ @Label1
; Si R1 <>0 Alors Recommence à @Label1
Page 14 / 21
Small Virtual Machine - Documentation
CALL (Appel de fonction)
Cette instruction saute vers le label ou l’adresse spécifiée et place IP
sur la pile.
Syntaxe :
CALL @Lbl
CALL mem
CALL R1
CALL [R1]
Exemple :
JMP @Debut
@Mul
ADD R1, R1
RET 0
@Debut
MOV R1, 10
CALL @Mul
; R1 = R1 + R1 = R1 * 2
RET (Retour)
Cette instruction récupère IP sur la pile et incrément le registre SP du
contenu de l’opérande.
RET
RETC
RETZ
RETNC
RETNZ
Retour sans condition
Retour si FC = 1
Retour si FZ = 1
Retour si FC = 0
Retour si FZ = 0
Syntaxe :
CALL @Lbl
CALL mem
CALL R1
CALL [R1]
Exemple :
Voir CALL
Page 15 / 21
Small Virtual Machine - Documentation
GETS (Récupération de SP)
Cette instruction place le contenu de SP dans R1.
Syntaxe :
GETS
Exemple :
PUSH R1
GETS
; R1 = SP = FFFB
SETS (Définition de SP)
Cette instruction place le contenu de R1 dans SP.
Syntaxe :
SETS
Exemple :
GETS
ADD R1, 2
SETS
; SP = SP + 2
Page 16 / 21
Small Virtual Machine - Documentation
Chapitre 4
Informations Pratiques
4.1 Exemple de Code
Je n’ai pas le temps de remplir cette rubrique,
Merci d’y ajouter vos créations.
4.2 Optimisation
Je n’ai pas le temps de remplir cette rubrique,
Merci d’y ajouter vos créations.
Page 17 / 21
Small Virtual Machine - Documentation
Chapitre 5
Annexes
5.1 Carte des instructions
Les colonnes représentent les 4 bits de poids fort de l’opcode et les lignes les 4 bits de poids faible Ex : 01 = XCH R1, R2
0
1
2
3
4
5
6
7
8
9
A
B
C
D
E
F
0
NOP
XCH R1
XCH R2
XCH R3
XCH R4
i
[m]
1
R2
R3
R4
R1
R2
R3
R4
R1
R2
R3
R4
R1
R2
R3
R4
=
=
ADD R1
ADD R2
ADD R3
ADD R4
2
R1
R2
R3
R4
R1
R2
R3
R4
R1
R2
R3
R4
R1
R2
R3
R4
SUB R1
SUB R2
SUB R3
SUB R4
3
R1
R2
R3
R4
R1
R2
R3
R4
R1
R2
R3
R4
R1
R2
R3
R4
MOV R1
MOV R2
MOV R3
MOV R3
4
R1
R2
R3
R4
R1
R2
R3
R4
R1
R2
R3
R4
R1
R2
R3
R4
AND R1
XOR R1
OR R1
CMP R1
5
R1
R2
R3
R4
R1
R2
R3
R4
R1
R2
R3
R4
R1
R2
R3
R4
NOT
NEG
PUSH
POP
6
R1
R2
R3
R4
R1
R2
R3
R4
R1
R2
R3
R4
R1
R2
R3
R4
INC
DEC
CALL
MOV
7
R1
R2
R3
R4
R1
R2
R3
R4
i
[m]
R1
[R1]
R1,i
R2,i
R3,i
R4,i
JMP
RET
JMP
RET
8
Z
C
NC
NZ
Z
C
NC
NZ
i
[m]
R1
[R1]
i
[m]
R1
[R1]
MOV
MOV
ADD
SUB
AND
XOR
OR
CMP
GETS
SETS
9
[m],R1
[m],R2
[m],R3
[m],R4
R1,[m]
R2,[m]
R3,[m]
R4,[m]
R1,i
R1,i
R1,i
R1,i
R1,i
R1,i
R1
R1
Valeur immédiate
Memoire
Page 18 / 21
A
B
C
D
E
F
Reserved
5.1 Liste des instructions par ordre alphabétique
Voici la liste non exhaustive des instructions :
ADD ............................................................................................. 8
AND ........................................................................................... 10
CALL .......................................................................................... 15
CMP ........................................................................................... 11
DEC ........................................................................................... 13
GETS ......................................................................................... 16
INC ............................................................................................. 13
JMP ............................................................................................ 14
JMPC ......................................................................................... 14
JMPNC....................................................................................... 14
JMPNZ ....................................................................................... 14
JMPZ.......................................................................................... 14
MOV ............................................................................................. 9
NEG ........................................................................................... 12
NOP ............................................................................................. 8
NOT ........................................................................................... 12
OR.............................................................................................. 11
POP ........................................................................................... 13
PUSH ......................................................................................... 12
RET ............................................................................................ 15
RETC ......................................................................................... 15
RETNC....................................................................................... 15
RETNZ ....................................................................................... 15
RETZ.......................................................................................... 15
SETS.......................................................................................... 16
SUB.............................................................................................. 9
XCH ............................................................................................. 8
XOR ........................................................................................... 10
Page 19 / 21
5.3 Liste des instructions et modification des
drapeaux
X = affecte directement le drapeau, O n’affecte pas le drapeau:
OPCODE
ADD
AND
CALL
CMP
DEC
GETS
INC
JMP
JMPC
JMPNC
JMPNZ
JMPZ
MOV
NEG
NOP
NOT
OR
POP
PUSH
RET
RETC
RETNC
RETNZ
RETZ
SETS
SUB
XCH
XOR
FC
X
X
O
X
X
O
X
O
O
O
O
O
O
X
X
X
X
O
O
O
O
O
O
O
O
X
O
X
FZ
X
X
O
X
X
O
X
O
O
O
O
O
O
X
X
X
X
O
O
O
O
O
O
O
O
X
O
X
Page 20 / 21
Chapitre 6
Conclusion
6.1 Remerciements
Tout d’abord un grand merci à l’homme qui m’a aidé tout au long de
cette aventure et qui m’a supporté dans les moments forts comme dans
les moments douloureux, c'est-à-dire MOI !
Merci à tous ceux qui programment pour le plaisir et qui partagent…
Merci à VBFrance qui fait un travail excellent…
Et bonne programmation à tous !
Page 21 / 21
Téléchargement