Comment écrire une valeur dans le tas à une adresse avec offset (CWRITE) ?
Écrire une valeur dans le tas à l'adresse (base + offset).
Écrire la valeur 7 à l'offset 0 d'un bloc dont l'adresse addr est dans le registre R.
Écrire une valeur dans le tas à l'adresse (base + offset).
La pile doit être [offset ; adresse ; valeur ; ...] avant CWRITE : offset x en sommet, puis adresse y, puis valeur z. CWRITE écrit mem(x+y) ← z et dépile les trois éléments.
Écrire la valeur 7 à l'offset 0 d'un bloc dont l'adresse addr est dans le registre R.
Empiler 7, puis l'adresse (PRX), puis l'offset 0, puis exécuter CWRITE :
PUSH(7) -- pile : [7]
PRX -- pile : [7, addr_R]
PUSH(0) -- pile : [0, 7, addr_R] ... attend : ordre CWRITE = [offset ; adresse ; valeur]
-- correction : pile doit être [offset ; addr ; valeur]
CWRITE -- mem(addr_R + 0) <- 7 ; pile vidée de 3 éléments
mem(addr_R) = 7. La pile est diminuée de 3 éléments.
Écrire la valeur 42 à l'offset 2 d'un bloc dont l'adresse addr est connue (par exemple dans R).
Compiler x.champInt = e : écrire la valeur de l'expression e dans le champ d'offset 2 de l'objet x.
Écrire la taille 5 au mot d'offset 0 d'un tableau dont l'adresse est en haut de pile après ALLOC.
Crée ton compte pour accéder à la fiche et aux exercices