TP n°: 4-5 - Assembly Language Programming Basics and Exercises

1/12
100%

TP n° :4-5

RAPPEL

TITLE ………………………………. ; titre du programme

PARTIE 1 : Déclaration des données utilisées au cours du programme

Data SEGMENT

………………………………………. ; Généralement toutes les variables se trouvent dans ce segment de données appelé Data.

Data ENDS

PARTIE 2 : Déclaration de la pile

Pile SEGMENT STACK

DW 80DUP( ?) ; Le DOS construit automatiquement une pile dans le segment STACK on réserve ici 80 mots

PILE ENDS

PARTIE 3 : Le programme

CODE SEGMENT

ASSUME CS :CODE, DS :DATA, ES :nothing ;dit à l’assembleur vers quel segment on désire que le registre segment pointe

Main :

; initialiser les registres de segments (sauf CS )

;ecrire le code du programme

MOV AH, 4CH ; fonction standard sert au retour au DOS

INT 21h

CODE ENDS

END Main

PARTIE 1 : Déclaration des données utilisées au cours d’un programme

Data SEGMENT

………………………………………. ; Généralement toutes les variables se trouvent dans ce segment de données Data ENDS

Pour chaque variable, il faut spécifier:

  • son nom
  • sa taille (pseudo-instruction)
  • son contenu initial éventuel

1°/Le nom

  • ne peut contenir que des lettres ou des chiffres (et "\_")
  • doit commencer par une lettre
  • doit avoir une taille de 8 caractères maximum

2°/La taille : les pseudo-instructions

DB: DECLARE BYTE (1 byte)

DW : DECLARE WORD (2 bytes)

DD : DECLARE DOUBLE (4 bytes)

3°/La valeur initiale éventuel

Éventuel car on n’est pas obligé d'initialiser une valeur. Dans ce cas on met un "?".

Publicité

Exemple:

AGE DB ? : Nom(AGE), taille (DB), valeur initiale (?)

Déclaration des variables de type "caractères".

L'instruction DB est aussi utilisée pour définir des chaînes de caractères.

Une chaîne de caractères doit se trouver entre apostrophes;

si elle est destinée à l'affichage (sur l'écran), elle devra être terminée par le signe '$'.

Si on souhaite définir une variable initialisée avec la lettre 'A', on écrira:

| | | | |

| --- | --- | --- | --- |

| | LETTRE | DB | 65 |

| ou | LETTRE | DB | 041h |

| ou | LETTRE | DB | 'A' |

Remarque :

On peut définir une phrase:

PHRASE       DB       'CELA DEFINIT UNE PHRASE'

Qui déclare 23 bytes en mémoire, initialisés par les lettres de la phrase. (Espaces compris)

En mémoire, on trouvera donc

| | |

| --- | --- |

| | C,E,L,A, ,D,E,F,I,N,I,... |

| ou | 67,69,76,65,32,68,69,70,73,78,73,... |

| ou | 043h,045h,04Ch,041h,020h,044h,045h,046h,049h,04Eh,049h,... |

| | |

| | |

Initialisation de data segment

Assume ds:data

mov ax, data

mov ds,ax

Les tableaux.

Il est également possible d'utiliser, conjointement avec les pseudo-instructions de déclaration de variables, la pseudo-instruction DUP. Ce DUP indique à l'assembleur qu'il faut répéter (dupliquer) plusieurs fois l'opération qui le précède.

Exemples:

\* Déclaration d'un tableau de 10 octets initialisés à 0 :

tab1   db   10   dup   (0)

\* Déclaration d'un tableau de 5 doubles mots initialisés respectivement à 0, 1, 2, 3 et 4 :

tab2   dd   5   dup   (0, 1, 2, 3, 4)

\* Déclaration d'un tableau de 100 mots non initialisés :

tab3   dw   100   dup   (?)

\* Les deux pseudo-instructions suivantes sont équivalentes :

Publicité

