4
Sommaire Structure d’un micro-ordinateur ....... 15 1.1 Une machine électronique ....................... 17 1.2 Données analogiques et données binaires ............... 19 1.3 Les bus ................................. 21 1.4 Les horloges ............................... 24 1.5 Traitements sur les bits et les bus .................... 26 1.6 La mémoire ............................... 36 1.7 Le programme ............................. 39 1.8 Les entrées/sorties ............................ 40 1.9 Le démarrage .............................. 42 1.10 Les interruptions ............................ 43 L’architecture IA ................. 49 2.1 Le 8086/8088 .............................. 52 Le circuit intégré 8086/8088 ....................... 54 Structure interne ............................ 60 2.2 Du 8086 aux Pentium 4, Athlon XP..................... 77 2.3 L’architecture IA-32 actuelle ...................... 88 2.4 Les contraintes du multitâche ...................... 89 Niveaux de privilège ........................... 92 Mémoire ................................. 92 Commutation des tâches ........................ 93 Le système d’exploitation ........................ 94 2.5 Modèle du programmeur système ................... 95 2.6 Modèle du programmeur d’applications ................ 97 Modes de fonctionnement ....................... 97 2.7 Les architectures 64 bits – AMD64 .................. 103 DOS et DEBUG, premiers programmes .. 107 3.1 MS-DOS dans le PC sous Windows .................. 109 Pour lancer des sessions DOS sous Windows ............. 110 Pour lancer DOS au boot ....................... 114 3.2 Présentation de DEBUG ....................... 116 3.3 Prise en main de DEBUG ....................... 121 3.4 Écrire et tester kb_codes.com ..................... 140 Généralités sur les interruptions du BIOS et du DOS ........ 140 Cahier des charges ........................... 145 Analyse ................................. 146

Structure d’un micro-ordinateur 15 L’architecture IA 49 · Les classes et les types d’opérandes – Opérateurs .....621 Fonctions et procédures .....626 12.5 Annexe E - Cross-assembleurs

Embed Size (px)

Citation preview

Sommaire

Structure d’un micro-ordinateur . . . . . . . 15

1.1 Une machine électronique . . . . . . . . . . . . . . . . . . . . . . . 171.2 Données analogiques et données binaires . . . . . . . . . . . . . . . 191.3 Les bus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 211.4 Les horloges . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 241.5 Traitements sur les bits et les bus . . . . . . . . . . . . . . . . . . . . 261.6 La mémoire . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 361.7 Le programme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 391.8 Les entrées/sorties . . . . . . . . . . . . . . . . . . . . . . . . . . . . 401.9 Le démarrage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 421.10 Les interruptions . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43

L’architecture IA . . . . . . . . . . . . . . . . . 49

2.1 Le 8086/8088 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52Le circuit intégré 8086/8088 . . . . . . . . . . . . . . . . . . . . . . . 54Structure interne . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60

2.2 Du 8086 aux Pentium 4, Athlon XP... . . . . . . . . . . . . . . . . . . 772.3 L’architecture IA-32 actuelle . . . . . . . . . . . . . . . . . . . . . . 882.4 Les contraintes du multitâche . . . . . . . . . . . . . . . . . . . . . . 89

Niveaux de privilège . . . . . . . . . . . . . . . . . . . . . . . . . . . 92Mémoire . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92Commutation des tâches . . . . . . . . . . . . . . . . . . . . . . . . 93Le système d’exploitation . . . . . . . . . . . . . . . . . . . . . . . . 94

2.5 Modèle du programmeur système . . . . . . . . . . . . . . . . . . . 952.6 Modèle du programmeur d’applications . . . . . . . . . . . . . . . . 97

Modes de fonctionnement . . . . . . . . . . . . . . . . . . . . . . . 972.7 Les architectures 64 bits – AMD64 . . . . . . . . . . . . . . . . . . 103

DOS et DEBUG, premiers programmes . . 107

3.1 MS-DOS dans le PC sous Windows . . . . . . . . . . . . . . . . . . 109Pour lancer des sessions DOS sous Windows . . . . . . . . . . . . . 110Pour lancer DOS au boot . . . . . . . . . . . . . . . . . . . . . . . 114

3.2 Présentation de DEBUG . . . . . . . . . . . . . . . . . . . . . . . 1163.3 Prise en main de DEBUG . . . . . . . . . . . . . . . . . . . . . . . 1213.4 Écrire et tester kb_codes.com . . . . . . . . . . . . . . . . . . . . . 140

Généralités sur les interruptions du BIOS et du DOS . . . . . . . . 140Cahier des charges . . . . . . . . . . . . . . . . . . . . . . . . . . . 145Analyse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 146

