Académique Documents
Professionnel Documents
Culture Documents
TP N°1
Initiation au Langage Assembleur (8086/8088)
I. Objectifs :
La mémoire est segmentée en 16 blocs de 64 Ko et une adresse sur 20 bits est obtenue en
combinant deux parties :
- Le registre CS permet de stocker les 4 bits de poids fort donnant le numéro de segment de
mémoire.
- Le registre IP fournit les 16 bit de poids faible donnant l’adresse à l’intérieur du segment
de mémoire spécifié par CS.
Le 8086 autorise un mode de fonctionnement en pas à pas, ainsi que l’utilisation d’opérations
spécifiques appelées interruptions permettant au 8086 de « dialoguer » avec les autres
périphériques de l’ordinateur.
Les registres du 8086 se décomposent en 4 grandes familles :
Registres du 8086/8088
16 bits
Registres de Segment
CS Segment de Code (Code Segment)
DS Segment de Données (Data Segment)
SS Segment de Pile (Stack Segment)
ES Segment Extra (Extra Segment)
Autres Registres
IP (Pointeur d'Instruction) Instruction Pointer
ST (Registre d'Etat) Status
-1-
- 1 --
1-
Microprocesseurs et Microcontrôleurs AU : 2018/2019 Sem2
4 registres de données, se décomposant chacun en deux parties : une partie « haute » et une partie
« basse » de 8 bits chacune, ce qui permet au microprocesseur de manipuler des données sur 8 ou
16 bits :
- DX, tout comme AX, est utilisé pour les calculs arithmétiques et notamment dans la
division et la multiplication. Il intervient également dans les opérations d’entrées/sorties.
Registres de segmentation :
- DS (segment de données) ;
- SS (segment de pile) ;
- ES (segment supplémentaire).
- SI (index de source) ;
- DI (index de destination).
-2-
- 2 --
2-
Microprocesseurs et Microcontrôleurs AU : 2018/2019 Sem2
-3-
- 3 --
3-
Microprocesseurs et Microcontrôleurs AU : 2018/2019 Sem2
Exécute le programme à partir de l'adresse 1 si elle est spécifiée (elle est facultative) ou à partir de
CS:IP si elle n'est pas indiquée. Il y a des points d'arrêt aux adresses <adresses2> (on peut mettre
entre = et 10 points d'arrêt qui doivent être le premier octet d'une instruction).
Exemples:
G => lance à partir de CS:IP
G = 100 => lance à partir de CS:100
G 100 => lance à partir de CS:IP et s'arrête si on tombe sur l'adresse 100
G = 100 200 300 400 => lance à partir de 100 et s'arrête si on passe par 200 300 ou 400.
Commande Q (quit) :
Syntaxe Q
Termine la cession.
Commande T :
Pour exécuter n lignes de programme à partir de l'adresse cs:100, il faut exécuter la commande
t=100 n. Observer l'évolution de l'exécution de votre programme et notamment l'évolution du
contenu des registre ax, bx, cx et dx.
Commande R (registre) :
Syntaxe R [<registre>]
Affiche et permet de modifier le contenu d'un registre ou affiche tous les registres si
aucun nom n'est spécifié. Le registre des flags s'appelle F. Si on donne RF, l'état des flags
s'affiche et on peut changer les flags individuellement: OV, DN, EI, NG, ZR, AC, PE et
CY permettent de mettre à un les flags Overflow, Direction, Interruption, Signe, Zéro,
Retenue auxiliaire, Parité et Retenue. NV, UP, DI, PL, NZ, NA, PO et NC permettent de
les remettre à zéro.
-4-
- 4 --
4-
Microprocesseurs et Microcontrôleurs AU : 2018/2019 Sem2
Application
Remarque : l'interruption 20h de DOS permet la terminaison du programme (int 20).
Étapes à réaliser :
Le XXXX représente l'adresse du segment de mémoire qu'on utilise et 0100 représente l'offset
dans ce segment.
Pour tracer l'exécution de votre petit code, tapez la lettre T et observez le contenu des
registres (la première fois, tapez la lettre R pour afficher le contenu de registres avant
l'exécution de la première instruction):
-5-
- 5 --
5-
Microprocesseurs et Microcontrôleurs AU : 2018/2019 Sem2
-R
AX=0000 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=1773 ES=1773 SS=1773 CS=1773 IP=0103 NV UP EI PL NZ NA PO NC
1773:0103 BBFFFF MOV AX,FFFF
-T
AX=FFFF BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=1773 ES=1773 SS=1773 CS=1773 IP=0103 NV UP EI PL NZ NA PO NC
1773:0103 BBFFFF MOV BX,FFFF
En se référant aux instructions du 8086, à l’aide du Debug exécuter Pas à Pas les
séquences suivantes :
1)
AX 500
BX 600
CX AX
AX BX
BX CX
2)
[200] 56E3
AX 0BF7
BX C01E
XCHG AL, BL
XCHG AH, AL
XCHG [200], AX
3)
AX 1FDE
BX FF00
CX CA02
DX C01E
PUSH AX
PUSH BX
POP AX
POP DX
1- En utilisant la commande a, entrer les programme ci-dessus à l’adresse 100 de la mémoire.
2- Vérifier votre programme en utilisant la commande u.
3- Donner le code de chacune des instructions du programme.
4- Calculer la taille en bits et en octet de votre programme.
5- Calculer l’adresse physique de chacune des instructions du programme.
6- indiqué la valeur de SS :SP ainsi le contenu des registres AX, BX, CX, DX.
4)
-6-
- 6 --
6-
Microprocesseurs et Microcontrôleurs AU : 2018/2019 Sem2
Ecrire le programme suivant: (l'instruction PUSH reg place dans la pile le registre reg.
L'adresse de la pile est définie par le couple SS:SP)
mov ax,35
mov bx,41
mov cx,30
mov dx,6
push ax
push bx
push cx
push dx
add ax,bx
add cx,dx
int 20
1)
AX 0AFB
BX C01E
OR AX, BX
OR AX, FFFF
AND AX, 9999
XOR BX, BX
NOT AX
2)
CX C01E
DX C01E
NEG CX
AND DX, CX
-7-
- 7 --
7-
Microprocesseurs et Microcontrôleurs AU : 2018/2019 Sem2
Jeu d’instructions
-8-