Comprendre l'architecture des ordinateurs
Forum INFOMATH :: Enseignement de l'informatique :: INFO - Supérieur (Etudiants et Professionnels) :: Cours, Tutorials, Dossiers
Page 1 sur 1
Napoléon- Admin
-
Nombre de messages : 2934
Localisation : Tunisie
Réputation : 122
Points : 7875
Date d'inscription : 19/03/2007
Feuille de personnage
Capacité linguistique:
(999/1000)
Re: Comprendre l'architecture des ordinateurs
Aperçu :
Ces notes constituent un support de travaux pratiques pour un cours d'architecture élémentaire des ordinateurs. Lors de ces séances, il s'agit principalement de programmation assembleur sur des ordinateurs personnels d'architecture intel 32 bits gérés par le système d'exploitation Linux. L'assembleur utilisé est le gnu assembleur et nous utiliserons le gnu debugger pour l'exécution pas à pas et l'examen de la mémoire et des registres.
Ce texte — comme son titre l'indique — vise deux objectifs :
* fournir une synthèse élémentaire des notions requises par un débutant pour l'apprentissage de l'assembleur ;
* donner une représentation architectonique1 du sujet.
Ainsi, ces notes ne prétendent ni à l'exhaustivité — toutes les instructions et possibilités de l'assembleur ne sont pas présentées — ni à apprendre à écrire du code optimal. Cet enseignement est plutôt orienté par la perspective d'en faire une base permettant de comprendre comment un programme — en C par exemple — est exécuté par la machine.
Un bref descriptif du jeu d'instruction des processeurs 32 bits de type intel est disponible en annexe D (pour plus d'information voir [2]). De plus, en utilisant la commande info as dans un interpréteur de commande, on accède au manuel d'utilisation de gas.
Conventions typographiques.
Dans ce document, nous utilisons les conventions suivantes :
* foo représente la commande foo dans un interpréteur de commandes ;
* foo représente la commande foo dans un environement — par exemple gdb ;
* foo représente une instruction assembleur.
Le guide d'utilisation de gas.
Ce document n'est pas un manuel présentant le gnu assembleur ; pour ce faire, nous suggérons l'utilisation du guide d'utilisation accessible depuis un interpréteur de commandes par l'instruction info gas.
Thème 1 Prise en main de l'assembleur gas
L'objectif de cette section est d'écrire, compiler et exécuter — sans trop de douleur — son premier programme assembleur.
* Descriptif sommaire de la famille des processeurs Intel iAPx86
* Registres généralistes de la famille des processeurs 32 bits Intel
* Exemple d'instruction assembleur : le mouvement de données
* Structure d'un programme assembleur
o Segment de données
o Segment de texte
* Compilation et exécution pas à pas
o Compilation
o Exécution pas à pas dans l'environnement gnu debugger
* Exercices
Thème 2 Structures de contrôle
Dans notre contexte, on appelle structure de contrôle toute séquence d'instructions qui permet de contrôler la succession des actions d'un programme. En ce qui concerne l'assembleur, il s'agit exclusivement de séquence d'instructions de sauts conditionnels.
* Organisation de la mémoire : segments et offsets
* Instruction de saut inconditionnelle jmp
* Instructions de saut conditionnelles
o Conditionnelles
o Boucles conditionnelles
o Instructions de boucle énumérative : loop
* Exercices
Thème 3 Appels systèmes par le biais d'interruptions
* Mécanisme d'interruption
* Interruptions et appels système du noyau Linux
* Gestion d'entrée-sortie
o Lecture et écriture
o Ouverture et fermeture d'un fichier
Thème 4 Transferts et stockage de données
* Transferts de données
o L'instruction mov
o Conversion de données
* Manipulation de la pile
o Implantation de la pile
o Manipulation de la pile
Thème 5 Appel de fonction et passage d'argument
Annexe A Index 1
Annexe B Architecture de type Intel 32 bits
* Les registres d'un processeur 32 bits de type Intel
o Le registre d'accumulation %eax
o Le registre %ebx (base index) utilisé comme pointeur sur les données
o Le registre ECX utilisé comme compteur
o Le registre EDX utilisé pour les entrées/sorties
o Le registre EIP (Instruction Pointer)
o Le registre EDI (Destination Index) et le registre ESI (Source Index)
o Le registre CS (Code Segment)
o Le registre SS (Stack Segment)
o Le registre ESP (Stack Pointer)
o Le registre EBP (Frame Base Pointer)
o Les registres DS, ES, FS, GS (Data Segment)
o Le registre EFLAG
Annexe C Descriptif des directives
Toutes les directives commencent par un point.
* Les directives indiquant une section
o .data : Segment de données
o .rodata : Segment de données en lecture seule
o .bss : Segment de stockage de données
o .text : Segment de code
* Indications sur la taille du codage
o .byte : Déclaration d'un nombre sur 1 octet
o .long : Déclaration d'un nombre sur 4 octets
o .zero : Réservation d'un nombre d'octets tous mis à 0
o .space : Réservation d'un nombre spécifié d'octets ayant une valeur donnée
o .word : Déclaration d'un nombre sur 2 octets
* Déclaration et porté des symboles
o .local : Déclaration locale d'une étiquette
o .global : Déclaration globale d'une étiquette
o .comm : Déclaration d'un symbol commun
Annexe D Descriptif des instructions
Pour chaque instruction, nous présentons :
* la syntaxe permettant l'utilisation des différentes dérivées de cette instruction ;
* une description de cette instruction ;
* l'effet de cette dernière sur le registre drapeaux (principalement pour les instructions relatives à l'unité arithmétique) ;
* les différents types d'opérandes possibles. Ainsi,
o idata représente une constante ;
o reg représente un registre ;
o mem représente une étiquette associée à un espace mémoire ou une adresse.
* Arithmétique classique
o add : addition d'entiers
o cmp : compare deux opérandes
o dec : décrémentation
o div : division d'entiers non signés
o inc : incrémentation
o mul : multiplication non signée
o sub : soustraction d'entiers
* Déplacement des données
o mov : déplacement de données
o pop : dépilement de données
o push : empilement de données
* Sauts
o jmp : saut inconditionnel
* Appel de fonction
o leave : Instruction précédent la fin d'une fonction en C
o call : Appel de fonction
* Misc
o lea : Load Effective Address
Annexe E Descriptif des appels système
* Entrée – sortie
o sys_read : Lecture depuis un flux
o sys_write : Écriture dans un flux
o sys_open : Ouverture d'un flux
o sys_close : Fermeture d'un flux
*
o sys_exit : Fin de processus
Annexe F Récapitulatif des commandes gdb
*
o Lancement et arrêt de gdb
o Commandes générales
o Manipulation des points d'arrêt
o Exécution d'un programme pas à pas
o Affichage du code et des données
o Commandes d'aide
Références
[1]
Intel Corporation. Intel Architecture Software Developer's Manual : Basis Architecture, 1997.
[2]
Intel Corporation. Intel Architecture Software Developer's Manual : Instruction Set Reference, 1997.
Pour tout commentaire : Alexandre Sedoglavic.
Napoléon- Admin
-
Nombre de messages : 2934
Localisation : Tunisie
Réputation : 122
Points : 7875
Date d'inscription : 19/03/2007
Feuille de personnage
Capacité linguistique:
(999/1000)
Sujets similaires
» Exposé: Histoire des ordinateurs
» Les ordinateurs sont-ils venus à bout de l'homme aux échecs ?
» Comprendre les bits
» Comprendre le fonctionnement d'un Système d'exploitation
» Comprendre : Google Adsense
» Les ordinateurs sont-ils venus à bout de l'homme aux échecs ?
» Comprendre les bits
» Comprendre le fonctionnement d'un Système d'exploitation
» Comprendre : Google Adsense
Forum INFOMATH :: Enseignement de l'informatique :: INFO - Supérieur (Etudiants et Professionnels) :: Cours, Tutorials, Dossiers
Page 1 sur 1
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum