Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                

TP 3

Télécharger au format pdf ou txt
Télécharger au format pdf ou txt
Vous êtes sur la page 1sur 8

Institut Supérieur d’Informatique L1IRS 2021-2022

TP3 : Saisie et affichage de caractères


et de chaines de caractères
Objectifs :
- Maitriser les notions de base des interruptions (notamment INT 21H)
- Ecrire des programmes en Assembleur permettant l’affichage d’un caractère, d’une série de
caractères et d’une chaine de caractères.
I- Les interruptions
1. Introduction

Le microprocesseur ne peut exécuter qu'une seule instruction à la fois. Pour connaître son adresse, il
utilise le couple de registres CS:IP dont la valeur est incrémentée automatiquement. Par conséquent,
le code du programme courant est exécuté de manière linéaire.

Imaginons cependant qu'un événement extérieur demande l'attention de l'ordinateur, par exemple la
pression d'une touche du clavier. La machine doit pouvoir réagir immédiatement, sans attendre que
le programme en cours d'exécution se termine. Pour cela, elle interrompt ce dernier pendant un bref
instant, le temps de traiter l'événement survenu puis rend le contrôle au programme interrompu.

Une interruption n'est rien d'autre que l'appel d'une routine spéciale présente en mémoire appelée
ISR (« Interrupt Service Routine »).

Les interruptions se divisent en trois catégories :

- les interruptions électroniques, par exemple : le clavier ;


- les interruptions du BIOS, par exemple : l'accès aux disques ;
- les interruptions du DOS, par exemple : l'accès aux systèmes de fichiers.

2. Comment sont-elles déclenchées ?

Une interruption peut être déclenchée par votre matériel. C'est ce qui arrive lorsque vous appuyez
sur une touche du clavier. Aucun logiciel n'intervient et le contrôle est passé directement à la
routine qui gère le clavier : ce sont les interruptions matérielles.

Les interruptions logicielles sont quant à elles appelées par des instructions en langage machine au
sein d'un programme. Leur importance est capitale. Rappelez-vous que contrairement au PASCAL

1
Institut Supérieur d’Informatique L1IRS 2021-2022

ou au C, l'assembleur ne dispose pas de fonction préprogrammée. Chaque instruction doit être


directement traduisible en langage machine.

Mais alors, comment fait-on pour écrire une chaîne de caractères à l'écran ? Ou bien pour lire un
caractère entré au clavier ?

Eh bien on le fait de la même façon que le DOS lui-même ! On déclenche les interruptions
appropriées à l'aide de l'instruction « INT » du langage machine. C'est donc une routine du DOS (ou
parfois du BIOS) qui fera tout le travail. Les paramètres (ou leurs adresses) sont passés dans les
registres.

3. Les interruptions en assembleur

Les interruptions peuvent être vues comme un certain nombre de fonctions. Ces fonctions rendent la
programmation beaucoup plus facile, au lieu d'écrire du code pour imprimer un caractère vous
pouvez simplement appeler l'interruption qui le fera pour vous. Il y a également des fonctions
d'interruption pour les disques et tout autre matériel. Nous appelons ces fonctions, des interruptions
logicielles. Des interruptions sont également déclenchées par différents matériels qui s'appellent des
interruptions matérielles. Pour le moment, nous nous occuperons que des interruptions logicielles.

Pour appeler une interruption logicielle, une instruction INT est utilisée, dont la syntaxe est la
suivante :

INT valeur

La valeur peut être un nombre de 0 à 255D (ou de 0 à 0FFH), de façon générale, nous utiliserons les
nombres hexadécimaux.

Pour spécifier une sous-fonction, il faut placer dans le registre AH le numéro de la sous-fonction
avant d'appeler l'interruption.

2
Institut Supérieur d’Informatique L1IRS 2021-2022

4. Interruption 21h

Cette interruption offre un regroupement de tous les services offerts par le système d’exploitation
DOS ou compatible. Pour réaliser les opérations standards (affichage, saisie), le système
d’exploitation (ici DOS) fournit les fonctions pré-écrites (fonctions de l’interruption 21H) :

Fonction 2 : affiche le caractère contenu dans le registre DL.

MOV DL,61H ; Le code ASCII 61H (caractère a) est transféré dans DL

MOV AH,2; fonction n°2

INT 21H ;

Fonction 7 : permet la saisie d’un caractère au clavier et le met (code ASCII) dans le registre AL.

MOV AH,7 ; fonction n°7 , le résultat est mis dans AL

INT 21H ;

Fonction 9 : affiche une chaine de caractères pointés par DX

mov DX,OFFSET chaine ; pointe vers l’adresse du premier caractère de la chaine de


carcatères chaine

MOV AH,9; fonction n° 9

INT 21H

chaine db "Hello world$" ; message à afficher

Fonction 4CH : fin d’un programme.

MOV AX,4c00h

Int 21h

3
Institut Supérieur d’Informatique L1IRS 2021-2022

5. Affichage d’une chaine de caractères à l’écran


Pour indiquer à la routine d’interruption 21 qu’elle doit afficher à l’écran une chaîne de caractère, il
faut cette fois mettre la valeur 9H dans AH (au lieu de 2H pour un simple caractère).
L’adresse du début de la chaîne de caractères est donnée par : L’adresse du segment dans lequel elle
se trouve. (Dans notre cas le contenu du registre CS) que l’on doit charger dans le registre DS (Data
Segment). NB : on ne peut charger DS qu’à partir d’un registre. Il faudra donc d’abord charger la
valeur de CS par exemple dans AX, puis transférer AX dans DS. L’offset par rapport à cette adresse
que l’on doit charger dans le registre DX La fin de la chaîne de caractère doit être indiquée par la
présence d’un caractère $ qui doit obligatoirement finir cette chaîne, sinon la routine d’interruption
affiche tous les caractères jusqu’à la fin du segment ou jusqu’à ce qu’elle rencontre un octet
contenant le code du caractère. (13 → retour chariot, 10 → ligne suivante, $ → fin de chaîne de
caractères).