tab4   dw   512,97,0,3,7

tab4   dw   5   dup   (512,97,0,3,7)

Initialisation de data segment

Assume ds:data

mov ax, data

mov ds,ax

Déclaration d'une pile

Pile SEGMENT STACK

DW 80DUP( ?) ; Le DOS construit automatiquement une pile dans le segment STACK on réserve ici 80 mots

PILE ENDS

Pour utiliser une pile en assembleur, il faut déclarer un segment de pile, et y réserver un espace suffisant. Ensuite, il est nécessaire d'initialiser les registres SS et SP pour pointer sous le sommet de la pile.

Voici la déclaration d'une pile de 200 octets :

pile SEGMENT stack ; mot clef stack car pile

DW 100 dup (?) ; reserve espace

pile ENDS

Noter le mot clef ``stack '' après la directive SEGMENT, qui indique à l'assembleur qu'il s'agit d'un segment de pile.

(voir figure ).

| | | | |

| --- | --- | --- | --- |

| | | | | --- | | ![ps/basepile.png](data:image/png;base64...) | | |

Figure 3.4: Une pile vide. L'étiquette base-pile repère la base de la pile, valeur initiale de SP.

Après les déclarations ci-dessus, on utilisera la séquence d'initialisation :

ASSUME SS:PILE

MOV AX, PILE

MOV SS, AX ; init Stack Segment

Noter que le registre SS s'initialise de façon similaire au registre DS; par contre, on peut accéder directement au registre SP.

Déclaration d'une procédure

Etant donné qu'une procédure est une suite d'instructions, il s'agit de regrouper les instructions composant la procédure entre des mots clés. L'ensemble de cette manipulation est appelée déclaration de procédure.

Ces mots clés permettant la déclaration de la procédure sont une étiquette (qui représente le nom de la fonction) précédant le mot clé PROC marquant le début de la procédure, suivi de near (qui signale que la procédure est située dans le même segment que le programme appelant) et RET désignant la dernière instruction, et enfin le mot clé ENDP qui annonce la fin de la procédure. Ainsi une déclaration de procédure ressemble à ceci :

| | | |

| --- | --- | --- |

| étiquette | PROC | near |

| | instruction1 | |

| | instruction2 | |

| | ... | |

| | RET | |

| étiquette | ENDP | |

