Vous êtes sur la page 1sur 15

Couche d’assemblage / Assembleur

• Utilisé dans la programmation de micro contrôleurs, le débogage, ou la


création de compilateurs et c'est le langage préféré de tous les
concepteurs
. de virus vu qu’il permet d’avoir des programmes très
optimisés et proches du matériel
Microprocesseurs && Microcontrôleurs
GI1 • Ce langage est directement lié au jeu d'instructions du microprocesseur,
pour coder en assembleur il faut connaitre :
– maîtrise parfaite de la structure interne du microprocesseur
fatma.abbes.benamor@gmail.com – maîtrise et connaissance complète de ses modes d'adressage
– connaissance du jeu complet d'instructions lié au micro processeur,
2020/2021
– connaissance de l'environnement hardware du microprocesseur, ou des
fonctionnalités offertes par le système d'exploitation

• Chaque microprocesseur possède sa propre architecture interne et donc


son propre langage d’assemblage
Janvier 2021
fatma abbes 2

Couche d’assemblage / Assembleur


Couche d’assemblage / Assembleur
8086
.

Janvier 2021 Janvier 2021


fatma abbes 3 fatma abbes 4
Couche d’assemblage / Assembleur Architecture de base d’un ordinateur
registres

Janvier 2021 Janvier 2021


fatma abbes 5 fatma abbes 6

Architecture 8086 Architecture 8086


INTEL a adopté dans
ses microprocesseurs
la notion de la
compatibilité
ascendante

Janvier 2021 Janvier 2021


fatma abbes 7 fatma abbes 8
Architecture 8086 Segmentation de la mémoire
• Les microprocesseurs x86 peuvent fonctionner - On dispose de 1 Mo de Ram, Il
sous deux modes : le mode réel et le mode nous faut combien de bits pour
adresser 1 mot mémoire de
protégé 1octet?
- En mode réel les bus d’adresse
et les registres sont sur 16 bits: ne
• En mode réel, le microprocesseur ne peut couvre pas la mémoire
adresser que 220 = 1 Mo=220 octets de - Une adresse absolue est
mémoire vive composée de:

Janvier 2021 Janvier 2021


fatma abbes 9 fatma abbes
10

8086: Registres 8086: Registres


• Registres généraux:
• Un registre sert à stocker les données nécessaires à
l'exécution d'un programme par le microprocesseur. – AX : Accumulateur utilisé pour les opérations
Ces registres sont tous de taille 16bits arithmétiques.
– BX : Base pour les adressages
• Les registres des processeurs INTEL se classent en – CX : Compteur pour le comptage
quatre catégorie
– Registres généraux – DX : Data pour les données
– Registres de segment G ces registres ont une taille de 16 bits
– Registres d'offset Exemple
« MOV AX, 1982 » Place l’entier 1982 dans AX
– Registre d’états
« ADD AX, 1983 » ajoute à AX le nombre 1983 et place le résultat
dans AX.
Janvier 2021 fatma abbes Janvier 2021
11 fatma abbes 12
8086: Registres 8086: Registres
Les Registres généraux (16 bits)
Exemple1 peuvent
« MOV AX, 1982 » Place l’entier 1982 dans AX être utilisés comme 2 registres 8
bits
« ADD AX, 1983 » ajoute à AX le nombre 1983 et Exemple:
place le résultat dans AX. mov dl, ’A’
mov ah, 02
int 21h
Exemple 2
mov cx,5
boucle : add ax,bx
loop boucle
Janvier 2021 Janvier 2021
fatma abbes 13 fatma abbes 14

8086: Registres 8086: Registres


• Registres de segment : • Registres d'offset :
– IP : Instruction Pointer associé à CS, il indique la prochaine
– Code Segment: CS : il contient l'adresse du instruction à exécuter, et ne peut être modifié.
segment de la mémoire de programme – BP : Base Pointer associé à SS pour accéder aux données de la
– Data Segment: DS : il contient l'adresse du pile lors d'appels d'un sous-programme.
– SP : Stack Pointer associé à SS, il indique l'adresse du dernier
segment de mémoire de données élément de la pile.
– Stack Segment: SS : il contient l'adresse du
segment de mémoire de la pile – SI : Source Index utilisé lors d'opérations sur chaînes de
caractères, associé à DS.
– Extra Segment: ES : segment supplémentaire pour – DI : Destination Index utilisé lors d'opérations sur les chaînes
adresser des données. de caractères, associé à DS. si utilisé comme index et à ES lors
de manipulation de chaînes.

