Vous êtes sur la page 1sur 26

Institut suprieur de gestion de Tunis

1 L.F.I

Prsentation Les registres Pourquoi utiliser lassembleur Source & compilation Les types dinstruction

Le langage assembleur est trs proche du langage machine (c'est-dire le langage qu'utilise l'ordinateur: des informations binaires, soit des 0 et des 1). Il dpend donc d'un processeur. Il est donc ncessaire de connatre un minimum le fonctionnement d'un processeur pour pouvoir aborder cette partie. Un processeur est reli la mmoire par l'intermdiaire d'une liaison appele bus.

Les donnes ncessaires dont le processeur a besoin pour lexcution dun programme sont stockes dans ce que l'on appelle des registres (ils sont nots AX, BX, CX, DX, ...).
Chacun a sa propre utilit.
3

1) Les registres gnraux (AX, BX, CX, DX) qui servent notamment pour stocker les rsultats des oprations arithmtiques. 2) Les registres de segments (CS, DS, ES, FS, GS, SS) servent uniquement, indiquer lor dune criture ou lecture mmoire, partir de quel segment on veut lire ou crire.

Le registre CS (Code Segment) : Ce registre contient le numro du segment mmoire dans lequel sont stockes les instructions assembleur du code excuter. On ne peut pas accder directement ce registre. Le registre DS (Data Segment) : Ce registre contient les numros de segment mmoire dans lesquels sont stockes des donnes. Le registre DS est utilis pour le segment de donnes du code ; les autres permettent de rfrencer d'autres types de donnes. On ne peut pas accder directement ce registre. Le registre ES (Extra Segment) : On peut lutiliser comme on veux, tous comme FS et GS. Le registre SS (Stack Segment) : Ce registre contient le numro du segment mmoire dans lequel est stocke la pile. On peut accder directement ce registre ce qui permet d'utiliser plusieurs piles.
5

Les registres AX, BX, CX et DX peuvent tre utiliss par bloc d'un octet (8 bits), la lettre X de leur nom est alors remplace par L (comme Low pour dsigner les bits de poids faible) et H (pour High afin de dsigner les bits de poids fort).
De plus, dans les architectures x86 32 bits, ces registres ont t tendus 32 et ont vu leur nom prcd d'un E (pour Extended, en franais tendu ).

EAX(32 bits) AX (16 bits) AH (8bits) AL(8bits)

1) Les registres gnraux (AX, BX, CX, DX) qui servent notamment pour stocker les rsultats des oprations arithmtiques. 2) Les registres de segments (CS, DS, ES, FS, GS, SS) servent uniquement, indiquer lor dune criture ou lecture mmoire, partir de quel segment on veut lire ou crire.

Le registre CS (Code Segment) : Ce registre contient le numro du segment mmoire dans lequel sont stockes les instructions assembleur du code excuter. On ne peut pas accder directement ce registre. Le registre DS (Data Segment) : Ce registre contient les numros de segment mmoire dans lesquels sont stockes des donnes. Le registre DS est utilis pour le segment de donnes du code ; les autres permettent de rfrencer d'autres types de donnes. On ne peut pas accder directement ce registre. Le registre SS (Stack Segment) : Ce registre contient le numro du segment mmoire dans lequel est stocke la pile. On peut accder directement ce registre ce qui permet d'utiliser plusieurs piles.

3) Les registres dindex (DI, SI, SP, BP) peuvent servir faire un peu nimporte quoi (oprations arithmtiques.) mais qui lorigine servaient contenir loffset dune adresse.

Le registre SP (Stack Pointer) : Ce registre contient le dplacement pour atteindre le sommet de la pile.
Le registre BP (Base Pointer) : Ce registre contient un dplacement correspondant une position dans la pile. Ce registre sert pointer sur une donne dans la pile.

4) Les registres de travail du processeur : Le registre IP (Instruction Pointer) : Ce registre contient l'offset de la prochaine instruction excuter. Il est modifi automatique chaque excution et peut tre manipul par des instruction du type jmp, call, ret, etc. On ne peut pas accder directement ce registre.

Le registre de flag : son rle est de positionner ses bits ( ltat 0 ou 1) selon le rsultat arithmtique de la prcdente instruction excute. (CF, PF, ZF, SF, OF)

Pour faire excuter une suite d'instructions au processeur, il faut lui fournir des donnes binaires ou hexadcimales. Or, les fonctions en notation hexadcimale sont difficiles retenir, c'est pourquoi le langage assembleur a t mis au point. Il permet de noter les instructions avec des noms explicites suivis de paramtres. Voici par exemple quoi peut ressembler un programme en langage machine: A1 01 10 03 06 01 12 A3 01 14