Appel d’une procédure : C’est l'instruction CALL qui permet l'appel d'une procédure. Elle est suivie soit d'une adresse 16 bits, désignant la position du début de la procédure, ou bien du nom de la procédure (celui de l'étiquette qui précède le mot clé PROC).

Publicité

Exemple :

| | | |

| --- | --- | --- |

| Exemple en assembleur | Effet | Résultats |

| ; Programme DATA SEGMENT SOM DW 5 DUP (?) VAR DB 2 DUP (?) DATA ENDS pile SEGMENT stack DW 100 dup (?) pile ENDS Code segment Assume cs :code, DS :DATA, SS:PILE Main : MOV AX,DATA MOV DS,AX MOV AX, PILE MOV SS, AX MOV AX,9 MOV BX,4 PUSH AX PUSH BX Call Somme POP BX POP AX MOV AH,4CH INT 21H Somme Proc near ADD AX,BX MOV SOM,AX MOV VAR,BL RET SOMME ENDP CODE ENDS END Main | Titre du programme Déclaration des données Déclaration de la pile Corps du programme Déclaration du segment des données Initialisation de la pile AX <- 9 BX <- 4 …………………………………………… …………………………………………… …………………………………………… …………………………………………… …………………………………………… …………………………………………… …………………………………………… …………………………………………… …………………………………………… …………………………………………… | L’état du registre flag ………………………………............ AX:…….…., BX:…..….…, SP:……..….. AX:…..…..., BX:…………, SP:..……….. AX:…….…., BX:…..….…, SP:……..….. AX:…..…..., BX:…………, SP:..……….. AX:…….…., BX:…..….…, SP:……..…. . AX:…..…..., BX:…………, SP:..……….. AX:…….…., BX:…..….…, SP:……..….. AX:…..…..., BX:…………, SP:..……….. AX:…….…., BX:…..….…, SP:……..….. AX:…..…..., BX:…………, SP:..……….. AX:…….…., BX:…..….…, SP:……..….. L’état du registre flag ………………………………............ |

Exercice n° 1: Stockage en mémoire d’un message et affichage sur l’écran

On se propose d’écrire l’organigramme et le programme permettant d’afficher le message suivant sur l’écran « BONJOUR » selon les deux cas suivants :

1. Affichage d’une chaine de caractère : Réserver dans le segment de donnée une chaine de caractère « Message » initialisée par ‘BONJOUR$’.

Faire appel à la fonction 09H de l’interruption 21 du DOS (09H en AH, La chaine des caractères à afficher en DX).

NB : Affichage d’une chaine de caractère décalée dans le segment de donnée(DS) et se termine par $.

| | |

| --- | --- |

| organigramme | Programme en assembleur |

| | |

1. Affichage d’un seul caractère : Réserver dans le segment de donnée une chaine de caractère « Message » initialisée par ‘BONJOUR’.

Faire appel à la fonction 06H de l’interruption 21 du DOS (06H en AH, le code du caractère à afficher en DL).utiliser CX en compteur des caractères et BX en pointeur d’adresse vers les caractères.

| | |

| --- | --- |

| organigramme | Programme en assembleur |

| | |

Exercice n°2 : Acquisition des caractères du clavier en mémoire

Ecrire le programme permettant de lire les caractères d’un clavier et de les mettre dans un buffer en mémoire dans le segment de donnée. L’acquisition continue jusqu’à ce que l’opérateur appuie sur RETURN ou fasse entrer 30 touches.

Ce programme devra retourner l’adresse de départ du buffer en BX et le nombre de caractères en CX. Seulement BX et CX seront affectés. Vérifier avec DEBUG.

| | |

| --- | --- |

| organigramme | Programme en assembleur |

| | |

Exercice 1:

En utilisant la structure générale d’un programme assembleur de type.EXE, définir dans le segment de donnée une table d’octets  ‘TAB1’ initialisée avec les valeurs : 4, 7, 3 et 6 et réserver quatre octets pour ‘TAB2 ‘.

1. Écrire alors le programme permettant de :

a- Remplir la table TAB2 par les valeurs suivante : 1,5 ,2 ,8 en utilisant la fonction lecture de clavier 01 de l’interruption 21 puis faire l’affichage en utilisant la fonction 02 de l’interruption 21.

b- Recopier en ordre inverse la table ‘TAB1’ en table ‘TAB2’.

Vérifier le résultat à l’aide du DEBUG, expliquer votre démarche en donnant l’organigramme et le programme en assembleur.

| | |

| --- | --- |

| Organigramme | Programme en assembleur |

| | |

Exercice 2:

Publicité

En utilisant la structure générale d’un programme assembleur de type.EXE, définir dans le segment de donnée une table d’octets  ‘TAB1’ initialisée avec les valeurs : 4, 7, 3 et 6.

1. Écrire alors le programme permettant de :

a- Faire l’affichage de la table TAB1 en utilisant la fonction 02 de l’interruption 21.

b- Trouver le minimum de ‘TAB1’ et le mettre dans AX.

Vérifier le résultat à l’aide du DEBUG, expliquer votre démarche en donnant l’organigramme et le programme en assembleur.

| | |

| --- | --- |

| organigramme | Programme en assembleur |

| | |

Exercice 3:

En utilisant la structure générale d’un programme assembleur de type.EXE, définir dans le segment de donnée une table d’octets  ‘TAB1’ initialisée avec les valeurs : 4, 7, 3 et 6 .

1. Écrire alors le programme permettant de :

a- Trouver le maximum de TAB1 et le mettre dans BX.

b- Afficher le maximum sous la forme : ‘LE MAX EST :’

Vérifier le résultat à l’aide du DEBUG, expliquer votre démarche en donnant l’organigramme et le programme en assembleur.

| | |

| --- | --- |

| organigramme | Programme en assembleur |

| | |

![](data:image/x-emf;base64...)Le code ASCII

Interruption 21H

| | | | | |

| --- | --- | --- | --- | --- |

| Fonction | Parametre d’entree | Parametre de sortie | Syntaxe | Fonction |

| 1 | AH | AL | MOV AH,01 INT 21H | Lecture du caractère entre au clavier avec écho et le range dans AL |

| 2 | AH,DL | | MOV AH,02 INT 21H | Affichage du caractère contenu dans le registre DL sur l’écran |

| 3 | AH | AL | MOV AH,03 INT 21H | Lecture d’un caractère sur le port série auxiliaire RS 232 et le range dans AL |

| 4 | AH,DL | | MOV AH,04 INT 21H | Ecriture d’un caractère contenue dans DL sur le port série auxiliaire RS 232 |

| 5 | AH,DL | | MOV AH,05 INT 21H | Ecriture d’un caractère contenue dans DL sur le port d’imprimante |

| 6 | AH,DL | | MOV AH,06 INT 21H | Lecture et écriture combine sur clavier écran |

| 7 | AH | AL | MOV AH,07 INT 21H | Lecture directe au clavier sans écho. Le caractère est range dans AL |

| 8 | AH | AL | MOV AH,08 INT 21H | Lecture du caractère entre au clavier sans écho et le range dans AL |

| 9 | AH,DX | | LEA DX,MESSAGE (MOV DX,OFFSET MESSAGE) MOV AH,09 INT 21H | Envoi d’un message sur l’écran |

| 0AH | AH,DX | | LEA DX,MESSAGE MOV AH,0AH INT 21H | Lecture d’un message entier au clavier |

TP n°: 4-5 - Assembly Language Programming Basics and Exercises

Computer Architecture and Assembly Language · lab

Voir tous les documents en programmation

TP n° :4-5

RAPPEL

TITLE ………………………………. ; titre du programme

PARTIE 1 : Déclaration des données utilisées au cours du programme

Data SEGMENT

………………………………………. ; Généralement toutes les variables se trouvent dans ce segment de données appelé Data.

Data ENDS

PARTIE 2 : Déclaration de la pile

Pile SEGMENT STACK

DW 80DUP( ?) ; Le DOS construit automatiquement une pile dans le segment STACK on réserve ici 80 mots

PILE ENDS

PARTIE 3 : Le programme

CODE SEGMENT

ASSUME CS :CODE, DS :DATA, ES :nothing ;dit à l’assembleur vers quel segment on désire que le registre segment pointe

Main :

; initialiser les registres de segments (sauf CS )

;ecrire le code du programme

MOV AH, 4CH ; fonction standard sert au retour au DOS

INT 21h

CODE ENDS

END Main

PARTIE 1 : Déclaration des données utilisées au cours d’un programme

Data SEGMENT

………………………………………. ; Généralement toutes les variables se trouvent dans ce segment de données Data ENDS

Pour chaque variable, il faut spécifier:

  • son nom
  • sa taille (pseudo-instruction)
  • son contenu initial éventuel

1°/Le nom

  • ne peut contenir que des lettres ou des chiffres (et "\_")
  • doit commencer par une lettre
  • doit avoir une taille de 8 caractères maximum

2°/La taille : les pseudo-instructions

DB: DECLARE BYTE (1 byte)

DW : DECLARE WORD (2 bytes)

DD : DECLARE DOUBLE (4 bytes)

3°/La valeur initiale éventuel

Éventuel car on n’est pas obligé d'initialiser une valeur. Dans ce cas on met un "?".

Publicité

Exemple:

AGE DB ? : Nom(AGE), taille (DB), valeur initiale (?)

Déclaration des variables de type "caractères".

L'instruction DB est aussi utilisée pour définir des chaînes de caractères.

Une chaîne de caractères doit se trouver entre apostrophes;

si elle est destinée à l'affichage (sur l'écran), elle devra être terminée par le signe '$'.

