gNewSense et Autres libertés
ANDRE Ani
Pierre Jourlin est maître de conférences en informatique à l'Université d'Avignon et des Pays de Vaucluse où il enseigne depuis plus de 10 ans. Ce livre est destiné à des étudiants de 1ère ou 2e année de Licence Informatique, n'ayant pas forcément acquis les principes fondamentaux de "structure des ordinateurs". Le langage assembleur décrit dans le livre concerne le jeu d'instructions des microprocesseurs les plus récents de la famille 80x86 (jusqu'aux instructions MMX). Le livre comprend un grand nombre d'exercices corrigés et de travaux pratiques compatibles avec une distribution GNU/Linux 64 bits.
Table des matières
Avant-Propos 5
1. Introduction 5
1.1. Petits rappels sur la structure des ordinateurs 6
1.3. Qu'est-ce qu'un programme en assembleur ? 10
2. Arithmétique entière 15
2.1. Un mot sur les registres généraux et leur capacité 15
2.2. Entiers signés et non signés 17
2.3. Débordements 21
3. Instructions de branchement 24
3.1. Le registre RIP (Re-Extended Instruction Pointer) 24
3.2. Branchement inconditionnel : instruction jmp (de « jump » : sauter) 25
3.3. Branchements conditionnels 26
4. Structure des données : pointeurs, tableaux, matrices, etc. 28
4.1. Registres « pointeurs » 28
4.2. Mode d'adressage « indirect » 29
4.3 Mode d'adressage « indirect indexé » 30
4.4. Indexations complexes 32
5. Comparaisons et autres branchements conditionnels 34
6. Équivalents des structures algorithmiques avancées 39
7. Utilisation de la pile 42
8. Procédures 44
8.1 Les instructions call et ret 44
8.2 Les interruptions et les exceptions 48
9. Autres instructions d'arithmétique entière 52
9.1 Multiplication et division sur des entiers non signés 52
9.1.1. Multiplication non signée 52
9.1.2. Division non signée 53
9.2 Multiplication et division sur des entiers signés 54
9.2.1 Multiplication signée 54
9.2.2 Division signée 55
10. Opérateurs logiques 55
11. Calculs en virgule flottante 57
11.1 Introduction 57
11.2. La norme IEEE 754 58
11.3 Les registres du processeur à virgule flottante (x87) 60
11.4 Principales instructions de calcul 61
11.5 Comparaisons et branchements conditionnels 63
12. Parallélisme (MMX, SSE, 3DNow!) 64
12.1 Registres MMX 65
12.2 Instructions MMX 66
13. Bibliographie 69
14. Exercices 70
14.1 Capacité des cases mémoires (valide section 1.1.) 70
14.2. Poids des chiffres, parties hautes et basses d'un nombre (valide section 1.1.1) 71
14.3 À combien de cases mémoires distinctes peut-on accéder avec des adresses hexadécimales allant de 0 à FFFF ? 72
14.4 Opérandes (valide section 1.3) 73
14.5 Registres généraux (section 2.1) 73
14.6 Arithmétique entière (sections 2.2 et 2.3) 75
14.7 La pile (section 7) 78
15. Travaux dirigés 80
15.1. Instructions de copie 80
15.2. Instructions additives 81
15.3. Sauts conditionnels et inconditionnels (chapitre 3 du cours) 83
15.4. Adressage indirect (section 4.2 du cours) 86
15.5. Adressage indirect indexé ( 4.3) 89
15.6. Indexations complexes (section 4.4 du cours) 92
15.7. Algorithme de tri « Bulle » (chapitres 5 et 6 — comparaisons et structures). 94
15.8. Tri « bulle » procédural (sections 7 et 8). 98
15.9. Plus Petit Commun Multiple (Chapitre 8.2, 9 et 10) 101
15.10. Calcul arithmétique flottant (chapitre 11) 110
15.11. Produit scalaire via instructions SIMD. 111
16. Travaux pratiques : Programmer en Assembleur sous GNU/Linux 114
16.1 Premiers pas 114
16.2 Programmes corrigés 116
Pierre Jourlin est maître de conférences en informatique à l'Université d'Avignon et des Pays de Vaucluse depuis septembre 2000.