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

Assembler Programming Techniques and Exercises

Computer Science - Assembly Language · DOCX · 12 pages

Consulter le document original →

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 :

  1. 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.
  2. 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 TAB1 initialisée avec les valeurs 4, 7, 3, 6 et réserver une table TAB2 de même taille.
  • Écrire un programme pour remplir TAB2 avec des valeurs entrées au clavier, puis afficher ces valeurs.
  • Recopier TAB1 dans TAB2 en ordre inverse.
  • Afficher la table TAB1 et trouver son minimum, stocké dans AX.
  • Trouver le maximum de TAB1, le stocker dans BX et 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, DD selon leur taille, avec ou sans initialisation.
  • La pseudo-instruction DUP permet de répéter une initialisation pour des tableaux.
  • La pile est déclarée dans un segment de type STACK et nécessite l’initialisation des registres SS et SP.
  • Les procédures sont déclarées avec PROC et ENDP, et appelées avec CALL.
  • 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.

Partager

Commentaires

Aucun commentaire pour le moment. Posez la première question.

Les commentaires sont relus avant publication. Votre e-mail n'est jamais affiché.

← Toutes les révisions