La pile (Stack) et ses instructions
La pile, ou stack en anglais, est une zone de mémoire temporaire utilisée pour stocker des données de petite taille, comme des registres ou des constantes. Elle fonctionne selon le principe LIFO (Last In, First Out), ce qui signifie que le dernier élément ajouté est le premier à être retiré.
Lorsqu’une valeur est placée dans la pile, elle est prioritaire par rapport aux valeurs déjà présentes. Lorsqu’une valeur est récupérée, c’est celle qui a été ajoutée en dernier qui est utilisée.
Cette organisation permet de gérer efficacement les sauvegardes de registres, les appels de sous-programmes et le passage de paramètres lors de l’exécution des programmes en assembleur.
Les instructions de la pile
La pile est manipulée en assembleur à l’aide de deux instructions principales : PUSH et POP.
L’instruction PUSH
L’instruction PUSH permet de placer une valeur au sommet de la pile.
Elle peut prendre comme opérande :
-
un registre de 16 ou 32 bits
-
une valeur immédiate de 16 ou 32 bits
Exemples
-
AX est placé en premier au sommet de la pile.
-
Ensuite, BX est ajouté au sommet, repoussant AX au deuxième rang.
-
La valeur immédiate
1230est empilée en premier. -
AX est ensuite ajouté au sommet, repoussant
1230en deuxième position.
L’instruction POP
L’instruction POP permet de récupérer la valeur située au sommet de la pile et de la placer dans un registre.
-
L’opérande de
POPdoit être un registre de 16 ou 32 bits.
Exemples
-
Si la pile contient, dans l’ordre du sommet : BX, AX
-
BX reçoit la première valeur de la pile (BX)
-
AX reçoit la deuxième valeur (AX)
On pourrait inverser l’ordre des POP pour récupérer les valeurs dans des registres différents.
-
Pour la pile contenant : AX, 1230
-
CX reçoit la valeur de AX (sommet de la pile)
-
DX reçoit la valeur 1230 (élément suivant)
Utilité de la pile
La pile est particulièrement utile pour sauvegarder temporairement les valeurs des registres lors de l’exécution de routines.
-
Dans certaines fonctions, tous les registres peuvent être utilisés, mais leur nombre est limité.
-
La pile permet de préserver les valeurs initiales afin de les restaurer après utilisation.
Limitation : les instructions de pile sont plus lentes que les registres, car la pile est une zone mémoire, tandis que les registres sont directement intégrés au processeur.
Les interruptions et leurs instructions
Un ordinateur possède de nombreux périphériques, comme l’imprimante, la souris ou le modem. Le BIOS (Basic Input/Output System), qui se charge à chaque démarrage, fournit des fonctions d’accès à ces périphériques via ce que l’on appelle des interruptions.
Chaque interruption correspond à une fonction spécifique, et bien que les BIOS varient selon les constructeurs, ils restent généralement compatibles au niveau des interruptions.
Principales interruptions du BIOS
Les interruptions les plus utilisées sont classées en sept catégories principales :
-
Int 10h : Fonctions vidéo
-
Int 13h : Fonctions disque
-
Int 14h : Fonctions de communication sur port série
-
Int 15h : Fonctions système (peu utilisées)
-
Int 16h : Fonctions clavier
-
Int 17h : Fonctions imprimante
-
Int 1Ah : Fonctions de gestion de l’horloge
Chaque interruption offre plusieurs fonctions internes, appelées sous-fonctions, qui permettent d’effectuer des opérations précises sur le périphérique correspondant.
Documentation et références
Pour programmer efficacement avec les interruptions, il est essentiel de disposer d’une liste détaillée des fonctions disponibles.
-
Des références comme HelpPC de David Jurgens ou des ouvrages tels que La Bible PC proposent ces listes complètes.
-
Ces documents sont indispensables pour consulter les codes des interruptions et leurs paramètres afin de les utiliser correctement dans vos programmes assembleur.
Les instructions des interruptions
En assembleur, l’instruction la plus importante pour gérer les interruptions est INT.
Elle permet d’appeler une fonction spécifique d’une catégorie d’interruptions.
Utilisation de INT
Avant d’utiliser INT, il est nécessaire de configurer les registres avec les valeurs appropriées, indiquées dans une liste d’interruptions.
-
Dans la plupart des cas, il suffit de modifier le registre AX, mais certaines fonctions nécessitent la configuration de plusieurs registres.
-
Ensuite, l’instruction
INTest utilisée avec le numéro de la catégorie de l’interruption désirée.
Exemple : passer en mode texte 80×25 caractères
-
AX = 03h: sélection du mode texte 80×25 -
INT 10h: appel de la catégorie 10h (fonctions vidéo)
Les interruptions permettent de réaliser des actions complexes plus facilement, sans devoir écrire du code direct pour gérer le matériel.
Deuxième programme : affichage d’un texte
Nous allons maintenant créer un programme qui affiche un message à l’écran : Hello World.
Enregistrez le fichier sous C2.ASM et assemblez-le avec A86 comme expliqué précédemment.
Analyse du programme
-
Initialisation du mode texte
-
Configure le mode vidéo 80×25 caractères.
-
Inutile sous DOS, qui est déjà en mode 80×25, mais nécessaire si un autre mode était actif.
-
Préparation de l’affichage
-
DXcontient l’adresse du texte à afficher (offset Message). -
AH = 09hsélectionne la fonction DOS d’affichage d’une chaîne de caractères. -
INT 21hdéclenche l’interruption pour afficher le texte.
-
Retour au DOS
-
AX = 4C00h: fonction DOS pour terminer le programme et retourner au système. -
INT 21hexécute l’interruption système.
Explication sur le label et le texte
-
Messageest un label permettant d’identifier le texte dans le programme. -
On pourrait utiliser n’importe quel nom, à condition de mettre à jour
MOV DX, offset Message. -
Les caractères du texte sont convertis en codes ASCII lors de l’assemblage.
-
Le symbole
$indique la fin de la chaîne.-
Sans ce symbole, le programme ne saurait pas où s’arrête le texte, ce qui pourrait provoquer des problèmes d’affichage ou des plantages dans certains cas.
-