Si on souhaite définir une variable initialisée avec la lettre 'A', on écrira:

| | | | |

| --- | --- | --- | --- |

| | LETTRE | DB | 65 |

| ou | LETTRE | DB | 041h |

| ou | LETTRE | DB | 'A' |

Remarque :

On peut définir une phrase:

PHRASE       DB       'CELA DEFINIT UNE PHRASE'

Qui déclare 23 bytes en mémoire, initialisés par les lettres de la phrase. (Espaces compris)

En mémoire, on trouvera donc

| | |

| --- | --- |

| | C,E,L,A, ,D,E,F,I,N,I,... |

| ou | 67,69,76,65,32,68,69,70,73,78,73,... |

| ou | 043h,045h,04Ch,041h,020h,044h,045h,046h,049h,04Eh,049h,... |

| | |

| | |

Initialisation de data segment

Assume ds:data

mov ax, data

mov ds,ax

Les tableaux.

Il est également possible d'utiliser, conjointement avec les pseudo-instructions de déclaration de variables, la pseudo-instruction DUP. Ce DUP indique à l'assembleur qu'il faut répéter (dupliquer) plusieurs fois l'opération qui le précède.

Exemples:

\* Déclaration d'un tableau de 10 octets initialisés à 0 :

tab1   db   10   dup   (0)

