**** éléments de correction td11/12 (Extra)-LT-RICM2 Gen Code.**** **** Laurent Mounier et Laure Gonnord **** Exercice 1 ---------- Je choisis arbitrairement dans la suite de prendre les décalages suivants : var dec x 4 y 8 z 12 b2 14 <-- je code sur 2, ça me suffit ! b3 16 Le code est une suites d'instructions, et le code produit est : GenCodeInstr(x:=z+3) GenCodeInst(repeat c until e) où c=.... et e=... avec, GenCodeInstr(x:=z+3) = ADD R1 R0 3 -- R1<-- const(3) LD R2 [FP-12] -- R2<-- valeur(z) ADD R3 R2 R1 -- R3<-- R1+R2 ST R3 [FP-4] -- stockage dans @x de R3 GenCodeInstr(repeat c until e)= (ldebut <- 1; lfin <- 2) 1: GenCodeInstr(x:=y+4;b3:=b3 et b2) -- laissé au lecteur GenCodeBexp(b3 xor x>9,2,1) 2: puis, GenCodeBexp(b3 xor x>9,2,1) = (lvrai1<-3,lfaux1<-4) GenCodeBexp(b3,3,4) 3: GenCodeBexp(x>9,1,2) 4: GenCodeBexp(x>9,2,1) Enfin, GenCodeBexp(x>9,2,1) = -- n'est pas écrit mais on l'invente! LD R12 [FP-4] -- stockage de x ds R12 ADD R13 R0 9 -- R13 <- const(9) CMP R12 R13 -- comparaison de R12 et R13 BGT 2 -- gt = greater than = sup.strict BA 1 Le reste est laissé au lecteur. Exercice 2 ---------- (au passage, voir le joli texte sur la logique et l'intuition : http://perso.wanadoo.fr/therese.eveilleau/pages/paradoxe/textes/logique.htm) A=>B est vraie quand : * A vrai et B vrai * A faux et B faux * A faux et B vrai En fait, elle n'est fausse que lorsque A est vrai et B faux, donc on va commencer par évaluer A, et si A est faux, c'est fini ! sinon, on évalue B. GenCodeBexp(e1 => e2,lvrai,lfaux)= soit etiq22=nouvelleEtiq() dans GenCodeBexp(e1,etiq2, lvrai) etiq2: GenCodeBexp(e2,lvrai,lfaux) et voilà ! ****