Il s'agit de la reprsentation hexadcimale d'un programme permettant d'additionner les valeurs de deux cases mmoire et de stocker le rsultat dans une troisime case. Il est vident que ce type d'criture est difficilement lisible par nous, humains. Ainsi, puisque toutes les instructions que le processeur peut effectuer sont associes une valeur binaire chacune, on utilise une notation symbolique sous forme textuelle qui correspond chaque fonction, c'est ce que l'on appelle le langage assembleur. Dans l'exemple prcdent la squence A1 0110 signifie copier le contenu de la mmoire l'adresse 0110h dans le registre AX du processeur. Cela se note en langage assembleur: MOV AX, [0110]
9

Le programme prcdent A1 01 10 03 06 01 12 A3 01 14 crit en langage assembleur donnerait:

10

Toutes les instructions ont une notation symbolique associe (fournie par le fabricant du processeur). Ces instructions sont stockes dans un fichier texte (le fichier source) qui, grce un programme spcifique (appel "l'assembleur") permet de crer un fichier assembl partir du fichier source (il devra comporter l'extension .ASM, en s'appelant par exemple source.asm.

L'assembleur va fournir un fichier objet (dont l'extension est .obj) qui va contenir l'ensemble des instructions traduites en instructions machines.
Ce fichier .OBJ ne pourra toutefois pas s'excuter directement car il faut encore lier les diffrents fichiers.

Comment a les diffrents fichiers? En effet il est possible de construire un excutable partir de plusieurs fichiers sources ( partir d'un certain niveau de programmation il devient intressant de crer des fichiers contenant des fonctions...).
Ainsi, mme si vous avez un seul fichier objet il vous faudra utiliser un programme (appel diteur de liens) qui va vous permettre de crer un fichier excutable (dont l'extension sera .exe).
11

Comme dans tout programme le fichier source doit tre saisi de manire rigoureuse. Chaque dfinition et chaque instruction doivent ainsi s'crire sur une nouvelle ligne (pour que l'assembleur puisse les diffrencier) Le fichier source contient:

1) Des dfinitions de donnes dclares par des directives (mots spciaux interprts par l'assembleur, nous les tudierons plus tard, le but est ici de donner une ide de ce quoi ressemble un fichier source) Celles-ci sont regroupes dans le segment de donnes dlimit par les directives SEGMENT et ENDS 2) Puis sont places les instructions (qui sont en quelques sorte le coeur du programme), la premire devant tre prcde d'une tiquette, c'est--dire un nom qu'on lui donne. Celles-ci sont regroupes dans le segment d'instructions dlimit par les directives SEGMENT et ENDS 3) Enfin le fichier doit tre termin par la directive END suivi du nom de l'tiquette de la premire instruction (pour permettre au compilateur de connatre la premire instruction excuter 4) (Les points-virgules marquent le dbut des commentaires, c'est--dire que tous les caractres situs droite d'un point virgule seront ignors)
12

data

SEGMENT; voici le segment de donnes dont l'tiquette est data

;Placez ici les dclarations de donnes data ENDS; ici se termine le segment de donnes

ASSUME DS:data, CS: code


code SEGMENT; voici le segment d'instructions dont l'tiquette est code

debut : ;placez ici votre premire instruction (son tiquette est nomme debut) ;

;Placez ici vos instructions


code ENDS; fin du segment d'instructions

END debut ;fin du programme suivie de l'tiquette de la premire instruction


13

Data SEGMENT
T V1 V2 M V3 DB 100, 02Ah, 31 DB 5, 6 DW 0A654h DB CHAINE DE CARACTERES DB 4

Data ENDS Code SEGMENT Assume CS : Code, DS : Data Deb :


MOV MOV MOV ADD MOV INC MOV MOV INT 21h

AX, Data DS, AX BL, V1 V3, BL BH, 4 BH T, BH AH, 4Ch

Code ENDS END Deb.

14

Les donnes sont regroupes dans une zone de la mmoire appel segment de donnes, tandis que les instructions se situent dans un segment d'instructions. Le registre DS (Data Segment) contient le segment de donnes, tandis que le registre CS (Code Segment) contient le segment d'instructions. C'est la directive ASSUME qui permet d'indiquer l'assembleur o se situe le segment de donnes et le segment de code.
15

L'instruction est l'lment cl de l'ordinateur car c'est elle qui permet de spcifier au processeur l'action effectuer. Toutes les instructions sont stockes en mmoire et un compteur dans le processeur permet de passer de l'une l'autre. Une instruction est compose de deux lments: le code opration: action effectuer par le processeur le champ oprande: donne ou bien adresse de la case mmoire contenant une donne La taille d'une instruction, c'est--dire le nombre de bits qu'elle occupe en mmoire dpend de l'instruction et de l'oprande, elle est gnralement de quelques octets (1 4). L'octet est l'unit qui est utilise gnralement car elle est pratique pour le stockage de certaines donnes (notamment les caractres).

16

L'ensemble des instructions est appel jeu d'instruction. On peut les rpartir selon plusieurs catgories selon le type d'action que son excution dclenche. Instructions d'affectation Instructions arithmtiques et logiques Instructions de comparaison Instructions de branchement
17

1. 2. 3. 4.

Les instructions d'affectations permettent de faire des transferts de donnes entre les registres et la mmoire, c'est--dire: soit une criture (du registre vers la mmoire) MOV [0100],AX soit une lecture (de la mmoire vers un registre) MOV AX,[0100]
18

Ce type d'instructions porte sur le registre AX (l'accumulateur). Elle permettent d'effectuer une opration entre le registre AX et une donne puis stocker le rsultat dans AX. Ces instructions sont:

