Cours Assembleur

Cours pour débuter avec l’assembleur INTEL


Télécharger Cours pour débuter avec l’assembleur INTEL

★★★★★★★★★★3.5 étoiles sur 5 basé sur 1 votes.
Votez ce document:

Télécharger aussi :


Cours pour débuter avec l’assembleur INTEL

1 Rappel : les systèmes de numération

1.1 Le binaire

On a choisis d'associer au bit le plus à droite d'un paquet de bit, aussi appelé bit de poids faible, la valeur 2^0 = 1, le bit venant à sa gauche représentant une valeur deux fois plus élevée, 2^1 = 2 ainsi de suite....jusqu'au bit le plus à gauche, aussi appelé le bit de poids fort. à la valeur binaire 1011 correspond donc la valeur décimale 11.

Par la suite pour éviter, tout malentendu on notera les valeurs binaires avec un % devant, 11 (décimal) s'écrira donc %1011 en binaire.

Cette notation est utilisée dans de nombreux langages de programmation ( pour l'assembleur, on fera suivre la valeur binaire de b , 11 (décimal) s'écrira 1011b).

 Si on regroupe 8 variables logiques ( 8 bits) on pourra représenter des nombres qui évolueront entre:

- %00000000 = 0 en décimal

- %11111111 = 128+64+32+16+8+4+2+1 = 255 en décimal.

Nous verrons par la suite les problèmes qui apparaissent pour coder les nombres négatifs.

Cours pour débuter avec l’assembleur INTEL

Table des matières :

Chapitre 1 1

1 RAPPEL : LES SYSTÈMES DE NUMÉRATION       1

1.1 Le binaire                                           .1

1.2 L'hexadécimal                                       2

1.3 Opérations Arithmétiques                             2

1.3.1 L'addition :                                      .2

1.3.2 Les dépassements dans l'addition:                  .3

1.3.3 Les dépassements dans la multiplication:              3

1.4 Les nombres négatifs                                .4

1.5 Les opérations arithmétiques avec les nombres négatifs   4

1.5.1 L'addition                                       .4

1.6 Les opérations logiques                              .5

1.6.1 Le "ET" logique                                  5

1.6.2 Le "OU" logique (aussi appelé ou inclusif)             5

1.6.3 Le "OU EXCLUSIF"                              .5

1.6.4 Le "NON" aussi appelé complémentation             .5

1.7 Les décalages binaires                               .5

1.7.1 Le décalage binaire gauche                        5

1.7.2 Le décalage binaire droit                          .6

1.7.3 A quoi ça sert ?                                  .7

1.7.4 La rotation binaire gauche                         .7

1.7.5 La rotation binaire droite                           .7

Chapitre 2 9

2 INTRODUCTION : LES MICROPROCESSEURS INTEL 9

2.1 La mémoire                                         9

2.2 Des segments pour se positionner dans la mémoire     .10

2.3 Un microprocesseur pour agir sur la mémoire           .11

2.3.1 LES BUS DE COMMUNICATION                   11

2.3.1.1 Le bus d'adresse                                 11

2.3.1.2 Le bus de données                                11

2.3.1.3 Le bus de contrôle                                11

2.3.1.4 Mécanisme d'accès mémoire                        11

2.3.1.5 Temps d'accès mémoire                           11

2.3.2 LA MEMOIRE CACHE                           12

2.3.2.1 La mémoire cache interne                        . 12

2.3.2.2 La mémoire cache externe                         13

2.4 Les registres                                       .14

2.4.1 Les registres généraux                           .14

2.4.1.1 Le registre EAX                                 14

2.4.1.2 Les registres EBX, ECX, EDX                    . 15

2.4.2 Les registres de segments                        15

2.4.3 Rôle des registres de segments                    .15

2.4.4 Les registres d'index                            .16

2.4.5 Les différents registres d’index (sur 32 bits):          16