Premier codage . . . . . . . . . . . . . . . . . . . . . . . . . . . . 149Le sous-programme SP2 . . . . . . . . . . . . . . . . . . . . . . . . 151Amélioration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 154

3.5 Quelques exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . 154Énoncés . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 155Réponses . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 156

Assembleurs autonomes . . . . . . . . . . . . 159

4.1 Fabrication d’un programme . . . . . . . . . . . . . . . . . . . . . 1644.2 L’offre : quel assembleur ? . . . . . . . . . . . . . . . . . . . . . . . 1724.3 MS-DOS : le problème du PATH . . . . . . . . . . . . . . . . . . . 1754.4 Application d’essai faire_boot, première étape . . . . . . . . . . . . 1824.5 Utilisation d’un éditeur orienté programmation . . . . . . . . . . . . 1894.6 faire_boot, suite et fin . . . . . . . . . . . . . . . . . . . . . . . . . 1984.7 Utilisation de l’EDI de Visual C++ . . . . . . . . . . . . . . . . . . 211

Compiler des modules assembleur 32 bits au sein d’un projet C/C++ . 211Assembler des programmes assembleur 32 bits avec VS . . . . . . . 215Assembler des programmes assembleur 16 bits avec VS . . . . . . . 217

4.8 Les fichiers MAKE . . . . . . . . . . . . . . . . . . . . . . . . . . 217Les fichiers de type MAKE.BAT ou MAKEIT.BAT . . . . . . . . . 218Les utilitaires NMAKE, NMAKER et MAKE . . . . . . . . . . . . 220

MASM / MASM32 . . . . . . . . . . . . . . . . 231

5.1 Installer une distribution MASM . . . . . . . . . . . . . . . . . . . 233Installation de MASM 6.11 . . . . . . . . . . . . . . . . . . . . . . 236Présentation et installation de MASM32 . . . . . . . . . . . . . . . 242

5.2 Le code source, généralités . . . . . . . . . . . . . . . . . . . . . . 2505.3 Génération et lecture des listings . . . . . . . . . . . . . . . . . . . 256

Génération d’un listing . . . . . . . . . . . . . . . . . . . . . . . . 257Contenu du fichier listing . . . . . . . . . . . . . . . . . . . . . . . 260

Assembleurs intégrés . . . . . . . . . . . . . 269

6.1 Les assembleurs intégrés . . . . . . . . . . . . . . . . . . . . . . . . 2726.2 Les avantages de l’assembleur intégré . . . . . . . . . . . . . . . . . 2796.3 Le marché – Delphi 6 . . . . . . . . . . . . . . . . . . . . . . . . . 282

Prise en main de Delphi 6 Personnel . . . . . . . . . . . . . . . . . 284L’aide . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 297Débogueurs et fenêtres CPU . . . . . . . . . . . . . . . . . . . . . 299

6.4 BASM, l’assembleur de Delphi . . . . . . . . . . . . . . . . . . . . 3096.5 Application : une fonction IntToBin . . . . . . . . . . . . . . . . . . 3116.6 Autres environnements . . . . . . . . . . . . . . . . . . . . . . . . 320

Sommaire

Pile, cadres de pile et sous-programmes . 3237.1 La pile . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3257.2 Les instructions PUSH et POP . . . . . . . . . . . . . . . . . . . . 3297.3 Les instructions CALL et RET, sous-programmes simples . . . . . . 3377.4 Variables locales . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3417.5 Les cadres de pile : ENTER et LEAVE . . . . . . . . . . . . . . . . 346

L’instruction ENTER . . . . . . . . . . . . . . . . . . . . . . . . . 347

Le jeu d’instructions . . . . . . . . . . . . . . 3538.1 Présentation générale des instructions . . . . . . . . . . . . . . . . . 355

Structure d’une instruction . . . . . . . . . . . . . . . . . . . . . . 356Les modes d’adressage . . . . . . . . . . . . . . . . . . . . . . . . . 361Les fiches d’instruction . . . . . . . . . . . . . . . . . . . . . . . . 369Les indicateurs d’état . . . . . . . . . . . . . . . . . . . . . . . . . 374Les codes de conditions . . . . . . . . . . . . . . . . . . . . . . . . 377