Janvier 2021 Janvier 2021


fatma abbes 15 fatma abbes 16
8086: Registres La pile
G Une pile est une zone de mémoire particulière définie dans
son propre segment dont le registre est SS.

G Les piles offrent un nouveau moyen d’accéder à des


données en mémoire principale, qui est très utilisé pour
stocker temporairement des valeurs.
valeurs

G Le pointeur (SP) conserve l’adresse du sommet de la pile.

G la pile mémorise également les adresses d’appel et retour


de sous programmes

Janvier 2021
fatma abbes 17 Juin2020 fatma abbes 18

La pile La pile : fonctionnement


Exemple :
– PUSH AX ; empile le contenu de AX sur la pile
– POP BX ; dépile le 1er élément dans la pile dans BX

SP ← SP - 2
[SP] ← valeur du registre 16 bits.

Juin2020 fatma abbes 19 Juin2020 fatma abbes 20


La pile : fonctionnement La pile : fonctionnement
Exemple : Exemple :
– PUSH AX ; empile le contenu de AX sur la pile – PUSH AX ; empile le contenu de AX sur la pile
– POP BX ; dépile le 1er élément dans la pile dans BX – POP BX ; dépile le 1er élément dans la pile dans BX

Juin2020 fatma abbes 21 Juin2020 fatma abbes 22

8086: Registres 8086: Registres


• Exemples de Flags:
• Registre d’états (Flags):
– Un programme doit pouvoir faire des choix en fonction des données
dont il dispose (comparer des nombres, examiner leur signe, découvrir
si une erreur a été constatée, etc)
– CF (« Carry Flag ») est l’indicateur de retenue positionné à 1 si et
seulement si l’opération précédemment effectuée a produit une
retenue.

– Sert à contenir l’état de certaines opérations effectuées par le


processeur
– Chaque bit a un rôle qui lui est propre et que la valeur globale du
registre ne signifie rien
– Les notations CF, PF, AF, etc… ne sont pas reconnues par l’assembleur

Janvier 2021 Janvier 2021


fatma abbes 23 fatma abbes 24
8086: Registres 8086: Registres
• Exemples de Flags:
Exemple1
MOV CX, 5
– PF (« Parity Flag ») renseigne sur la parité du résultat. Il vaut 1 ssi ce DoLoop: . . .
dernier est pair. SUB CX, 1
– ZF (« Zero Flag ») passe à 1 ssi le résultat d’une opération est égal à zéro. JNZ DoLoop
– SF (« Sign Flag ») passe à 1 ssi le résultat d’une opération sur des nombres
signés est négatif. Exemple2
– OF (« Overflow Flag ») indique qu’un débordement s’est produit, la
CMP AL, 10
capacité de stockage a été dépassée
– …
JZ EqualToTen ; or JE!
… ; code pour le non égual
– Le programmeur peut lire chacun de ces flags et parfois modifier leur
valeur directement à l’aide d’instructions spéciaux EqualToTen:
• Exemple: CLC sans opérandes met à 0 l’indicateur CF
….

Janvier 2021 Janvier 2021


fatma abbes 25 fatma abbes 26

8086: Registres récapitulatif Types de fichiers

Janvier 2021 Janvier 2021


fatma abbes 27 fatma abbes 28
Exemple file .com Exemple file .EXE

Janvier 2021 Janvier 2021


fatma abbes 29 fatma abbes 30

Exemple file .EXE Exercice

Janvier 2021 Janvier 2021 fatma abbes


fatma abbes 31 32
Jeu d’instructions Jeu d’instructions

• L’instruction

• Instructions et opérandes sont stockés en mémoire


vive

