Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Decode:
- SAVE //Sauvegarde l'environnement de l'appelant
- //Préparation -------------------------------------------------------------
- mov x19,x0
- mov x20,x1
- ldr w21,[x1] //Obtention du compteur ordinal
- ldr x22,[x1,16] //Obtention du pointeur sur la memoire de la machine virtuelle
- ldrb w23,[x22,x21] //Lecture du premier octet de l'instruction courante
- //Début de vérification du type d'instruction -----------------------------
- cmp x23,0x40 //Est-ce l'instruction PUSH en mode 01? (0x40)
- b.ne decode10 //On vérifie le prochain type d'instruction
- //Décodage d'un PUSH en mode 01 -------------------------------------------
- mov x24,1 //On donne la valeur 1 à x24 pour le mode d'adressage immédiat
- str w24,[x19] //On store aux octets 0 à 3 le mode (0x01)
- str wzr,[x19,4] //On store aux octets 4 à 7 l'opérateur 0000 (PUSH)
- add x25,x21,2
- ldrb w24,[x22,x25]
- str w24,[x19,8] //On store aux octets 8 à 11 le nombre à PUSH
- str wzr,[x19,12] /*On store aux octets 12 à 15 la valeur 0 pour
- indiquer qu'il n'y aura pas de changements dans
- les codes condition*/
- str wzr,[x19,16] /*On store aux octets 16 à 19 la valeur 0 pour
- indiquer qu'on opère sur un nombre entier*/
- mov w24,3 /*On donne la valeur 3 à x24 qui représente la
- taille d'une instruction sur un entier en octets*/
- str x24,[x19,20] /*On store aux octets 20 à 23 la taille de l'instruction*/
- bl decodeFin
- decode10:
- cmp x23,0x21 //Est-ce l'instruction WRITE ()
- b.ne decode20
- bl EmuWrite
- bl decodeFin
- decode20:
- cmp x23,0x00 //Est-ce l'instruction HALT? (0x00)
- b.ne decodeError //sinon, le reste n'est pas encore supporte: Erreur.
- str xzr,[x19] //type d'instruction: systeme (0)
- str xzr,[x19,4] //numero d'operation: 0 (HALT)
- decodeFin:
- mov x0,0 //code d'erreur 0: decodage reussi
- mov x28,3
- ldr x27,[x28]
- RESTORE //Ramène l'environnement de l'appelant
- ret
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement