Advertisement
Guest User

Untitled

a guest
Nov 28th, 2019
188
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
ARM 1.97 KB | None | 0 0
  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
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement