Correction de la série d'exercices pratiques no 1
Partie 1 : Hypothetical computer PIPPIN et code generation
Lab 6.1
Question 3:
- L'instruction MUL X est stockée à l'adresse 4 <=> 0000 0100
- Le code binaire pour l'opération LOD est 00010100
- La représentation binaire du chiffre 2 est 0000 0010
- La variable Y est stockée à l'adresse 130 <=> 1000 0010
- La variable X est stockée à l'adresse 129 <=> 1000 0001
- La variable W est stockée à l'adresse 128 <=> 1000 0000
- Les codes binaires pour les opérations:
- ADD Y <=> 0000 0000 1000 0010
- MUL X <=> 0000 0010 1000 0001
- STO W <=> 0000 0101 1000 0000
Question 4:
- 00010100 00000101 <=> LOD #5
- 00000000 10000000 <=> ADD W
- 00000001 10000011 <=> SUB Z
- 00000011 10000001 <=> DIV X
- 00000101 10000010 <=> STO Y
Partie 2 : Scanning, parsing,code generation
Lab 6.2
Question 8:
- Y = 5 - Z + X
- E -> E - E
- E -> E + E
- S -> E = E
- Y = 5 - (Z + X)
- E -> E + E
- E -> (E)
- E -> E - E
- S -> E = E
-
Y = 5 - ((Z + X) / 2)
- E -> E + E
- E -> (E)
- E -> E / E
- E -> (E)
- E -> E - E
- S -> E = E
Question 9:
- Y = X - 3 * Z
- Y = (X - 3) + Z
- Y = X - (3 * (Z / 2))
Lab 6.3
Question 6:
Y = Z * 3 - X
X = (Y + 5) / 2
- LOD Y
- ADD #5
- DIV #2
- STO X
Z = (W * W) + (X * X)
- LOD W
- MUL W
- STO T1
- LOD X
- MUL X
- ADD T1
- STO Z
Question 7:
X = Z / 2
X = Z / 2 * Y
X = Z / (2 * Y)
Lab 6.4
Question 8:
- LOD X
- ADD Y
- ADD Z
- DIV #3
- STO W
Partie 3 : Hypothetical computer PIPPIN et code generation
- [0] LOD #1 ; charge le chiffre 1 dans l'accumulateur
- [2] STO X ; stocke le contenu de l'accumulateur dans la cellule X (initialisation
de la cellule X à 1, la cellule X contiendra la multiplication)
- [4] STO Y ; stocke le contenu de l'accumulateur dans la cellule Y (initialisation de la cellule Y à 1,
la cellule Y sera incrémentée à chaque tour de boucle)
- [6] LOD Y ; charge le contenu de la cellule Y dans l'accumulateur (début de boucle)
- [8] SUB T1 ; soustrait le contenu de la cellule T1 (la cellule T1 contient la variable n) à l'accumulateur
(Y-n dans l'accumulateur)
- [10] STO T2 ; stocke le résultat de la cellule T2 (Y - n dans la cellule T2, T2 est une cellule temporaire)
- [12] CPL T2 ; teste Y - n < 0 (si c'est vrai, met 1 dans l'accumulateur, si c'est faux, met 0 dans l'accumulateur)
- [14] JMZ 28 ; si le contenu de l'accumulateur est 0, saute à l'instruction [28] (sortie de boucle), sinon va à l'instruction suivante
- [16] LOD #1 ; charge le chiffre 1 dans l'accumulateur
- [18] ADD Y ; ajoute le contenu de la cellule Y au contenu de l'accumulateur (incrémentation, Y + 1 dans l'accumulateur)
- [20] STO Y ; stocke le résultat dans la cellule Y (Y + 1 dans la cellule Y, incrémentation)
- [22] MUL X ; multiplie le contenu de la cellule X au contenu de l'accumulateur ((Y + 1) * X dans l'accumulateur, résultat intermédiaire)
- [24] STO X ; stocke le résultat dans la cellule X ((Y + 1) * X dans l'accumulateur, résultat intermédiaire)
- [26] JMP 6 ; saute à l'instruction [6] (retour en début de boucle)
- [28] HLT ; stop