• Taille totale d’une instruction (nombre de bits


nécessaires pour la représenter en mémoire)
dépend du type d’instructions et du type
d’opérandes
– Codé sur un nombre entier d’octets (1,2,3 ou octets)

Janvier 2021 Janvier 2021


fatma abbes 33 fatma abbes 34

Jeu d’instructions Jeu d’instructions


• Instructions d’affectation ou de transfert
– Mov, xchg,..
• Instructions arithmétiques (add, sub,mul, div..)
• Instructions logiques (not, and, or , xor)
– Instructions de rotation et de décalage
• Sxx: SHR, SHL…
• Rxx: ROL, ROR…
• Instruction de comparaison
– cmp
• Instructions de branchement
– Conditionnel (Jxx: JZ, JNA…)
– Inconditionnel (jmp , call)

Juin 2020 fatma abbes 35 Juin 2020 fatma abbes 36


Jeu d’instructions Jeu d’instructions

Janvier 2021 Janvier 2021


fatma abbes 37 fatma abbes 38

Jeu d’instructions Jeu d’instructions

Janvier 2021 Janvier 2021


fatma abbes 39 fatma abbes 40
Jeu d’instructions Jeu d’instructions
Correspondance entre instructions arithmétiques
et logiques du 8086 et les opérations du langage C

Janvier 2021 Janvier 2021


fatma abbes 41 fatma abbes 42

Déclaration des données Déclaration des données


• les variables sont déclarés à l’aide de directives. – Exemple
• Exemple : – vect DB 101 dup (16) ; 101 octets valant 16
data SEGMENT
– tttt DW 12 dup (?) ; 12 mots de 16 bits non
e DW 13 ; 2 octets initialises a 13
initialisés
s DW ? ; 2 octets non initialises
c DB ? ; 1 octet non initialise Constantes
ne DB -2 ; 1 octet initialise a -2 – La directive EQU (ou =) déclare une constante
t DW 0F00H ; en hexa
– C1 EQU ‘‘Texte’’
m DB 01000000b ; en binaire
data ENDS – C2 = 1002

Janvier 2021 Janvier 2021


fatma abbes 43 fatma abbes 44
Déclaration des données Déclaration des données
• l’assembleur à chaque variable une adresse
– on repère une variable grâce à leur noms
• nom de variables ainsi qu'étiquettes sont
composés de 31 caractères au maximum
commençant obligatoirement par une lettre:
– majuscules, minuscules, chiffres plus les 3
caractères @,? Et _

Janvier 2021 Janvier 2021


fatma abbes 45 fatma abbes 46

Exercice Les Boucles


If then else Boucle For
PGCD Si (ax==1) Bx=0
Répéter Bx=10 Pour k=0 jusqu’à 10 Test Switch
c = a/b, r = le reste de cette division entière Sinon Bx=bx+k
Si (r ≠0 ) { Switch (bx) {
a=b Bx=0 Case 1: ax=1;break;
b=r Cx=10 Case 2: ax=5;break;
fin si } Case 3: ax=10;break;
Boucle Repeat default: ax=0;break;}
jusqu’à (r =0 ) Bx=10
Boucle while
pgcd = b Répéter
bx=0
Donner le programme en assembleur de cet algorithme. bx=bx-1
Tant que bx>0 faire
Le programme possède trois variables : "a" (sur 16 bits), "b" jusqu’à bx<=10
(sur 8 bits) et "pgcd" (sur 8 bits). bx=bx+1

Janvier 2021 Janvier 2021


fatma abbes 47 fatma abbes 48
Les interruptions Les interruptions: mécanisme
• Un système informatique n’est utile que s’il communique
avec l’extérieur
• Le périphérique peut solliciter le processeur
• la sollicitation arrive de façon asynchrone
• Deux modes possibles :
– une méthode par scrutation (polling) permet d’interroger
régulièrement les périphériques afin de savoir si une
nouvelle donnée est présente (multiplier par le nombre de
périphériques)
– une méthode par interruption permet au périphérique lui
même de faire signe au processeur de sa présence
(demande à l’initiative du périphérique)

Janvier 2021 Janvier 2021