2.4.6 Les registres de travail du microprocesseur          .16

2.4.6.1 EIP                                           16

2.4.6.2 Registre de flag (32 bits à partir du 386)               17

2.4.7 La pile                                        .17

2.5 Assembleur et langage machine                      .17

Chapitre 3 19

3 LA MÉMOIRE EN DÉTAIL                      .19

3.1 Segmentation de la mémoire                         .19

3.2 Les emplacements réservés                          20

3.3 La pile                                             20

3.4 Les modes d’adressage                             .21

3.4.1 Accès aux instructions                           21

3.4.2 Accès aux données                              21

3.4.3 Adressage immédiat                            . 22

3.4.4 Adressage direct registre                         . 22

3.4.5 Adressage direct mémoire (déplacement)            . 22

3.4.6 Adressage indirect mémoire                      . 23

3.4.6.1 Base ou index                                  . 23

3.4.6.2 Base et index                                  . 23

3.4.6.3 Base ou index + déplacement                      . 24

3.4.6.4 Base + index + déplacement                      . 24

Chapitre 4 27

4 LE JEU D’INSTRUCTIONS                      . 27

4.1 Généralité                                          27

4.2 Les instructions de base                             . 28

4.2.1 L’identificateur                                   28

4.2.2 MOV                                         . 28

4.3 Les instructions de pile                              . 28

4.3.1 PUSH                                         28

4.3.2 POP                                           28

4.3.3 PUSHA (PUSH All)                             . 28

4.3.4 POPA (POP All) :                                28

4.3.5 PUSHAD (PUSH All) :                             28

4.3.6 POPAD (POP All)                              . 29

4.4 Les instructions sur le registre indicateur                29

4.4.1 PUSHF (PUSH Flag)                             29

4.4.2 POPF (POP Flag)                              . 29

4.4.3 LAHF (Load AH from Flag)                       . 29

4.4.4 SAHF (Store AH into Flag)                        . 29

4.5 Les instructions de transferts accumulateur              29

4.5.1 IN (INput from port):                              29

4.5.2 OUT (OUTput to port)                           . 29

4.5.3 XLAT                                        . 29

4.6 Les instructions arithmétiques                       . 29

4.6.1 L’addition                                       29

4.6.1.1 ADD                                         . 29

4.6.1.2 ADC (Add with Carry)                          . 30

4.6.1.3 INC (INCrement)                                30



4.6.2 La soustraction                                 . 30

4.6.2.1 SUB (SUBstract)                                 30

4.6.2.2 SBB (SUBstract with Below)                      30

4.6.2.3 DEC (DECrement)                               30

4.6.3 La multiplication                                 31

4.6.3.1 MUL (MULtiply)                                31

4.6.3.2 IMUL (signed Integer MULtiply)                   .31

4.6.4 La division                                    . 31

4.6.4.1 DIV (DIVise)                                   31

4.6.4.2 IDIV (signed Integer DIVision)                     31

4.6.4.3 CMP (CoMPare)                                .31

4.6.5 Ajustement de données                           32

4.6.5.1 AAA (Ascii Adjust for Addition)                   32

4.6.5.2 AAS (Ascii Adjust for Subtraction)                  32

4.6.5.3 AAM (Ascii Adjust for Multiplication)               32

4.6.5.4 AAD (Ascii Adjust for Division)                    32

4.6.6 Conversion de type                             . 32

4.6.6.1 CBW (Convert Byte to Word)                      32

4.6.6.2 CWD (Convert Word to Doubleword)               33

4.6.6.3 CWDE (Convert Word to Extended Doubleword)      33

4.6.6.4 CDQ (Convert Doubleword to Quadword)            .33

4.6.6.5 NEG (NEGation):                               34

4.7 Les instructions logiques                             34

4.7.1 AND (ET logique)                               . 34

4.7.2 OR (OU logique)                               . 34