\* Déclaration d'un tableau de 5 doubles mots initialisés respectivement à 0, 1, 2, 3 et 4 :

tab2   dd   5   dup   (0, 1, 2, 3, 4)

\* Déclaration d'un tableau de 100 mots non initialisés :

tab3   dw   100   dup   (?)

\* Les deux pseudo-instructions suivantes sont équivalentes :

Publicité

tab4   dw   512,97,0,3,7

tab4   dw   5   dup   (512,97,0,3,7)

Initialisation de data segment

Assume ds:data

mov ax, data

mov ds,ax

Déclaration d'une pile

Pile SEGMENT STACK

DW 80DUP( ?) ; Le DOS construit automatiquement une pile dans le segment STACK on réserve ici 80 mots

PILE ENDS

Pour utiliser une pile en assembleur, il faut déclarer un segment de pile, et y réserver un espace suffisant. Ensuite, il est nécessaire d'initialiser les registres SS et SP pour pointer sous le sommet de la pile.

Voici la déclaration d'une pile de 200 octets :

pile SEGMENT stack ; mot clef stack car pile

DW 100 dup (?) ; reserve espace

pile ENDS

Noter le mot clef ``stack '' après la directive SEGMENT, qui indique à l'assembleur qu'il s'agit d'un segment de pile.

(voir figure ).

| | | | |

| --- | --- | --- | --- |

| | | | | --- | | ![ps/basepile.png](data:image/png;base64...) | | |

Figure 3.4: Une pile vide. L'étiquette base-pile repère la base de la pile, valeur initiale de SP.

Après les déclarations ci-dessus, on utilisera la séquence d'initialisation :

ASSUME SS:PILE

MOV AX, PILE

MOV SS, AX ; init Stack Segment

Noter que le registre SS s'initialise de façon similaire au registre DS; par contre, on peut accéder directement au registre SP.

Déclaration d'une procédure

Etant donné qu'une procédure est une suite d'instructions, il s'agit de regrouper les instructions composant la procédure entre des mots clés. L'ensemble de cette manipulation est appelée déclaration de procédure.

Ces mots clés permettant la déclaration de la procédure sont une étiquette (qui représente le nom de la fonction) précédant le mot clé PROC marquant le début de la procédure, suivi de near (qui signale que la procédure est située dans le même segment que le programme appelant) et RET désignant la dernière instruction, et enfin le mot clé ENDP qui annonce la fin de la procédure. Ainsi une déclaration de procédure ressemble à ceci :