fatma abbes 49 fatma abbes 50

Les interruptions Les interruptions


Il existe deux types d’interruptions
• interruptions matérielles ou IRQ (Interrupt ReQuest)
– sont surtout utilisées pour la gestion des périphériques de
Les interruptions peuvent être déclenchées
l’ordinateur(arrivé d’un paquet de données sur une connexion – soit par un composant extérieur au processeur
réseau, frappe d’un caractère au clavier, modification de l’heure..)
requête d’interruption (Interrupt ReQuest, IRQ)
• interruptions logicielles
– appelées par des instructions spéciales à partir du code
– utilisée pour appeler les routines de service du BIOS ou celles du – soit par un périphérique interne au composant
système d'exploitation (cas des microcontrôleurs ou des DSP)
– Le système d'exploitation, lorsqu'il s'installe dans la mémoire vive
inscrit dans le vecteur d'interruption les adresses des routines que
les applications peuvent appeler – soit par la CPU en cas d’exception d’exécution ou
• Déroutement ou exception
• Suite à une erreur interne du processeur (débordement, division par dépassement lors d’un calcul arithmétique,
zéro…) interruption logicielle …
Janvier 2021 Janvier 2021
fatma abbes 51 fatma abbes 52
Les interruptions matérielles 8086 Les interruptions matérielles

Janvier 2021 Janvier 2021


fatma abbes 53 fatma abbes 54

Les interruptions matérielles Les interruptions matérielles


Le mécanisme de prise en compte des interruptions
matérielles qui se trouve dans le processeur est doté d’un
mécanisme de priorité

Janvier 2021 Janvier 2021


fatma abbes 55 fatma abbes 56
Tableau de vecteurs d’interruptions (TVI) Tableau de vecteurs d’interruptions
Table de correspondance Table de correspondance
Adresse Taille (octets) Valeur
0000:0000 2 Adresse d’offset de l’interruption numéro 0
0000:0002 2 Adresse de segment de l’interruption numéro 0
0000:0004 2 Adresse d’offset de l’interruption numéro 1
0000:0006 2 Adresse de segment de l’interruption numéro 1
0000:0008 2 Adresse d’offset de l’interruption numéro 2
0000:000A 2 Adresse de segment de l’interruption numéro 2
0000:000C 2 Adresse d’offset de l’interruption numéro 3
0000:000E 2 Adresse de segment de l’interruption numéro 3

etc…
etc…
etc…

0000:03FC 2 Adresse d’offset de l’interruption numéro 255


0000:03FE 2 Adresse de segment de l’interruption numéro 255

Janvier 2021 Janvier 2021


fatma abbes 57 fatma abbes 58

Interruptions Logicielles Interruptions Logicielles


Exemple 1: SAISIR UN CARACTERE
Il s'agit d'instructions spéciales qui provoquent l'équivalent – Entrée
AH = 01h
d'une interruption hardware : Elles passent au processeur un – Sortie
AL = caractère entré au clavier
numéro qui lui permet de retrouver dans le vecteur d'interruption – Exemple
MOV AH,01
la routine à appeler INT 21H ; résultat dans AL sous forme de car ASCII
Cette technique est utilisée pour appeler les routines de service Exemple 2: Affichage d’UN CARACTERE
– Entrée
du BIOS ou celles du système d'exploitation (appels système) à AH = 02h
DL = Code ASCII du caractère à afficher
partir du code utilisateur – Sortie
Les fonctions du DOS s’appellent toutes à l’aide du vecteur 21H. Aucune
– Exemple
•Exemple MOV DL,’A’
la fonction 4CH du DOS permet de terminer un programme assembleur et de revenir à MOV AH,02
INT 21H
l’interpréteur de commandes DOS : Exemple 3: AFFICHER UNE CHAINE DE CARACTERES
MOV AH, 4CH – Entrée
INT 21H AH = 09h
DS = Adresse de segment de la chaîne de caractères
DX = Adresse d'offset de la chaîne de caractères
Janvier 2021 Janvier 2021 – Sortie
fatma abbes 59 Aucune fatma abbes 60

Vous aimerez peut-être aussi