diff --git a/Exercices/Programmes/prog-4.rst b/Exercices/Programmes/prog-4.rst index 7df939f744afbacf7ce1e9b11450c052a8991734..62b829b89e4920ca12f08dc4d8b99abfecd779b9 100644 --- a/Exercices/Programmes/prog-4.rst +++ b/Exercices/Programmes/prog-4.rst @@ -149,3 +149,25 @@ Exercices #. Vous trouverez également sur INGInious plusieurs exemples de questions typiques sur l'assembleur à l'examen. Ces questions portent sur la traduction d'un code assembleur dans son équivalent en C. `Première question <https://inginious.info.ucl.ac.be/course/LSINF1252/asm1>`_, `deuxième question <https://inginious.info.ucl.ac.be/course/LSINF1252/asm2>`_, `troisième question <https://inginious.info.ucl.ac.be/course/LSINF1252/asm3>`_ et `quatrième question <https://inginious.info.ucl.ac.be/course/LSINF1252/asm4>`_ . + +Question de bilan final +======================= + +Considérez le programme suivant. + + .. literalinclude:: src/s4_qbf.c + :encoding: utf-8 + :language: c + +* Dessinez le schéma de l'organisation mémoire du programme. Identifiez dessus où se trouvent toutes les variables présentes dans le programme. +* Pour chaque ligne du programme, indiquez quelles zones mémoires sont accédées et leur contenu après exécution. + +.. only:: staff + + Cette question est importante à réaliser, n'hésitez pas à y passer une bonne demi-heure. Insistez pour commencer à dessiner le schema au tableau et que les étudiants interagissent directement dessus. + + Dans la section code: f, main. + Dans la section initialisée: cours et 97850 (insistez sur ce dernier!). + Dans la section heap: la zone mémoire pointée par tab. + Dans la stack (à des niveaux différents): d, tab, res, c, x. Notez que les arguments des fonctions sont aussi mis sur la stack (y compris a, b, argc et argv), mais insistez là -dessus lors de l'exécution du programme. + Dans la zone param/env: le contenu de argv. \ No newline at end of file diff --git a/Exercices/Programmes/src/s4_qbf.c b/Exercices/Programmes/src/s4_qbf.c new file mode 100644 index 0000000000000000000000000000000000000000..6927794b4b2ca2736f9801ebdd041cf079c0fac6 --- /dev/null +++ b/Exercices/Programmes/src/s4_qbf.c @@ -0,0 +1,18 @@ +#include <stdlib.h> + +int cours = 1252; + +int f(int *a, int b) { + int c = 97850**a + b; + int x = 2052; + *a = x * c; + return c; +} + +int main(int argc, char *argv[]) { + int d = 42; + char *tab = malloc(20 * sizeof(char)); + int *res = (int *) tab; + *tab = f(&cours, d); + return 0; +}