| | | |

| --- | --- | --- |

| étiquette | PROC | near |

| | instruction1 | |

| | instruction2 | |

| | ... | |

| | RET | |

| étiquette | ENDP | |

Appel d’une procédure : C’est l'instruction CALL qui permet l'appel d'une procédure. Elle est suivie soit d'une adresse 16 bits, désignant la position du début de la procédure, ou bien du nom de la procédure (celui de l'étiquette qui précède le mot clé PROC).

Publicité

Exemple :

| | | |

| --- | --- | --- |

| Exemple en assembleur | Effet | Résultats |

| ; Programme DATA SEGMENT SOM DW 5 DUP (?) VAR DB 2 DUP (?) DATA ENDS pile SEGMENT stack DW 100 dup (?) pile ENDS Code segment Assume cs :code, DS :DATA, SS:PILE Main : MOV AX,DATA MOV DS,AX MOV AX, PILE MOV SS, AX MOV AX,9 MOV BX,4 PUSH AX PUSH BX Call Somme POP BX POP AX MOV AH,4CH INT 21H Somme Proc near ADD AX,BX MOV SOM,AX MOV VAR,BL RET SOMME ENDP CODE ENDS END Main | Titre du programme Déclaration des données Déclaration de la pile Corps du programme Déclaration du segment des données Initialisation de la pile AX <- 9 BX <- 4 …………………………………………… …………………………………………… …………………………………………… …………………………………………… …………………………………………… …………………………………………… …………………………………………… …………………………………………… …………………………………………… …………………………………………… | L’état du registre flag ………………………………............ AX:…….…., BX:…..….…, SP:……..….. AX:…..…..., BX:…………, SP:..……….. AX:…….…., BX:…..….…, SP:……..….. AX:…..…..., BX:…………, SP:..……….. AX:…….…., BX:…..….…, SP:……..…. . AX:…..…..., BX:…………, SP:..……….. AX:…….…., BX:…..….…, SP:……..….. AX:…..…..., BX:…………, SP:..……….. AX:…….…., BX:…..….…, SP:……..….. AX:…..…..., BX:…………, SP:..……….. AX:…….…., BX:…..….…, SP:……..….. L’état du registre flag ………………………………............ |

Exercice n° 1: Stockage en mémoire d’un message et affichage sur l’écran

On se propose d’écrire l’organigramme et le programme permettant d’afficher le message suivant sur l’écran « BONJOUR » selon les deux cas suivants :

1. Affichage d’une chaine de caractère : Réserver dans le segment de donnée une chaine de caractère « Message » initialisée par ‘BONJOUR$’.

Faire appel à la fonction 09H de l’interruption 21 du DOS (09H en AH, La chaine des caractères à afficher en DX).

NB : Affichage d’une chaine de caractère décalée dans le segment de donnée(DS) et se termine par $.

| | |

| --- | --- |

| organigramme | Programme en assembleur |

| | |

1. Affichage d’un seul caractère : Réserver dans le segment de donnée une chaine de caractère « Message » initialisée par ‘BONJOUR’.

Faire appel à la fonction 06H de l’interruption 21 du DOS (06H en AH, le code du caractère à afficher en DL).utiliser CX en compteur des caractères et BX en pointeur d’adresse vers les caractères.

| | |

| --- | --- |

| organigramme | Programme en assembleur |

| | |

Exercice n°2 : Acquisition des caractères du clavier en mémoire

Ecrire le programme permettant de lire les caractères d’un clavier et de les mettre dans un buffer en mémoire dans le segment de donnée. L’acquisition continue jusqu’à ce que l’opérateur appuie sur RETURN ou fasse entrer 30 touches.

Ce programme devra retourner l’adresse de départ du buffer en BX et le nombre de caractères en CX. Seulement BX et CX seront affectés. Vérifier avec DEBUG.

| | |

| --- | --- |

| organigramme | Programme en assembleur |

| | |

Exercice 1:

En utilisant la structure générale d’un programme assembleur de type.EXE, définir dans le segment de donnée une table d’octets  ‘TAB1’ initialisée avec les valeurs : 4, 7, 3 et 6 et réserver quatre octets pour ‘TAB2 ‘.

1. Écrire alors le programme permettant de :

a- Remplir la table TAB2 par les valeurs suivante : 1,5 ,2 ,8 en utilisant la fonction lecture de clavier 01 de l’interruption 21 puis faire l’affichage en utilisant la fonction 02 de l’interruption 21.

b- Recopier en ordre inverse la table ‘TAB1’ en table ‘TAB2’.

Vérifier le résultat à l’aide du DEBUG, expliquer votre démarche en donnant l’organigramme et le programme en assembleur.

| | |

| --- | --- |

| Organigramme | Programme en assembleur |

| | |

Exercice 2:

Publicité

En utilisant la structure générale d’un programme assembleur de type.EXE, définir dans le segment de donnée une table d’octets  ‘TAB1’ initialisée avec les valeurs : 4, 7, 3 et 6.

1. Écrire alors le programme permettant de :

a- Faire l’affichage de la table TAB1 en utilisant la fonction 02 de l’interruption 21.

b- Trouver le minimum de ‘TAB1’ et le mettre dans AX.

Vérifier le résultat à l’aide du DEBUG, expliquer votre démarche en donnant l’organigramme et le programme en assembleur.

| | |

| --- | --- |

| organigramme | Programme en assembleur |

| | |

Exercice 3:

En utilisant la structure générale d’un programme assembleur de type.EXE, définir dans le segment de donnée une table d’octets  ‘TAB1’ initialisée avec les valeurs : 4, 7, 3 et 6 .

1. Écrire alors le programme permettant de :

a- Trouver le maximum de TAB1 et le mettre dans BX.

b- Afficher le maximum sous la forme : ‘LE MAX EST :’

Vérifier le résultat à l’aide du DEBUG, expliquer votre démarche en donnant l’organigramme et le programme en assembleur.

| | |

| --- | --- |

| organigramme | Programme en assembleur |

| | |

![](data:image/x-emf;base64...)Le code ASCII

Interruption 21H

| | | | | |

| --- | --- | --- | --- | --- |

| Fonction | Parametre d’entree | Parametre de sortie | Syntaxe | Fonction |

| 1 | AH | AL | MOV AH,01 INT 21H | Lecture du caractère entre au clavier avec écho et le range dans AL |

| 2 | AH,DL | | MOV AH,02 INT 21H | Affichage du caractère contenu dans le registre DL sur l’écran |

| 3 | AH | AL | MOV AH,03 INT 21H | Lecture d’un caractère sur le port série auxiliaire RS 232 et le range dans AL |

| 4 | AH,DL | | MOV AH,04 INT 21H | Ecriture d’un caractère contenue dans DL sur le port série auxiliaire RS 232 |

| 5 | AH,DL | | MOV AH,05 INT 21H | Ecriture d’un caractère contenue dans DL sur le port d’imprimante |

| 6 | AH,DL | | MOV AH,06 INT 21H | Lecture et écriture combine sur clavier écran |

| 7 | AH | AL | MOV AH,07 INT 21H | Lecture directe au clavier sans écho. Le caractère est range dans AL |

| 8 | AH | AL | MOV AH,08 INT 21H | Lecture du caractère entre au clavier sans écho et le range dans AL |

| 9 | AH,DX | | LEA DX,MESSAGE (MOV DX,OFFSET MESSAGE) MOV AH,09 INT 21H | Envoi d’un message sur l’écran |

| 0AH | AH,DX | | LEA DX,MESSAGE MOV AH,0AH INT 21H | Lecture d’un message entier au clavier |