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