l'addition: AX = AX + donne la soustraction: AX = AX donne la multiplication: AX = AX *donne la division : AX = AX /donne incrmentation: AX = AX + 1 dcrmentation: AX = AX 1 dcalage gauche dcalage droite Rotation gauche Rotation droite

ADD AX,5 SUB AX,5 Mul Ax,3 Div AX,2 INC AX DEC AX SHL AX, 5 SHR AX, 5 ROL AX, 5 ROR AX, 5
19

Permet de comparer le registre AX une donne. Le rsultat de la comparaison est indique grce ... des indicateurs...
Ces instructions (ainsi que les instructions de branchements) sont ncessaires pour permettre une "interactivit", c'est--dire qu'en fonction de certains paramtres le programme va pouvoir avoir divers comportement. Sans ces indicateurs les programmes auraient un comportement dtermin et le programme ferait constamment les mmes actions (comme un film ...).
20

Ce type d'instruction permet de sauter une instruction non conscutive l'instruction en cours. En l'absence de ce type d'instruction le processeur passe automatiquement l'instruction suivante (c'est--dire l'instruction contigu (en mmoire) l'instruction en cours). C'est le registre IP qui repre l'instruction suivante excuter. Les instructions de branchement permettent donc de modifier la valeur de ce registre et ainsi de choisir la prochaine instruction excuter. On distingue deux sortes de branchements: Les branchements conditionnels: en fonction d'une condition satisfaire le processeur traitera le branchement indiqu ou l'instruction suivante. condition satisfaite: excution de l'instruction situe l'adresse indique condition non satisfaite: excution de l'instruction suivante Les branchements inconditionnels: on affecte une valeur dfinie au registre IP, c'est--dire que l'on ira excuter l'instruction vers laquelle il pointe aprs celle en cours quoi qu'il arrive!
21

Les branchements conditionnels (ou sauts conditionnels) permettent au processeur de traiter l'instruction situe un emplacement mmoire indiqu si une certaine condition est vrifie. Dans le cas contraire (condition non ralise), le processeur ignorera cette instruction, il traitera donc l'instruction suivante. La (ou les) condition(s) satisfaire dpend(ent) de l'tat d'indicateurs. Ainsi les branchements conditionnels doivent gnralement tre place aprs une opration qui va modifier l'tat d'un ou plusieurs indicateurs (une instruction CMP ou autre). Selon l'intitul de l'instruction, les conditions satisfaire sont diffrentes:

22

JA (Jump if above, ce qui signifie saute si au-del) effectue un saut si ZF=0 et CF=0 JB (Jump if Below, ce qui signifie saute si en-dea) effectue un saut si CF=1 JBE (Jump if Below or Equal, ce qui signifie saute si en-dea ou gal) effectue un saut si ZF=1 ou CF=1 JE (Jump if Equal, ce qui signifie saute si galit) effectue un saut si ZF=1 JG (Jump if Greater, ce qui signifie saute si suprieur) effectue un saut si ZF=0 et SF=OF JLE (Jump if Lower or Equal, ce qui signifie saute si infrieur ou gal) effectue un saut si ZF=1 ou SF diffrent de OF JNE (Jump if Not Equal, ce qui signifie saute si non-galit) effectue un saut si ZF=0

23

24

Les segments sont stocks dans des registres de 16 bits, dont les deux principaux sont: Le segment de donnes: DS (Data Segment) Le segment de code: CS (Code segment) Le segment CS sert au processeur lire le code d'une instruction. Lors de la lecture de celui-ci il cre une adresse de 32 bits forme de la paire constitue par le registre segment CS et le registre de dplacement IP, on note cette paire CS:IP

25

Le registre segment CS est initialis automatiquement au chargement du programme sur le segment contenant la premire instruction excuter. Le segment DS sert au processeur pour aller chercher les donnes stockes une adresse. Il cre alors par la paire constitue du registre segment DS et de l'adresse 16 bits indique dans l'instruction. C'est au programmeur de dfinir dans le code source l'adresse du segment de donne utiliser, en initialisant le registre DS.

26

Vous aimerez peut-être aussi