Le cours présente l'architecture des ordinateurs à bas niveau; les conséquences sur le développement logiciel à haut niveau sont systématiquement évoquées (présence de mémoire cache, limitation des modes d'adressage supportés) car l'objectif du cours est d'apporter aux étudiant-e-s les éléments leur permettant d'améliorer leur pratique du développement logiciel et non d'en faire des spécialistes du matériel.

On partira de la représentation interne de l'information en binaire (en présentant les différents codages pour les nombres entiers signés, les caractères, ainsi que le codage IEEE~754 pour les nombres flottants), puis on montrera comment une instruction machine est décodée par un processeur de type RISC-V pour être exécutée (chemin de données). La construction d'un processeur simple monocycle à partir de briques de base (logique combinatoire et séquentielle) sera décrite en détails.
L'apprentissage de l'assembleur RISC-V permettra d'appréhender la notion de registre et d'adressage de la mémoire. Enfin, on étudiera les différents types de mémoires (RAM, cache, \dots) et l'impact de leur utilisation judicieuse sur les performances des programmes.

L'environnement de travail pour tous les travaux pratiques utilise Linux.