Assembler Programming Techniques and Exercises
Cette leçon porte sur les techniques de programmation en assembleur, en particulier la structure générale d’un programme, la déclaration des données, la gestion de la pile, la définition et l’appel de procédures, ainsi que plusieurs exercices pratiques pour manipuler des chaînes de caractères, des tableaux et des entrées/sorties clavier-écran via l’interruption 21H du DOS.
D'après le document Assembler Programming Techniques and Exercises
Cet article a été rédigé automatiquement à partir du document source, puis vérifié avant publication.
Document source
Computer Science - Assembly Language · DOCX · 12 pages
Cette leçon porte sur les techniques de programmation en assembleur, en particulier la structure générale d’un programme, la déclaration des données, la gestion de la pile, la définition et l’appel de procédures, ainsi que plusieurs exercices pratiques pour manipuler des chaînes de caractères, des tableaux et des entrées/sorties clavier-écran via l’interruption 21H du DOS. Elle s’inscrit dans un cours d’initiation à l’assembleur, visant à familiariser les étudiants avec la programmation bas niveau et la gestion mémoire.
Structure générale d’un programme assembleur
Un programme assembleur se compose de plusieurs parties distinctes :
- Déclaration des données dans un segment appelé
Data SEGMENT, où sont définies toutes les variables utilisées. - Déclaration de la pile dans un segment de type
STACK, où l’on réserve un espace mémoire pour la pile. - Le code du programme dans un segment
CODE SEGMENT, où s’écrit la logique du programme.
Un exemple minimal de programme se termine par une instruction standard de retour au DOS :
MOV AH, 4CH
INT 21h
Les registres de segments sont initialisés pour pointer vers les segments appropriés, notamment DS pour les données et SS pour la pile.
Déclaration des données
Les variables sont déclarées dans le segment Data SEGMENT. Chaque variable doit avoir :
- Un nom (lettres, chiffres, ou underscore, commençant par une lettre, max 8 caractères)
- Une taille, indiquée par une pseudo-instruction :
DB(1 octet),DW(2 octets),DD(4 octets) - Une valeur initiale, ou un point d’interrogation
?si non initialisée
Exemple :
AGE DB ?
Pour les caractères, DB sert aussi à définir des chaînes de caractères entre apostrophes, terminées par $ si elles doivent être affichées à l’écran. Par exemple :
PHRASE DB 'CELA DEFINIT UNE PHRASE$'
Cette déclaration réserve 23 octets initialisés aux codes ASCII des lettres et espaces.
Utilisation de la pseudo-instruction DUP
La pseudo-instruction DUP permet de répéter plusieurs fois une initialisation. Par exemple :
tab1 db 10 dup (0)déclare un tableau de 10 octets initialisés à 0.tab3 dw 100 dup (?)réserve 100 mots non initialisés.- On peut aussi répéter une séquence de valeurs, par exemple :
tab4 dw 5 dup (512,97,0,3,7)
Déclaration et initialisation de la pile
La pile est déclarée dans un segment de type STACK, par exemple :
PILE SEGMENT STACK
DW 80 DUP (?)
PILE ENDS
Cette déclaration réserve 80 mots pour la pile. Le mot-clé STACK indique à l’assembleur qu’il s’agit d’un segment de pile.
Pour utiliser la pile, il faut initialiser les registres SS et SP :
ASSUME SS:PILE
MOV AX, PILE
MOV SS, AX
Le registre SP pointe automatiquement vers le sommet de la pile.
Déclaration et appel de procédures
Une procédure est un bloc d’instructions regroupé entre les mots-clés PROC et ENDP. Elle est précédée d’une étiquette qui sert de nom, et peut être déclarée comme near si elle se trouve dans le même segment que le programme appelant.
Exemple de déclaration :
Somme PROC near
instruction1
instruction2
...
RET
Somme ENDP
L’appel d’une procédure se fait avec l’instruction CALL suivie du nom de la procédure :
CALL Somme
Exemple complet de programme assembleur
Le programme suivant illustre la déclaration des segments, l’initialisation des registres, l’appel d’une procédure et le retour au DOS :
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
Utilisation des interruptions DOS (INT 21H) pour les entrées/sorties
L’interruption 21H du DOS offre de nombreuses fonctions pour la gestion des entrées/sorties clavier-écran. Voici les principales fonctions utilisées :
| Fonction (AH) | Paramètre d'entrée | Paramètre de sortie | Syntaxe | Fonction |
|---|---|---|---|---|
| 01 | AH | AL | MOV AH,01 INT 21H |
Lecture d’un caractère au clavier avec écho, stocké dans AL |
| 02 | AH, DL | MOV AH,02 INT 21H |
Affichage du caractère contenu dans DL à l’écran | |
| 06 | AH, DL | MOV AH,06 INT 21H |
Lecture et écriture combinées sur clavier-écran | |
| 07 | AH | AL | MOV AH,07 INT 21H |
Lecture directe au clavier sans écho, caractère dans AL |
| 08 | AH | AL | MOV AH,08 INT 21H |
Lecture d’un caractère au clavier sans écho, dans AL |
| 09 | AH, DX | LEA DX,MESSAGE MOV AH,09 INT 21H |
Affichage d’une chaîne de caractères terminée par '$' | |
| 0AH | AH, DX | LEA DX,MESSAGE MOV AH,0AH INT 21H |
Lecture d’un message entier au clavier |
Exercices pratiques
Exercice 1 : Affichage d’un message
Deux cas sont proposés :
- Affichage d’une chaîne de caractères : on réserve dans le segment de données une chaîne initialisée par
'BONJOUR$'. On utilise la fonction 09H de l’interruption 21H (AH=09H, DX pointe vers la chaîne) pour afficher le message. - Affichage caractère par caractère : on réserve une chaîne
'BONJOUR'sans le$. On utilise la fonction 06H (AH=06H) pour afficher un caractère à la fois, avec CX comme compteur et BX comme pointeur vers les caractères.
Exercice 2 : Acquisition des caractères du clavier
Écrire un programme qui lit les caractères du clavier et les stocke dans un buffer mémoire du segment de données. L’acquisition continue jusqu’à ce que l’utilisateur appuie sur RETURN ou ait entré 30 caractères. Le programme retourne l’adresse du buffer en BX et le nombre de caractères lus en CX.
Exercice 3 : Manipulation de tableaux
Plusieurs exercices sur des tableaux d’octets :
- Définir une table
TAB1initialisée avec les valeurs 4, 7, 3, 6 et réserver une tableTAB2de même taille. - Écrire un programme pour remplir
TAB2avec des valeurs entrées au clavier, puis afficher ces valeurs. - Recopier
TAB1dansTAB2en ordre inverse. - Afficher la table
TAB1et trouver son minimum, stocké dansAX. - Trouver le maximum de
TAB1, le stocker dansBXet afficher le message ‘LE MAX EST :’.
Points clés à retenir
- Un programme assembleur est structuré en segments : données, pile, code.
- Les variables sont déclarées avec
DB,DW,DDselon leur taille, avec ou sans initialisation. - La pseudo-instruction
DUPpermet de répéter une initialisation pour des tableaux. - La pile est déclarée dans un segment de type
STACKet nécessite l’initialisation des registresSSetSP. - Les procédures sont déclarées avec
PROCetENDP, et appelées avecCALL. - L’interruption 21H du DOS offre des fonctions essentielles pour la gestion des entrées/sorties clavier-écran.
- Les exercices pratiques permettent de manipuler chaînes, tableaux, et d’utiliser les interruptions pour l’affichage et la lecture clavier.
Commentaires
Aucun commentaire pour le moment. Posez la première question.