Comment compiler la création d'un tableau (new T[e]) en XVM ?
Compiler new T[e] : allouer un bloc de e+1 mots dans le tas et initialiser le mot 0 avec la taille e.
Compiler new int[3] : créer un tableau de 3 entiers.
Compiler new T[e] : allouer un bloc de e+1 mots dans le tas et initialiser le mot 0 avec la taille e.
Calculer e, copier sa valeur (FETCH(0)), ajouter 1, appeler ALLOC, sauvegarder l'adresse (PXR), écrire la taille à l'offset 0 (CWRITE), puis remettre l'adresse en sommet de pile.
Compiler new int[3] : créer un tableau de 3 entiers.
Calculer la taille 3, la copier, ajouter 1 et allouer :
PUSH(3) -- pile : [3] (taille e=3)
FETCH(0) -- pile : [3, 3] (copie de la taille)
PUSH(1) -- pile : [1, 3, 3]
ADD -- pile : [4, 3] (taille du bloc = 3+1 = 4)
ALLOC -- pile : [addr, 3] (addr = adresse du bloc de 4 mots)
Sauvegarder l'adresse et écrire la taille à l'offset 0 :
PXR -- R <- addr ; pile : [3]
PRX -- pile : [3, addr]
PUSH(0) -- pile : [0, addr, 3]
CWRITE -- mem(addr+0) <- 3 ; pile : []
PRX -- pile : [addr] (adresse du tableau en sommet)
L'adresse du tableau de 3 entiers est en haut de pile. mem(addr)=3, mem(addr+1..addr+3) = cases du tableau.
Compiler new int[50] : créer un tableau de 50 entiers.
Compiler new int[n] où n est une variable locale déjà sur la pile (adresse frame offset 2).
Crée ton compte pour accéder à la fiche et aux exercices