SHARE
TWEET

Untitled

a guest Nov 28th, 2019 138 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. Decode:
  2.     SAVE                    //Sauvegarde l'environnement de l'appelant
  3.  
  4.     //Préparation -------------------------------------------------------------
  5.     mov     x19,x0
  6.     mov     x20,x1
  7.     ldr     w21,[x1]        //Obtention du compteur ordinal
  8.     ldr     x22,[x1,16]     //Obtention du pointeur sur la memoire de la machine virtuelle
  9.     ldrb    w23,[x22,x21]   //Lecture du premier octet de l'instruction courante
  10.  
  11.     //Début de vérification du type d'instruction -----------------------------
  12.     cmp     x23,0x40        //Est-ce l'instruction PUSH en mode 01? (0x40)
  13.     b.ne    decode10        //On vérifie le prochain type d'instruction
  14.  
  15.     //Décodage d'un PUSH en mode 01 -------------------------------------------
  16.     mov     x24,1           //On donne la valeur 1 à x24 pour le mode d'adressage immédiat
  17.     str     w24,[x19]       //On store aux octets 0 à 3 le mode (0x01)
  18.     str     wzr,[x19,4]     //On store aux octets 4 à 7 l'opérateur 0000 (PUSH)
  19.     add     x25,x21,2
  20.     ldrb    w24,[x22,x25]
  21.     str     w24,[x19,8]     //On store aux octets 8 à 11 le nombre à PUSH
  22.     str     wzr,[x19,12]    /*On store aux octets 12 à 15 la valeur 0 pour
  23.                               indiquer qu'il n'y aura pas de changements dans
  24.                               les codes condition*/
  25.     str     wzr,[x19,16]    /*On store aux octets 16 à 19 la valeur 0 pour
  26.                               indiquer qu'on opère sur un nombre entier*/
  27.     mov     w24,3           /*On donne la valeur 3 à x24 qui représente la
  28.                               taille d'une instruction sur un entier en octets*/
  29.     str     x24,[x19,20]    /*On store aux octets 20 à 23 la taille de l'instruction*/
  30.     bl      decodeFin
  31.  
  32. decode10:
  33.  
  34.     cmp     x23,0x21        //Est-ce l'instruction WRITE ()
  35.     b.ne    decode20
  36.  
  37.     bl      EmuWrite
  38.     bl      decodeFin
  39.  
  40.  
  41. decode20:
  42.  
  43.     cmp     x23,0x00        //Est-ce l'instruction HALT? (0x00)
  44.     b.ne    decodeError     //sinon, le reste n'est pas encore supporte: Erreur.
  45.  
  46.     str     xzr,[x19]       //type d'instruction: systeme (0)
  47.     str     xzr,[x19,4]     //numero d'operation: 0 (HALT)
  48.  
  49. decodeFin:
  50.  
  51.     mov     x0,0            //code d'erreur 0: decodage reussi
  52.  
  53.     mov     x28,3
  54.     ldr     x27,[x28]
  55.  
  56.     RESTORE                 //Ramène l'environnement de l'appelant
  57.     ret
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
Top