Вы находитесь на странице: 1из 8

TEC586 Compléments de cours

Le microprocesseur 80286

1. Segmentation de la mémoire par le 80286


• Le 286 divise sa mémoire en segments :

a) Le segment de programme : contient le code machine des instructions du programme ;


le registre CS pointe vers le début de ce segment.

b) Le segment de données: contient les données manipulées par le programme; le registre DS


pointe vers le début de ce segment.

c) Le segment de pile : le registre SS pointe vers le début du segment de pile.

d) Le segment Extra : le registre ES pointe vers le début de ce segment.

Remarque : ces quatre segments peuvent être totalement ou partiellement disjoints ou


confondus, selon les besoins, et spécifications du programmeur.
• Un segment commence à une adresse multiple de 16, et occupe au maximum 64K.

2. Initialisation des registres du 286 par le DOS :


En général, un programme écrit en assembleur 286 est destiné à être exécuté sur des micro
compatibles IBM PC.

Les registres CS et SS sont initialisés par des directives ou pseudo-instructions par le


programmeur ; DOS en déduit les valeurs initiales pour IP et SS (fig. 1). DS et ES sont
initialisés au début PSP (préfixe de segment de programme : contient des informations our
DOS sur le programme), et doivent donc être réinitialisés par des instructions dans le
programme.
mémoire

PSP Code de Données Pile


…… programm ……

CS SS
ES

DS IP SP
3. Définition des segments dans un programme :
a) Les directives : ce sont des pseudo instructions permettant la définition et l’initialisation
de variables utilisables dans le programme (et qui ne possèdent donc pas de code
machine).

DB Define byte : réservation d’octets (8 bits)

DW Define word : réservation de mots (16 bits)

SEGME-T Marque le début d’un segment

ASSUME Affectation d’un registre sélecteur de segment

E-D Fin de programme

E-DS Fin de segment

E-DP Fin de procédure

PARA Paragraphe : indique que le segment commence à une adresse divisible par 16

DUP Duplication d’une séquence d’octets ou de mots définis par DB ou DW

FAR La procédure appelée est dans un autre segment que celui du programme

-EAR La procédure est dans le même segment que le programme d’appel

PROC Début d’une procédure (sous programme)

b) Définition d’un segment de type CODE :

Etiquette Mnémonique Commentaire

CODE SEGMENT ; Le segment contenant les instructions commence à CODE

; Programme

CODE ENDS ; Fin du segment CODE


c) Définition d’un segment de type DATA (Données) :

Etiquette Mnémonique Commentaire

DONNEES SEGMENT ; Début du segment de données à l’adresse DONNEES


DB 03H ; 03H est le contenu de l’adresse DONNEES
DW ? ; Un mot (non initialisé) est réservé dans l’adresse suivante
DW 14C0H ;

DONNEES ENDS ; Fin du segment de données ‘DONNEES’

d) Exemple de définition d’un segment de pile :

Etiquette Mnémonique Commentaire

PILE SEGMENT PARA STACK ; Le segment de pile commence à l’adresse PILE


qui est divisible par 16
DB 256 DUP(0) ; réserver 256 octets et les initialiser à 0

PILE ENDS ; Fin du segment de pile

e) Définition d’un segment EXTRA :

Un segment EXTRA est défini de la même manière si on désire l’utiliser.


4. Organisation typique (mise en page) d’un programme Assembleur 286 :

Etiquette Mnémonique Commentaire


PILE SEGMENT ;Définition du segment de pile

PILE ENDS

DONNEES SEGMENT ;ensuite définition du segment de données

DONNEES ENDS

CODE SEGMENT ; puis celui du programme


DEBPROG PROC FAR ; notre programme sera exécuté par DOS qui
; est dans un autre segment

ASSUME CS CODE ; affecter l’adresse CODE à CS


ASSUME SS PILE ; affecter l’adresse PILE à SS
ASSUME DS DONNEES ; affecter à DS l’adresse DONNEES, mais ne
;suffit pas, car DOS met dans DS l’adresse du
;début du PSP !
MOV AX, DONNEES ; Il faut donc charger DS par le biais de AX
MOV DS, AX

DEBROG ENDP ; Fin de la procédure DEBPROG

CODE ENDS ; Fin du segment CODE

END DEBPROG ; END indique que DEBPROG est l’adresse que


;DOS va charger dans IP au début de l’exécution
5. Les modes d’adressage du 286 :

