MIC-L - Microprocesseurs (Cours + labo)

Appartient à l'UE Microprocesseurs

Personnes enseignantes

Description générale du cours

Concept fondamentaux liés aux microprocesseurs : machine virtuelle, représentation des données, gestion des entrées / sorties, segmentation de la mémoire, mode réel et protégé, coprocesseur mathématique, étapes de démarrage d’un ordinateur, décodage du set d’instructions élémentaires d’un microprocesseur, x86

Matières de base utilisées

Cours de structure des ordinateurs, cours de système d’exploitation.

Objectifs

Permettre aux étudiants de comprendre le fonctionnement d’un microprocesseur et de se familiariser avec le set d’instructions assembleur afin de favoriser la compréhension des langages de haut niveau.

Acquis d’apprentissage

  • Connaître le fonctionnement de base d’un processeur, au travers d’un modèle simplifié mettant en évidence les principes du calcul automatisé.
  • Connaître les différences entre le mode réel et le mode protégé des processeurs Intel x86, en termes de gestion de la mémoire centrale et des instructions disponibles.
  • Comprendre l’organisation de la mémoire centrale en mode réel sous Intel x86
  • Connaître les principes d’encodage binaire du code-machine, et savoir traduire en binaire des instructions assembleur basiques (INC, MOV, ADD, …).
  • Connaître les principes de fonctionnement du BIOS et son rôle dans le démarrage de l’ordinateur.
  • Connaître le fonctionnement de base du co-processeur mathématique 8087, ainsi que certaines de ces instructions de base (FLD, FST, FADD, FMUL, …).
  • Avoir une vue diachronique de l’évolution technologique des processeurs depuis le Intel 8086 (co-processeurs, pipeline, instructions SIMD, instructions SSE, multi-coeurs, …).

Plan du cours

Fonctionnement d’un microprocesseur

  • Un ordinateur simplifié
  • Composantes du processeur
  • Déroulement d’un processus
  • Interruption (pourquoi, comment ça fonctionne, sécurité,  mode protégé)
  • exemple de programme assembleur (compilation, exécution).
  • Résumé avec GDB

Langage d’assemblage

  • Qu’est-ce que l’assembleur ?
  • Pourquoi utiliser l’assembleur
  • Inconvénients de l’assembleur
  • Pourquoi connaître l’assembleur
  • Les assembleurs
  • Déboguer un programme assembleur

Les modes du x86

  • mode protégé
  • mode réel
  • segmentation en mode protégé
  • segmentation en mode réel
  • exemple de programme en mode réel
  • la table des interruptions et son emplacement)

Cartographie de la RAM d’un PC en mode réel

  • accès à la ROM
  • accès à la RAM
  • accès aux périphériques
  • exemples d’accès à un périphérique
  • cartographie de la mémoire en mode réel
  • affichage en mode réel

Démarrage d’un ordinateur

  • À la mise sous tension
  • BIOS
  • Secteur de boot d’une disquette, d’un disque (ou USB)
  • Un premier process sans interruption du BIOS

Jeu d’instruction du x86

  • Structure d’un code machine x86
  • Code machine x86 : code des registres
  • Visualiser le code machine
  • Code machine sur un byte fixe
  • Code machine avec valeur immédiate
  • Instructions simples
  • ModR/M en 32 bits
  • Byte SIB
  • Préfixes de segmentation
  • Préfixes de répétition
  • Préfixes de taille
  • Exemples

Coprocesseur mathématique

  • Rôle
  • Historique
  • Architecture et représentation des nombres
  • Valeurs extrêmes
  • Pile du coprocesseur
  • Jeu d’instruction
  • Exemples

Évolution des microprocesseurs

  • Historique
  • Loi de Moore
  • Co-processeurs
  • Processeurs pipe-line
  • Classement SISD, SIMD
  • Jeu d’instruction MMX 3DNow!
  • Jeu d’instruction SSE
  • Processeurs 64 bits
  • Processeurs dual core

Bibliographie

  • Assembleur X86 (Livre)
  • Kip Irvine, Assembleur X86, CampusPress (ISBN: 2-7440-1534-2)
  • Assembleur X86 (Livre)
  • Jean-Bernard Emond, Assembleur X86, Des bases de la programmation jusqu’à l’interfaçage avec les langages de haut niveau, CampusPress (ISBN: 2-7440-1564-4)

Description générale du cours

Etude du fonctionnement des microprocesseurs - Etude du 8086.

instructions élémentaires, notions de pile et de variables locales,

Programmation élémentaire en assembleur sous LINUX.

Matières de base utilisées

Néant.

Objectifs

Permettre aux étudiants de comprendre le fonctionnement d’un microprocesseur et de se familiariser avec les outils de travail : assembleur, éditeur de liens, debugger. Les laboratoires sont réalisés dans un environnement Unix.

Acquis d’apprentissage

  • Connaître la syntaxe de l’assembleur NASM pour le processeur Intel 80386, en termes de déclaration de variables et tableaux, structures de contrôle de base (tests, sauts conditionnels, appels de modules), opérateurs logique (AND, OR, XOR, NOT), opérateurs arithmétiques (ADD, SUB, INC, DEC).
  • Savoir implémenter des algorithmes de base en assembleur (traitements de chaînes de caractères et les tableaux, traitements simples sur les fichiers, …).
  • Savoir implémenter quelques appels-système LINUX basiques en assembleur (open, read, write, close, exit, …).
  • Savoir implémenter un programme assembleur divisé en modules répartis sur plusieurs fichiers.

Plan du cours

Prise en main de l’environnement

  • Description des registres du microprocesseur 32 bits de la famille x86
  • Structure d’un programme assembleur
  • Constante entière, directive, commentaire et étiquette
  • Assemblage, édition des liens, exécution
  • Utilisation d’un outil de “debuggage”

Instructions logiques et de manipulation de bits

  • Le registre eflags
  • Instructions logiques not, and, or et xor
  • Instructions de manipulation de bits sal et sar

Instructions arithmétiques

  • Représentation binaire par position simple
  • Représentation en complément à deux
  • Recopie en extension de signe
  • Instructions arithmétiques add, inc, sub et dec

Les instructions de saut jf

  • Le label
  • Saut inconditionnel : jmp (jump)
  • Saut conditionnel jf
  • Illustration aux structures de contrôle si-sinon et tant que

Les instructions de saut jcc

  • Instruction de comparaison cmp
  • Saut conditionnel jcc
  • Illustration aux la structures de contrôle pour et répéter-tant que

Variables globales

  • notion de variable simple
  • Comprendre et utiliser les segments
  • Déclaration, initialisation et utilisation de variables mémoires
  • Intérêt des directives de taille
  • Manipulation de tableaux
  • Big endian vs Little endian

Les interruptions et les appels système

  • Mécanisme des interruptions matérielles pour un processeur x86 en mode protégé
  • Appels systèmes par le biais d’interruptions
  • L’appel système exit, chmod et write

La pile du processeur x86

  • Les registres de la pile
  • Instructions push, pop
  • Manipulation de la pile
  • Variable locales
  • Labels locaux

La procédure

  • Intérêt des procédures
  • Appel de procédure
  • Passage d’argument
  • Retour d’une procédure

Bibliographie

  • Travaux et documents d’aide (E.S.I.) plateforme poESI
  • Daniel Tabak, Advanced microprocessors, Mc Hill Inc (1995)