v2.11.0 (5747)

Enseignement scientifique & technique - ECE_3TC32_TP : Compilation

Domaine > Informatique.

Descriptif

Comment les ordinateurs calculent ? Comment un processeur fonctionne ? Comment une machine composée de simples portes peut-elles exécuter des programmes écrits dans des langages de haut niveau (tels Python ou OCaml) ?

Ce cours présentera les différentes abstractions qui permettent de construire une machine exécutant des programmes dans des langages de haut-niveau à partir de porte logique. En particulier, nous nous intéresserons à la création d'un petit CPU fait de portes logiques (nand et registres), au langage assembleur x86-64 et à la compilation d'un langage vers cet assembleur.

Objectifs pédagogiques

À la fin du cours, on doit être en mesure de :

  • Construire un petit processeur à partir de portes logiques
  • Décrire les composants d'un processeur moderne (multicœur, mémoire virtuelle, instructions vectorielles, etc.)
  • Construire un compilateur (d'un langage à la C vers un assembleur x86-64)
  • Écrire des programmes en assembleur
  • Expliquer les fonctions d'un processeur (organisation de la mémoire, registres, appels systèmes, etc.)
  • Expliquer les différentes abstractions qui permettent de passer d'un langage de haut-niveau à des portes logiques

 

30 heures de travail personnel estimé pour l’étudiant.

effectifs minimal / maximal:

2/

Diplôme(s) concerné(s)

Format des notes

Numérique sur 20

Littérale/grade européen

Pour les étudiants du diplôme Diplôme d'ingénieur

Vos modalités d'acquisition :

L'évaluation est basée sur :

 

L'UE est acquise si Note finale >= 10
  • Crédits ECTS acquis : 3 ECTS
  • Crédit de BCI acquis : 3

La note obtenue rentre dans le calcul de votre GPA.

L'UE est évaluée par les étudiants.

Programme détaillé

Introduction

  • Présentation des objectifs du cours, la notation, les TP à rendre
  • Brève histoire de l'informatique, orientée matériel et langages
  • Vue d'ensemble des sujets étudiés dans le cours

Assembleur x86-64

  • Fonctionnnement général du processeur (RAM, registres, instructions, etc.)
  • Organisation de la mémoire
  • Jeu d'instruction et pseudo-instructions
  • Appels systèmes et interruptions
  • Conventions d'écritures
  • Assemblage
  • Exercices

Construction d'un CPU à partir de portes logiques

  • Rappels sur les portes logiques (nand et bascules synchrones)
  • Construction de petits circuits logique (et, ou, xor, mux, neg) à partir de nand
  • Construction de circuits arithmétiques (half-adder, full-adder, +, -, mux_n)
  • Construction de mémoires (RAM / ROM / registres)
  • Construction d'une ALU voire d'un CPU

Syntaxe, Sémantique et interprétation

  • Lexing en OCaml avec OCamllex
  • Parsing avec Menhir
  • Notion de syntaxe vs sémantique
  • Analyse de la sémantique
  • Interprétation d'un langage à la python

Production de code x86-64 pour un langage procédural simple

  • Production récursive de code
  • Gestion de la mémoire avec des variables globales et locales (tas et pile)
  • Gestion des fonctions

Production de code x86-64 pour un langage objet

 

Veuillez patienter