4.7.3 XOR (OU eXclusif)                              . 34

4.7.4 TEST (TEST for bit pattern)                       . 35

4.7.5 NOT                                           35

4.8 Les instructions de décalages et de rotations            35

4.8.1 SHR (SHift Right)                               . 35

4.8.2 SHL (SHift Left)                                  35

4.8.3 SAR (Shift Arithmetic Right)                       . 35

4.8.4 SAL (Shift Arithmetic Left)                          35

4.8.5 ROR (ROtate Right)                             . 35

4.8.6 ROL (ROtate Left)                                36

4.8.7 RCR (Rotate trought Cary Right)                   . 36

4.8.8 RCL (Rotate trought Cary Left)                      36

4.9 Ruptures de séquence                              . 36

4.9.1 Les branchements inconditionnels                 . 36

4.9.1.1 JMP (JUmP)                                   36

4.9.1.2 INT (INTerrupt)                                 36

4.9.2 Les branchements conditionnels                    37

4.9.2.1 Les tests d’indicateurs                            .37

4.9.2.2 Les test de nombres non signés                     .37

4.9.2.3 Les tests de nombres signés                       .38

4.9.3 Les boucles                                    .38

4.9.3.1 LOOP                                         38

4.9.3.2 LOOPE (LOOP while Equal)                      38

4.9.3.3 LOOPNE                                     .38



4.9.4 Les appels ou retours de sous-programmes           39

4.9.4.1 PROC (PROCedure)                             .39

4.9.4.2 ENDP (END Procedure)                          .39

4.9.4.3 CALL                                         39

4.9.4.4 RET (RETurn)                                 .39

4.9.4.5 IRET (Interrupt RETurn)                         .39

4.10 Les opérations sur les chaînes                        .39

4.10.1 CLD (CLear Direction flag)                      .39

4.10.2 STD (STore Direction flag)                      .40

4.10.3 MOVSB (MOVe String Byte)                      40

4.10.4 MOVSW (MOVe String Word)                    40

4.10.5 MOVSD (MOVe String Double)                   40

4.10.6 LODSB (LOaD String Byte)                      40

4.10.7 LODSW (LOaD String Word)                     .40

4.10.8 LODSD (LOaD String Double)                    .40

4.10.9 CMPSB (CoMPare String Byte)                   .40

4.10.10 CMPSW (CoMPare String Word)                 .41

4.10.11 CMPSD (CoMPare String Double)                .41

4.10.12 STOSB (STOre String Byte)                      41

4.10.13 STOSW (STOre String Word)                    41

4.10.14 STOSD (STOre String Double)                   41

4.10.15 REP (REPeat)                                 41

4.10.16 REPE (REPeat while Equal)                      42

4.10.17 REPNE (REPeat while Not Equal)                .42

4.10.18 REPZ (REPeat while Zero)                       42

4.10.19 REPNZ (REPeat while Not Zero)                 .42

4.10.20 SCASB (SCAn String Byte)                      42

4.10.21 SCASW (SCAn String Word)                     .42

4.10.22 SCASD (SCAn String Double)                    .42

4.11 Les instructions de gestion des adresses               .42

4.11.1 LEA (Load Effective Address)                    42

4.11.2 LES (Load Extra Segment)                       43

4.11.3 LDS (Load Data Segment)                      .43

4.12 Déclaration de données                              43

4.12.1 DB (Define Byte)                               43

4.12.2 DW (Define Word)                             .43

4.12.3 DD (Define Double)                            43

4.12.4 DQ (Define Quadword)                          43

4.12.5 EQU (EQUivalent)                             43

Chapitre 5 45

5 EXEMPLES                        .          .45

5.1 Pour débuter                                       .45

5.2 Transfert de chaînes                                .46

5.3 Ecriture directe à l’écran                             46

5.4 Lecture de chaîne et affichage                        47

Cours pour débuter avec l’assembleur INTEL



701