En mode réel, le 286 utilise des adresses réelles de 20 bits, obtenues en ajoutant une adresse
effective (obtenue différemment pour chaque mode d’adressage) de 16 bits, ajoutée au
contenu d’un registre segment multiplié par 16 ; les registres segments utilisés par défaut sont :
CS pour des adresses d’instruction, DS ou SS pour des adresses de données, et SS pour des
adresses de pile.
On peut distinguer le modes d’adressage suivants:

- immédiat : l’opérande lui même se trouve dans l’instruction :


MOV AL,23

- implicite : l’instruction est spécifique, et utilise toujours le même registre


- direct mémoire: l’instruction comporte l’adresse effective de l’opérande :
MOV [ADR], AL ; les crochets spécifient qu’il s’agit
d’une adresse
instruction

Adresse

Reg seg x 16

+ opérande

- Direct registre : MOV AL, BL ; les deux opérandes sont dans les
registres
- indirect par registre : l’instruction spécifie un registre lequel contient l’adresse de
l’opérande
MOV AX, [SI] ; l’adresse effective est dans SI
instruction

Code reg

BX Reg seg x 16
BP
SI Registre
Ou + opérande
DI
- indirect par base: c’est un mode d’adressage indirect nécessitant un calcul ; l’adresse
effective est obtenue en ajoutant un déplacement au contenu du registre de base BX, ou BP
utilisé

MOV AX , [BX+37H]
instruction

Code reg déplacement

Reg seg x 16
BX
Ou
BP Registre
+ opérande

- indexé : ce mode est similaire au précédent mais utilise un registre d’index SI ou DI et


non un registre de base.
MOV AX , [SI]37H ;l’adresse effective est le
déplacement ajouté au contenu de SI
instruction

Code reg déplacement

Reg seg x 16
SI
Ou
DI Registre
+ opérande

- Par base indexé :pour calculer l’adresse effective, on ajoute les contenu du registre de
base, et du registre d’index utilisés, au déplacement
MOV AX, [BX+SI+37H ] ; ou MOV AX, [BX][SI] 37H
instruction

Code reg Code reg déplacement

Reg seg x 16
SI
Ou
DI Registre
+ opérande

BX
ou Registre
BP
- Adressage des chaînes : fait l automatiquement appel aux registres d’index, SI pour la
chaîne source, et DI pour la chaîne destination

- Adressage des Entrées/Sorties : il peut être exécuté selon deux méthodes :

a) Méthode cartographique : on affecte aux périphériques des adresses mémoires ; à


chaque fois que ces adresses sont spécifiées dans des instructions à référence mémoire, les
périphériques correspondants sont activés, et les cases mémoires correspondantes
désactivées. Les instructions d’Entrée /Sortie IN, et OUT ne peuvent pas être utilisées. Par
contre, les instructions à référence mémoire (transfert, arithmétiques, …) peuvent l’être.

b) Adressage distinct : les périphériques possèdent dans ce cas des adresses dans l’espace
des E/S, activées par les instructions IN et OUT uniquement

b.1 adressage distinct direct : dans ce cas l’instruction comprend l’adresse du port d’E/S
réservé au périphérique, sur 8 bits ; on peut donc choisir un parmi 256 ports.

I- AX, 12H ; 12 hexadécimal est l’adresse du périphérique et la donnée de 16


bits se trouve dans AX.

b.2 adressage distinct indirect via DX : l’adresse du port réservé au périphérique se trouve
dans le registre à 16 bits DX. On peut donc désigner un parmi 65536 ports.

I- AX, DX ; l’adresse du périphérique se trouve dans le registre DX,


et la donnée de 16 bits dans AX.
Registres de segments impliqués avec les modes d’adressage fondamentaux:

Mode Format de l’opérande Registre de segment


Immédiat, implicite Aucun
Direct Constante DS
Label DS
Indirect registre [BX] DS
[BP] SS
[DI] DS
[SI] DS
Par base [BX + déplacement] DS
[BP + déplacement] SS
Indexé [SI+ déplacement] DS
[DI+ déplacement] DS
Indexé par base [BX+SI + déplacement] DS
[BX+DI+ déplacement] DS
[BP+SI+ déplacement] SS
[BP+DI+ déplacement] SS
Chaîne
Source [SI] DS
Destination [DI] ES

Spécification du registre de segment : on peut souhaiter spécifier in registre de segment


différent de celui qui est assigné par défaut ; dans ce cas on précède l’adresse effective utilisée
dans l’instruction par le registre de segment désiré suivi de deux point ‘ :’

Exemple :
MOV AX, ES :[DI] ; dans ce cas le registre de segment utilisé avec DI pour
calculer l’adresse réelle, sera ES et non DS.

NB : certaines notations changent d’un programme assembleur (traducteur en langage


machine) à un autre.

Вам также может понравиться