4
Institut Supérieur d’Informatique L1IRS 2021-2022

Manipulation
Exemple 1:
Voici un petit exemple en assembleur qui écrit la lettre ‘A’ à l’écran :
mov dl,41h

mov ah,02 ;

int 21h;

Examinons-le ligne par ligne :

- L’instruction « MOV DL, 41h » demande au processeur de mettre dans le registre DL le code
ASCII de la lettre ‘A', c'est-à-dire 65, ou 41h ;
- « MOV AH, 02 » : mettre le nombre 2 dans AH ;
- Enfin, la dernière instruction appelle l'interruption numéro 21h. La fonction n°2 de l’interruption
21H permet d’afficher un caractère à l’écran.
Exemple 2 :
Exemple 2.1
Voici un petit exemple en assembleur qui écrit la lettre 'A' puis ligne suivante puis début de ligne
puis 'B' (AB en vertical) :
MOV dl, 41h
MOV Ah, 02h ;
INT 21h
MOV dl,0ah ;
MOV ah,02h ;
INT 21h ;6
MOV dl,0dh ;
MOV ah,02h ;
INT 21h ;9
MOV dl, 42h ;
MOV Ah, 02h ;
INT 21h ;
Exemple 2.2
Voici un petit exemple en assembleur qui ecrit la lettre 'A' pui ligne suivante puis 'B' :
(AB en diagonal)
MOV dl, 41h ;code ASCII lettre A
MOV Ah, 02h ;
5
Institut Supérieur d’Informatique L1IRS 2021-2022

INT 21h
MOV dl,0ah ;code ASCII Nouvelle Ligne
MOV ah,02h ;
INT 21h ;
MOV dl, 42h ;code ASCII lettre B
MOV Ah, 02h ;
INT 21h ;
Exemple 3 :
Voici un petit exemple en assembleur qui écrit une chaine de caractères à l’écran :
mov ah,09h ; Fonction 09h
mov dx,offset message ; Paramètre: dx reçoit l'adresse de message
int 21h ; Appeler la fonction 21h
int 20h ; Appeler la fonction 20h (Fin du programme)
message db "Hello world !$" ; message à afficher entre guillemets, $ : fin de la chaine de caractères.

Figure 1 : Tableau des codes ASCII

6
Institut Supérieur d’Informatique L1IRS 2021-2022

Travail Demandé :

Exercice 1 : Saisie et affichage d’un caractère


Réaliser un programme permettant de saisir un caractère (int 21H, AH=07) et de l’afficher (int 21h,
AH=02).
Indications :
Dans notre exemple, il faudra mettre la valeur 2H dans le registre AH pour que cette routine permet
d’afficher à l’écran le caractère correspondant au code ASCII contenu dans le registre DL.
‒ L'interruption 21H permet quand AH = 07H d'attendre le premier caractère tapé au clavier.
‒ Le caractère se trouve alors dans AL.
‒ Chargez le registre DL avec le code ASCII du caractère que vous voulez afficher, puis chargez
2H dans AH et lancez l’interruption 21H.

Exercice 2 : Programme d’affichage d’un point d’interrogation


On se propose d’écrire un programme capable d’afficher à l’écran un point d’interrogation. La
séquence d’instructions en question est la suivante :
MOV DL,3Fh  place la valeur 3F dans le registre DL (3F est le code ASCII du point
d’interrogation)
MOV AH,2h  place la valeur 2 dans le registre AH
INT 21h  il s’agit d’une interruption logicielle : le DOS examine la valeur placée dans le
registre AH qui représente la fonction à exécuter. La valeur 2 dans le registre AH indique au DOS
d’afficher un caractère à l’écran. C’est le caractère ASCII représenté par le nombre résidant dans le
registre DL qui sera affiché.
INT 20h  INT 20h (marque la fin du programme).

Exécuter ce programme.

7
Institut Supérieur d’Informatique L1IRS 2021-2022

Exercice 3 : Programme d’affichage d’une série de caractères


Le programme ci-dessous permet d’afficher à l’écran la série de caractères suivants :
?@A B ………..Y Z

Instruction Commentaire
MOV DL,3Fh …………………………………………………………………………………….
l1: MOV AH,2 …………………………………………………………………………………….
INT 21h …………………………………………………………………………………….
INC DL …………………………………………………………………………………….
CMP DL,5Bh …………………………………………………………………………………….
…………………………………………………………………………………….
…………………………………………………………………………………….
JNE l1 …………………………………………………………………………………….
INT 20h …………………………………………………………………………………….

Exécuter et commenter les différentes instructions de ce programme.

Exercice 4 : Affichage de l’alphabet en majuscule et en minuscule


Réaliser un programme permettant d’afficher (mov AH=02, int 21H) l’alphabet en majuscule.
Réaliser un programme permettant d’afficher (mov AH=02, int 21H) l’alphabet en minuscule.

N.B Voir Exercice 3

Exercice 5 : Affichage d’une chaine de caractères


Réaliser un programme permettant d’afficher la chaine de caractères suivante :
« ISI L1IRS03 2021-2022 »

Vous aimerez peut-être aussi