Vous êtes sur la page 1sur 5

Assembleur - IUT LENS 2002 1

Assembleur
IUT LENS 2002
Introduction
Assembleur - IUT LENS 2002 2
Qu,est ce que l,assembleur ?
l Langage de (trs) bas niveau permettant l'criture
de programmes rapides et d'interfaces vers des
priphriques (drivers)
l Langage machine Versus Assembleur
1101010011001 = mov ah,ax
Lassembleur cest du langage machine sous une autre
forme, le compilateur le transforme en binaire
Assembleur - IUT LENS 2002 3
A Quoi sert l,Assembleur ?
l Utilis l'heure actuelle pour :
Ecriture de drivers
Ecriture des portions de programmes optimises
Ecriture de programmes embarqus
Dmos graphiques pour les concours
l Bien sr vous pouvez tout faire en assembleur
si vous le voulez
Assembleur - IUT LENS 2002 4
Ce que nous allons voir .
l Rappel sur les reprsentations numriques
l Fonctionnement du microprocesseur
l L'assembleur 8086 Instructions de base
l Turbo Assembleur : Aspect pratique
l Le Bios et les interruptions
l Le systme de fichiers
l Programmation procdurale et macro
Assembleur - IUT LENS 2002 5
Et en fonction du temps.
l Programmation graphique
l Intgration dans un langage haut niveau
Assembleur - IUT LENS 2002 6
Bibliographie
l Quelques ouvrages qui peuvent vous tre
utiles.
PROGRAMMATION EN ASSEMBLEUR (MASSON)
JEAN-FRANCOIS PHELIZON ISBN : 2225634815
La Bible PC Programmation Systeme (micro application)
Michael Tischer
LE MICROPROCESSEUR PENTIUM : Architecture et programmation
Patrick Cohen
Assembleur - IUT LENS 2002 7
Assembleur
IUT LENS 2002
Fonctionnement d'un
microprocesseur
Assembleur - IUT LENS 2002 8
Un ordinateur c,est quoi ???
Processeur
Priphriques de sorties
Priphriques d'entres
Mmoire
Assembleur - IUT LENS 2002 9
Pourquoi le 8086 ?
l Dans la suite du cours, nous parlerons toujours, sauf
mention contraire, du processeur Intel 8086.
Le langage fonctionne sur tous les descendants y compris
les Pentium qui ne sont en fait que des 80586 / 80686
Cela vous permet de tester vos programmes sur n'importe
quel PC (y compris sur AMD ou Cyrix)
C'est le plus commun actuellement, et tous les concepts de
l'assembleur sont prsents ce qui vous permettra de vous
adapter.
Assembleur - IUT LENS 2002 10
La mmoire et ce qu,elle contient
ROM : Bios
Disponible pour les Extensions (Bios, Mmoire
etc)
Mmoire Ecran en mode texte
Mmoire conventionnelle RAM, la mmoire
utilise pour les applications
Drivers, vecteurs d'accs, variables DOS,
prog. Rsidents.
FFFFH
F000H
0000H
????H
A000H
C000H
Assembleur - IUT LENS 2002 11
Schma simplifi du CPU (8086)
Assembleur - IUT LENS 2002 12
Qu,est ce qu,un registre
l Les registres sont des variables du
processeur dont le nom est fix.
l Appartenant au CPU, leur utilisation est trs
rapide
l Sur les 80X86 on en distingue 3 types :
Les registres gnraux
Les registres d'index
Les registres de segments
Assembleur - IUT LENS 2002 13
Les registres & leur role
l Nous reverrons chacun des registres dans
leur usage propre par la suite. La
prsentation dtaille suivante n'a pour
but que de vous prsenter les noms que
vous allez rencontrer trs rapidement en TP.
l Retenez cependant l'usage principal de
chacun de ses registres.
Assembleur - IUT LENS 2002 14
Les registres gnraux & d,index
Destination Index DI
Source Index SI
Pointeur de pile SP
Donnes
DL DH
CL
BL
AL
BP Pointeur de base
DX
CH
Compteur
CX
BH
Base
BX
AH
Accumulateur
AX
Remarques :
Ils ont tous une longueur
de 16 bits
Certains se dcomposent
en petits registres. Par
exemple :
AX = AH + AL
Si AX vaut 11010110
AH vaut 1101
AL vaut 0110
Assembleur - IUT LENS 2002 15
Le registre d,accumulation AX
l Ce registre est utilis pour rcuprer le
rsultat ou comme paramtre de sous-
programmes
l Il sert de paramtre aux fonctions
mathmatiques existantes
Assembleur - IUT LENS 2002 16
Le Registre de base BX
l Ce registre sert de base pour l'adressage
index. Adressage que nous tudierons plus
tard.
Assembleur - IUT LENS 2002 17
Le Registre compteur CX
l Ce registre est un registre compteur il est
utilis pour grer des boucles du type
Pour i allant de 10 0
Afficher i
l Nous verrons un peu plus tard comment
grer cette boucle en assembleur
Assembleur - IUT LENS 2002 18
Le registre DX
l Registre utilis pour certaines multiplications /
divisions.
l Les registres DX,CX,BX,AX ont en plus de leur
usage propre, la possibilit de servir pour le
stockage et le traitement de donnes.
Assembleur - IUT LENS 2002 19
Les registres d,index
l Le registre SP est le registre de pile, son usage en
tant que variable est donc strictement interdit.
l Le registre BP sert comme BX pour l'adressage
index.
l DI est le registre de destination, utilis pour la
gestion des chanes.
l SI est l'quivalent de DI mais cette fois-ci c'est la
source.
Nous reviendrons sur ces registres lorsque nous
aurons besoin de les utiliser.
Assembleur - IUT LENS 2002 20
Les registres de segments(1)
l Ces registres permettent de situer le
contexte d'excution du programme.
l CS (Code Segment) et IP (instruction
pointeur) dterminent la prochaine instruction
utiliser.
l SS (Stack Segment) comme son nom
l'indique pointe sur le sommet de la pile.
Assembleur - IUT LENS 2002 21
Les registres de segments (2)
l DS (Data Segment) permet l'accs la zone
mmoire alloue au programme.
l ES (Extra Segment) sert essentiellement
lorsque l'on doit grer plusieurs Segments de
mmoire de 64Ko.
Assembleur - IUT LENS 2002 22
Le registre des indicateurs
l Registre totalement diffrent des prcdents
l Il comporte 16 bits mais ne fonctionne que bit bit,
chacun d'entre eux ayant une signification particulire.
l On peut :
- soit les positionner manuellement
- soit les positionner par l'intermdiaire de commandes
utilisant certains bits pour indiquer un rsultat.
CF XX PF XX AF XX ZF SF TF IF DF OF XX XX XX XX
Assembleur - IUT LENS 2002 23
La signification des indicateurs(1)
l CF (carry Flag) Il est positionn lorsqu'une opration
dpasse la capacit du registre, indiquant ainsi qu'il y a une
retenue.
l PF (parity Flag) Indique si le rsultat contient un
nombre pair (Valeur 1) ou impair de 1 (Valeur 0).
l AF (auxiliary Flag) identique CF mais pour le
format numrique BCD que nous verrons plus tard.
l ZF (zero flag) Positionn 1 lorsque le rsultat d'une
opration retourne 1.
Assembleur - IUT LENS 2002 24
La signification des indicateurs(2)
l SF (Sign Flag) Indique si positionn 1 que le nombre
est ngatif.
l TF (Step Flag) Utilis pour dtecter d'ventuelle erreur
l'aide des dbuggeurs
l IF (Interrupt Flag) Si le flag est positionn 1, les
interruptions masquables sont inhibes.
l DF (Direction Flag) Indique le sens du parcours des
chanes de caractres (1 dans le sens dcroissant).
l OF (Overflow Flag) Indique un dbordement potentiel
lorsqu'on travaille sur des nombres signs.
Assembleur - IUT LENS 2002 25
Un premier programme Assembleur
IUT LENS 2002
Assembleur - IUT LENS 2002 26
Simple non ?
.MODEL small
.STACK 100h
.DATA
HelloMessage DB 'Hello, world',13,10,'$'
.CODE
mov ax,@data
mov ds,ax
mov ah,9
mov dx,OFFSET HelloMessage
int 21h
mov ah,4ch
int 21h
END
Initialisation
du
programme
Terminaison du programme
Code du programme
Assembleur - IUT LENS 2002 27
La Partie d,initialisation
.MODEL small
On indique au compilateur le modele
de la pile ici small
.STACK 100h
On indique la taille du segment de
pile qui sera ici de 256 octets
Assembleur - IUT LENS 2002 28
Initialisation des variables
.DATA
HelloMessage DB 'Hello, world',13,10,'$'
l Dans la Partie Data, on peut dfinir des variables
initialises et/ou constantes avec un nom
symbolique ici HelloMessage et un tableau de bytes
(DB) qui contient la phrase Hello, World , un
retour chariot (13,10) et le symbole de fin de chane
$.
Assembleur - IUT LENS 2002 29
L,instruction mov
l Cette instruction permet l'affectation d'une
variable ou d'un registre
Mov Destination,Source
Affecte Destination Source
(ie Destination=Source)
Assembleur - IUT LENS 2002 30
L,instruction MOV (2)
l Par dfaut c'est le contenu du registre qui est
transfr. Dans l'exemple, on indique par
l'instruction OFFSET de transfrer l'adresse
mmoire.
l Nous reviendrons sur cette instruction
lorsque nous tudierons la mmoire et les
diffrents mode d'adressage.
Assembleur - IUT LENS 2002 31
Initialisation du segment de donnes
l Les deux premires lignes du
programme permettent d'initialiser le
segment DS, permettant de retrouver,
par la suite, les donnes qu'on y a
stockes.
mov ax,@data
mov ds,ax
Assembleur - IUT LENS 2002 32
Qu,est ce qu,une interruption ?
l L'instruction Int sert dclencher une
interruption logicielle.
l Dans le cas logiciel, les interruptions sont
des sous-programmes.
l Le numro (0 255) de l'interruption est
plac dans le registre AH.
l Les paramtres ventuels dans d'autres
registres habituellement AL.
Assembleur - IUT LENS 2002 33
L,interruption d,affichage
l L'interruption utilise est une interruption Dos
(21h)
l Le numro de l'interruption est 09H
l L'adresse de la chane afficher doit se
trouver dans DX
Mov ah,09h
Mov dx,OFFSET HelloWord
Int 21H
Assembleur - IUT LENS 2002 34
La fermeture du programme
l Pour terminer le programme proprement il faut
encore faire appel une interruption DOS, la 4ch.
l Libre l'ensemble des ressources ventuellement
occupes par le programme.
Mov Ah,4ch
Int 21h
Assembleur - IUT LENS 2002 35
Assembleur
IUT LENS 2002
Reprsentation
Numrique
Assembleur - IUT LENS 2002 36
Les entiers : Juste un rappel
l Les diffrentes bases numriques utilises
Dcimale : 233
Binaire : 11101001
Hexadcimale : E9
Assembleur - IUT LENS 2002 37
Les dpassements de capacit
l Lorsque l'on code des nombres sur un
nombre de bits limits, on peut obtenir ce
que l'on appelle des dbordements
l Par exemple si on travaille sur 4 bits
l 1111 + 0001 = Donnera un rsultat de 0000
mais avec un dpassement de capacit
Assembleur - IUT LENS 2002 38
Comment connatre la taille maximale ?
l Pour l'addition
Nombre de bits du plus grand + 1
l Pour la multiplication
Pour coder 2 nombres de respectivement m et n
bits il faudra m+n bits au maxi.
Assembleur - IUT LENS 2002 39
Nombres signs
l Le bit de poids fort reprsente le bit de signe,
savoir 0 pour un nombre positif 1 si ngatif.
l On obtient un nombre ngatif par le
complment 2
Nombre en binaire en valeur absolue
Inversion de tous les bits
Ajouter 1
Assembleur - IUT LENS 2002 40
Le Format BCD
l Ce format trs simple sera (a t) tudi en
TD.
l Il code les chiffres dcimal sur 4 octets
l 2 formats diffrents un normal un chiffre par
octet un compact 2 chiffres par octet.