Vous êtes sur la page 1sur 5

Master 1 – 2017/2018

1°/ Tapez le code assembleur suivant :


MOV AX,00FF
MOV DX,0F00
ADD AX,DX
INC AX
 Simulez le code instruction par instruction et visualisez les différents registres dans
l’émulateur 8086.
2°/ Affectation des flags : Exécutez les instructions suivantes, deux par deux, en observant les
flags affectés :
MOV AX,7FFF
ADD AX,0001
MOV AX,7FFF
INC AX
MOV AX,FFFF
ADD AX,0001
MOV AX,FFFF
INC AX
SUB AX,AX
3°/ Vérification de l’assemblage de quelques instructions : Vérifiez l’assemblage des
instructions suivantes en spécifiant les champs, w, d, mod, r/m, data, addr hight :
MOV AX,200
MOV BX,AX
MOV SI,BX
MOV [SI],BX
MOV [0200],BX
Simuler l’exécution détaillée de ces instructions en observant les registres et mémoires
concernées.
4°/ Désassemblage de quelques codes d’instructions :
 Désassemblez les codes instructions suivants :
8B C2 89 D0 8B 89 F0 CC
 Donnez une explication de ce que vous observez :
 Désassemblez les codes instructions suivants :
90 64 66 6D 04 DF 89 1E 18 CC
Procédez à la simulation de l’exécution de cette séquence. Tirer des conclusions.

II. Objectifs :
L’objet de ce TP est de vérifier la table des interruptions ainsi que la modification des sous
programmes d’interruptions.

1
K. Messaoudi 2017/2018
Master 1 – 2017/2018

1°/ Sous le simulateur emu8086 tapez le programme suivant :


Code segment
Org 0100h
Assume cs:code , ds:code
Start : jmp begin
Begin : mov ac,code
Mov ds,ax
Boucle: mov ah,00h
Int 16h
Mov ah,0eh
Int 10h
Jmp boucle
Code ends
End start
- Expliquez l’exécution de ce programme ?
2°/ modifier le programme pour prendre en considérations les touches spéciales et les touches de
fonction.
Exemple : la touche return chariot RC, la touche d’effacement , …etc.

2
K. Messaoudi 2017/2018
Master 1 – 2017/2018
Les interruptions – Les entrées/sorties
Commande de l’exemple de feux tri-color
I. Les E/S du 8086 commandé par l’émulateur (emu8086)
L’émulateur emu8086 est un simulateur du processeur 8086 sous Windows. Il ne permet pas la
gestion des entrées/sorties original d’un PC IBM (port parallèle, port série, port USB, ….). Par
contre, il permet la gestion de quelques ports virtuels, ces ports peuvent être gérés par un
programme assembleur 8086 en utilisant les mêmes instructions des ports réels (IN et OUT) et en
utilisant la même syntaxe.
Le emu8086 peut supporter des E/S virtuels décrites en un langage de programmation de base (java,
visual basic, vc++, delphi, c#, …). Le nombre de ces E/S sur les nouvelles versions de emu8086 est
illimité, les adresses peuvent être allée de 0000h à 0FFFFh (soit de 0 à 65535). Deux applications
virtuelle (décrite en un langage) peuvent avoir la même adresse mais ne peuvent pas être exécuté en
même temps. L’appel de ces applications dans un programme assembleur est obtenu au début de ce
programme par la formule suivante :
#start = nom_application.exe#
Exemple : feux tri-color (traffic lights - port 4 (word))  #start = traffic_lights.exe#

Cette application est contrôlée par l’adressage du port virtuel 4. Cette application contient 12
lampes tri-color (rouge, jaune et vert) contrôlé par les 12 bits de poids faible du mot d’adresse 4. Si
le bit correspondant est égal à 1 la lampe est allumée. Donc, pour les 12 bits :
1 - the lamp is turned on.
0 - the lamp is turned off.
Les voitures virtuelles sont programmées de circuler selon l’état des lamps.
Exemple :
MOV AX, 0000001011110100b
OUT 4, A

3
K. Messaoudi 2017/2018
II. Les interruptions :
II.1. INT 15h / AH = 86h - BIOS wait function.
input:
CX:DX = interval in microseconds
return:
CF clear if successful (wait interval elapsed),
CF set on error or when wait function is already in progress.
Note: the resolution of the wait period is 977 microseconds on many systems (1 million
microseconds - 1 second). Windows XP does not support this interrupt (always sets CF=1).

II.2. INT 16h / AH = 00h - get keystroke from keyboard (no echo).
return:
AH = BIOS scan code.
AL = ASCII character.
(if a keystroke is present, it is removed from the keyboard buffer).

II.2. INT 21h / AH=2Ch - get system time;


return:
CH = hour. CL = minute. DH = second. DL = 1/100 seconds.

III. Travail demandé :


1. Ecrire un programme en assembleur 8086 qui permet la gestion des 12 lampes.
2. Proposer une solution pour commencer le fonctionnement en appuyant sur la lettre « a » sur
l’écran.
3. Proposer une solution pour le basculement automatique de fonctionnement jour/nuit.

4
K. Messaoudi 2017/2018
Master 1 – 2017/2018

I. Objectifs :
1. Compréhension du mécanisme des interruptions dans le 8086.
2. Utilisation de quelques interruptions pour :
 La génération des temporisations.
 La lecture d’un caractère à partir du clavier.
 La gestion de l’écran.

II. Définition des interruptions à utiliser :


II.1. L’interruption INT 08h :
L’interruption int 08h ( Real Time Clock Interrupt ) est une interruption de type matériel.
Le mot situé à l’adresse 0040 : 006C est augmenté de 1 par int 08h toutes les 1/18.2 Sec. Exemple :
14 Sec = 256 x 1/18.2 Sec.

II.2. L’interruption MS-DOS INT 21h : (lecture d’une chaine de caractère à partir du clavier)
La fonction 0Ah de l’interruption int2h permet d’installer les caractères tapés au clavier dans la
zone d’adresse DS : DX. Ce buffer se remplit tant que le caractère RETURN n’est pas tapé et la
longueur maximale de la chaîne n’est pas atteinte, sinon la fonction se termine.
AH  02 ( N° de la fonction ou du service )
DS :[DX+0]  Nombre de caractère à lire (paramètre d’entrée) ;
DS :[DX+1]  Nombre de caractère lus sans le RETURN (paramètre de sortie) ;
DS :[DX+2]  Code ASCII du premier caractère lu ;
DS :[DX+(n+1)]  Code ASCII du neme caractère lu.

II. Travail demandé :


1) Ecrire un sous programme permettant de réaliser une temporisation de 5 seconde ;
2) Ecrire un sous programme permettant d’afficher, à la position du curseur, le message « LE
SYSTEME VA ETRE INITIALISE » ;
3) Ecrire un sous programme permettant de saisir une chaine de 3 caractères et de les stocker
dans un emplacement mémoire de votre choix ;
4) En utilisant les 3 sous programmes et les interruptions 10H et 21H, écrire un programme qui
réalise les tâches suivantes :
 Saisie d’une chaîne de caractère à partir du clavier,
 Test du contenu de la dite chaîne :
- Si la chaine est « OUI » alors afficher « LE SYSTEME VA ETRE
INITIALISE » pendant 5 secondes puis rebouter la machine.
- Sinon si la chaîne est « NON » alors quitter le programme,
- Sinon aller à 1.

Remarque :
 Tester séparément les différents sous programmes en mode simulation,
 Exécuter le programme complet en mode privilégié.

5
K. Messaoudi 2017/2018

Vous aimerez peut-être aussi