8.2 Le jeu d’instructions . . . . . . . . . . . . . . . . . . . . . . . . . . 380Mouvements des données . . . . . . . . . . . . . . . . . . . . . . . 381Transtypages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 395Flux du programme . . . . . . . . . . . . . . . . . . . . . . . . . . 400Manipulations de la pile . . . . . . . . . . . . . . . . . . . . . . . . 409Manipulations des flags . . . . . . . . . . . . . . . . . . . . . . . . 409Calcul binaire . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 413Calcul décimal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 425Opérations sur les bits . . . . . . . . . . . . . . . . . . . . . . . . . 431Entrées/sorties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 445Chaînes et tableaux . . . . . . . . . . . . . . . . . . . . . . . . . . 446Instructions diverses . . . . . . . . . . . . . . . . . . . . . . . . . . 453

La FPU . . . . . . . . . . . . . . . . . . . . . . . 4699.1 Nombres réels et virgule flottante . . . . . . . . . . . . . . . . . . . 4729.2 Représentation des réels en informatique . . . . . . . . . . . . . . . 4749.3 La FPU . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 482

Les types de données . . . . . . . . . . . . . . . . . . . . . . . . . 482La structure de la FPU . . . . . . . . . . . . . . . . . . . . . . . . 484Les instructions FPU . . . . . . . . . . . . . . . . . . . . . . . . . . 487

9.4 Les données FPU des compilateurs et assembleurs . . . . . . . . . . 4949.5 Travaux pratiques . . . . . . . . . . . . . . . . . . . . . . . . . . . 497

Technologies MMX 3DNow! SSE . . . . . . 50510.1 Identification . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50810.2 MMX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 513

Registres . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 513Types de données . . . . . . . . . . . . . . . . . . . . . . . . . . . 514Arithmétique par saturation . . . . . . . . . . . . . . . . . . . . . . 516Jeu d’instructions . . . . . . . . . . . . . . . . . . . . . . . . . . . 518

Sommaire

10.3 3DNow! . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 524Registres et types de données . . . . . . . . . . . . . . . . . . . . . 526Jeu d’instructions . . . . . . . . . . . . . . . . . . . . . . . . . . . 527Extensions aux jeux d’instructions MMX/3DNow! . . . . . . . . . . 533

10.4 Fenêtres de débogage FPU . . . . . . . . . . . . . . . . . . . . . . 54010.5 Technologies SSE . . . . . . . . . . . . . . . . . . . . . . . . . . . 543

Optimisation et chronométrage . . . . . . . 54711.1 Chronométrage du code . . . . . . . . . . . . . . . . . . . . . . . . 551

L’instruction RDTSC et le registre de chronométrage TSC . . . . . . 551Limites de RDTSC . . . . . . . . . . . . . . . . . . . . . . . . . . 554Stratégies de chronométrage . . . . . . . . . . . . . . . . . . . . . 557

11.2 Expérimentations . . . . . . . . . . . . . . . . . . . . . . . . . . . 560Sous Delphi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 560

11.3 Alignement des données . . . . . . . . . . . . . . . . . . . . . . . . 56911.4 Mesure de la fréquence du processeur . . . . . . . . . . . . . . . . 572

Annexes. . . . . . . . . . . . . . . . . . . . . . . 57712.1 Annexe A - La numération . . . . . . . . . . . . . . . . . . . . . . 579

Décimal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 579Binaire . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 582Hexadécimal, octal . . . . . . . . . . . . . . . . . . . . . . . . . . . 584Les entiers négatifs . . . . . . . . . . . . . . . . . . . . . . . . . . 588La saisie et l’expression orale . . . . . . . . . . . . . . . . . . . . . 594Les conversions . . . . . . . . . . . . . . . . . . . . . . . . . . . . 596Les outils . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 598

12.2 Annexe B - Notions de logique . . . . . . . . . . . . . . . . . . . . 59912.3 Annexe C – Little Endian, Big Endian, implantation des données en

mémoire . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60712.4 Annexe D - BASM, l’assembleur de Delphi . . . . . . . . . . . . . . 615

Syntaxe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 615Les classes et les types d’opérandes – Opérateurs . . . . . . . . . . . 621Fonctions et procédures . . . . . . . . . . . . . . . . . . . . . . . . 626

12.5 Annexe E - Cross-assembleurs et microcontrôleurs . . . . . . . . . . 632

Index. . . . . . . . . . . . . . . . . . . . . . . . . 643

Index des instructions . . . . . . . . . . . . . 655Instructions standards . . . . . . . . . . . . . . . . . . . . . . . . . 657Instructions FPU . . . . . . . . . . . . . . . . . . . . . . . . . . . . 660Instructions MMX/3DNow ! . . . . . . . . . . . . . . . . . . . . . . 661Instructions SSE . . . . . . . . . . . . . . . . . . . . . . . . . . . . 662Instructions (Index Général) . . . . . . . . . . . . . . . . . . . . . . 663

Sommaire