Comment écrire une valeur dans le tas à une adresse avec offset (CWRITE) ?
Écrire une valeur dans le tas à l'adresse (base + offset).
É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.
Cherche chaque exercice au brouillon, puis coche “valider” si tu as trouvé la bonne démarche. Utilise le bouton aide si tu as besoin d'un coup de pouce.
É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.