Cours assembleur pour debutant
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.
EXEMPLE: Cours informatique
Puissance de 2 associées 3 2 1 0
Valeur correspondante 2^ 3= 8 2^ 2= 4 2^ 1= 2 2^ 0= 1
Une valeur binaire
Vaut alors
1 Cours assembleur pour debutant en PDF
(1* 8)
0
(0*4)
Cours assembleur pour debutant en PDF1
(1*2) Cours assembleur pour debutant en PDF
1
(1*1)
==> 8 + 2 + 1 = 11
à 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.
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.
EXEMPLE:
Puissance de 2 associées 3 2 1 0
Valeur correspondante 2^ 3= 8 2^ 2= 4 2^ 1= 2 2^ 0= 1
Une valeur binaire
Vaut alors
1
(1* 8)
0
(0*4)
1
(1*2)
1
(1*1)
==> 8 + 2 + 1 = 11
à 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.
1.2 L'hexadécimal
Tous comme on peut dire que le binaire constitue un système de codage en base 2 ( 0
ou 1 cela fait deux états possibles ), le décimal un système en base 10 ( 0 1 2 3 4 5 6 7 8 9 =>
10 états possibles ) vous l'aurez compris l'hexadécimal constitue un système base 16, pour
représenter les 10 première valeurs, la notations est identique à celle du système décimal et
pour les 6 autres on prend les 6 premières lettres de l'alphabet.
Pour des soucis de clarté on fait suivre toute notation hexadécimale de la lettre h
( convention de l'assembleur, pour le langage C il faudra faire précéder la notation de 0x ,
dans le basic on fait précéder la notation de $ ou de #$ dans certains basic 8 bits), ce qui
donne
Cours assembleur pour debutant en PDF
1.2 L'hexadécimal Cours assembleur pour debutant en PDF
Tous comme on peut dire que le binaire constitue un système de codage en base 2 ( 0
ou 1 cela fait deux états possibles ), le décimal un système en base 10 ( 0 1 2 3 4 5 6 7 8 9 =>
10 états possibles ) vous l'aurez compris l'hexadécimal constitue un système base 16, pour
représenter les 10 première valeurs, la notations est identique à celle du système décimal et
pour les 6 autres on prend les 6 premières lettres de l'alphabet.
Pour des soucis de clarté on fait suivre toute notation hexadécimale de la lettre h
( convention de l'assembleur, pour le langage C il faudra faire précéder la notation de 0x ,
dans le basic on fait précéder la notation de $ ou de #$ dans certains basic 8 bits), ce qui
donne
1- Rappel : les systèmes de numération 6
1 1Le binaire 6
1 2 L'hexadécimal 6
1 3 Opérations Arithmétiques 7
1 3 1 L'addition 7
Cours assembleur pour debutant en PDF
1 3 2 Les dépassements dans l'addition 8
1 3 3 Les dépassements dans la multiplication 8
1 4 Les nombres négatifs 9
1 5 Les opérations arithmétiques avec les nombres négatifs 10
1 5 1 L'addition 10
1 6 Les opérations logiques 10
1 6 1 Le "ET" logique 10
1 6 2 Le "OU" logique (aussi appelé ou inclusif) 10
1 6 3 Le "OU EXCLUSIF" 11
1 6 4 Le "NON" aussi appelé complémentation 11
1 7 Les décalages binaires 11
1 7 1 Le décalage binaire gauche 11
1 7 2 Le décalage binaire droit 12
1 7 3 A quoi ça sert ? 13
1 7 4 La rotation binaire gauche 14
1 7 5 La rotation binaire droite 14
2- Introduction : les microprocesseurs INTEL 15
2 1 La mémoire 15 Cours assembleur pour debutant en PDF
2 2 Des segments pour se positionner dans la mémoire 15
2 3 Un microprocesseur pour agir sur la mémoire 16
2 3 1 Les Bus De Communication 16
2 3 1 1 Le bus d'adresse 17
2 3 1 2 Le bus de données 17
2 3 1 3 Le bus de contrôle 17
2 3 1 4 Mécanisme d'accès mémoire 17
2 3 1 5 Temps d'accès mémoire 17
Cours informatique
2 3 2 La Mémoire Cache 18
2 3 2 1 La mémoire cache interne 18
2 3 2 2 La mémoire cache externe 19
2 4 Les registres 20
2 4 1 Les registres généraux 21
Cours assembleur pour debutant en PDF
2 4 1 1 Le registre EAX 21
2 4 1 2 Les registres EBX, ECX, EDX 22
2 4 2 Les registres de segments 22
2 4 3 Rôle des registres de segments 22
2 4 4 Les registres d'index 23
2 4 5 Les différents registres d’index (sur 32 bits) 23
2 4 6 Les registres de travail du microprocesseur 24
2 4 6 1 EIP 24
2 4 6 2 Registre de flag (32 bits à partir du 386) 24
2 4 7 La pile 24
2 5 Assembleur et langage machine 25
3- La mémoire en détail 27
3 1 Segmentation de la mémoire 27
3 2 Les emplacements réservés 27
3 3 La pile 28
2 Cours assembleur pour debutant en PDF
3 4 Les modes d’adressage 29
3 4 1 Accès aux instructions 30
3 4 2 Accès aux données 30
3 4 3 Adressage immédiat 30
3 4 4 Adressage direct registre 31
3 4 5 Adressage direct mémoire (déplacement) 31
3 4 6 Adressage indirect mémoire 32
3 4 6 1 Base ou index 32
3 4 6 2 Base et index 33
3 4 6 3 Base ou index + déplacement 34
3 4 6 4 Base + index + déplacement 35
4- LE JEU D’INSTRUCTIONS 36
4 1 Généralité 36
4 2 Les instructions de base 36
4 2 1 L’identificateur 36
4 2 2 MOV 36
4 3 Les instructions de pile 37
4 3 1 PUSH 37
4 3 2 POP 37
4 3 3 PUSHA (PUSH All) 37
4 3 4 POPA (POP All) 37
4 3 5 PUSHAD (PUSH All) 37
4 3 6 POPAD (POP All) 38
4 4 Les instructions sur le registre indicateur 38
4 4 1 PUSHF (PUSH Flag) 38
4 4 2 POPF (POP Flag) 38
4 4 3 LAHF (Load AH from Flag) 38
4 4 4 SAHF (Store AH into Flag) 38
4 5 Les instructions de transferts accumulateur 38
4 5 1 IN (INput from port) 38
4 5 2 OUT (OUTput to port) 38
4 5 3 XLAT 38
4 6 Les instructions arithmétiques 39
4 6 1 L’addition 39
4 6 1 1 ADD 39 Cours assembleur pour debutant en PDF
4 6 1 2 ADC (Add with Carry) 39
4 6 1 3 INC (INCrement) 39
4 6 2 La soustraction 40
4 6 2 1 SUB (SUBstract) 40
4 6 2 2 SBB (SUBstract with Below) 40
4 6 2 3 DEC (DECrement) 40
4 6 3 La multiplication 40
4 6 3 1 MUL (MULtiply) 40
4 6 3 2 IMUL (signed Integer MULtiply) 41
4 6 4 La division 41
4 6 4 1 DIV (DIVise) 41
4 6 4 2 IDIV (signed Integer DIVision) 41
4 6 4 3 CMP (CoMPare) 41
4 6 5 Ajustement de données 42
4 6 5 1 AAA (Ascii Adjust for Addition) 42
4 6 5 2 AAS (Ascii Adjust for Subtraction) 42
4 6 5 3 AAM (Ascii Adjust for Multiplication) 42
3
4 6 5 4 AAD (Ascii Adjust for Division) 42
4 6 6 Conversion de type 43
4 6 6 1 CBW (Convert Byte to Word) 43
4 6 6 2 CWD (Convert Word to Doubleword) 43
4 6 6 3 CWDE (Convert Word to Extended Doubleword) 43
4 7 Les instructions logiques 44
4 7 1 AND (ET logique) 44
4 7 2 OR (OU logique) 45
4 7 3 XOR (OU eXclusif) 45
4 7 4 TEST (TEST for bit pattern) 45
4 7 5 NOT 45
4 8 Les instructions de décalages et de rotations 45
4 8 1 SHR (SHift Right) 46
4 8 2 SHL (SHift Left) 46
4 8 3 SAR (Shift Arithmetic Right) 46
4 8 4 SAL (Shift Arithmetic Left) 46
4 8 5 ROR (ROtate Right) 46
4 8 6 ROL (ROtate Left) 47
4 8 7 RCR (Rotate trought Cary Right) 47
4 8 8 RCL (Rotate trought Cary Left) 47
4 9 Ruptures de séquence 48
4 9 1 Les branchements inconditionnels 48
4 9 1 1 JMP (JUmP) 48
4 9 1 2 INT (INTerrupt) 48
4 9 2 Les branchements conditionnels 48
4 9 2 1 Les tests d’indicateurs 49
4 9 2 2 Les test de nombres non signés 49
4 9 2 3 Les tests de nombres signés 49
4 9 3 Les boucles 50
4 9 3 1 LOOP 50 Cours assembleur pour debutant en PDF
4 9 3 2 LOOPE (LOOP while Equal) 50
4 9 3 3 LOOPNE 51
4 9 4 Les appels ou retours de sous- programmes 51
4 9 4 1 PROC (PROCedure) 51
4 9 4 2 ENDP (END Procedure) 51
4 9 4 3 CALL 51
4 9 4 4 RET (RETurn) 52
4 9 4 5 IRET (Interrupt RETurn) 52
4 10 1 CLD (CLear Direction flag) 52
4 10 2 STD (STore Direction flag) 52
4 10 3 MOVSB (MOVe String Byte) 52
4 10 4 MOVSW (MOVe String Word) 53
4 10 5 MOVSD (MOVe String Double) 53
4 10 6 LODSB (LOaD String Byte) 53
4 10 7 LODSW (LOaD String Word) 53
4 10 8 LODSD (LOaD String Double) 53
4 10 9 CMPSB (CoMPare String Byte) 54
4 10 10 CMPSW (CoMPare String Word) 54
4 10 11 CMPSD (CoMPare String Double) 54
4 10 12 STOSB (STOre String Byte) 54
4 10 13 STOSW (STOre String Word) 54
4 10 14 STOSD (STOre String Double) 54
4 Cours assembleur pour debutant en PDF
4 10 15 REP (REPeat) 55
4 10 16 REPE (REPeat while Equal) 55
4 10 17 REPNE (REPeat while Not Equal) 55
4 10 18 REPZ (REPeat while Zero) 55
4 10 19 REPNZ (REPeat while Not Zero) 56
4 10 20 SCASB (SCAn String Byte) 56
4 10 21 SCASW (SCAn String Word) 56
4 10 22 SCASD (SCAn String Double) 56
4 11 Les instructions de gestion des adresses 56
4 11 1 LEA (Load Effective Address) 56
4 11 2 LES (Load Extra Segment) 56
4 11 3 LDS (Load Data Segment) 57
4 12 Déclaration de données 57
4 12 1 DB (Define Byte) 57
4 12 2 DW (Define Word) 57
4 12 3 DD (Define Double) 57
4 12 4 DQ (Define Quadword) 57
4 12 5 EQU (EQUivalent) 57
5- Exemples 58 Cours assembleur pour debutant en PDF
5 1 Pour débuter 58
5 2 Transfert de chaînes 58
5 3 Ecriture directe à l’écran 59
5 4 Lecture de chaîne et affichage 59