Zero One Cyber

Contenu du cours
Tutoriel Assembleur – Chapitre 1 : Les bases indispensables pour débuter
Dans ce premier chapitre, tu découvriras les fondamentaux du langage Assembleur afin de comprendre comment un programme interagit directement avec le processeur et la mémoire. Tu apprendras : ce qu’est réellement l’Assembleur et à quoi il sert le rôle du processeur, des registres et de la mémoire la structure d’un programme assembleur les instructions de base et leur fonctionnement le flux d’exécution d’un programme les notions essentielles pour lire et comprendre du code assembleur simple Ce chapitre pose les bases indispensables pour aborder la programmation bas niveau, le reverse engineering et l’analyse de binaires dans la suite du cours. Aucun prérequis avancé n’est nécessaire : tout est expliqué pas à pas, avec une approche claire et accessible.
0/13
Programmation bas niveau : maîtriser l’Assembleur

Introduction aux modes texte

 

Faisons une pause avec les modes graphiques VGA afin de nous concentrer sur les modes texte, encore très utilisés, notamment sous DOS. Ces modes présentent plusieurs avantages importants. Ils sont généralement plus rapides que les modes graphiques et permettent l’utilisation de plusieurs pages d’affichage, ce qui ouvre la porte à des effets visuels intéressants. Certains modes graphiques, comme le Mode-X, offrent aussi cette possibilité, mais au prix d’une complexité et d’une lenteur supplémentaires.

 

La résolution des modes texte est certes plus faible que celle des modes graphiques, mais avec un peu de méthode et de patience, il est tout à fait possible de produire des effets visuels convaincants et fluides en mode texte.

 

Mise en place des modes texte via le BIOS

 

Nous ne nous attarderons pas sur les modes non standards de type VESA, car leur programmation est plus complexe. Le BIOS propose cependant plusieurs modes texte simples et largement suffisants pour réaliser de petits effets. Parmi les plus courants, on trouve le mode 40×25 en 16 couleurs, le mode 80×25 en niveaux de gris et le mode 80×25 en 16 couleurs.

 

Le mode 80×25 en 16 couleurs est le plus répandu. C’est celui utilisé par défaut par DOS. Pour activer un mode texte, il suffit d’appeler l’interruption BIOS 10h en plaçant le numéro du mode dans le registre AX. Une fois le mode activé, il devient possible d’afficher du texte à l’écran à l’aide des interruptions DOS classiques.

 

Cette méthode permet d’afficher du texte, mais elle ne donne pas accès au contrôle direct des couleurs caractère par caractère. Pour cela, deux approches existent. La première consiste à utiliser des fonctions spécifiques du BIOS vidéo. La seconde, plus puissante et plus flexible, consiste à manipuler directement la mémoire texte. C’est cette approche qui sera étudiée ici.

 

Accès direct à la mémoire texte

 

En mode 80×25, l’écran contient 2000 caractères. Chaque caractère est associé à un octet supplémentaire définissant sa couleur. Une page texte occupe donc 4000 octets en mémoire. Cette mémoire se situe à l’adresse 0B800h:0000, contrairement à la mémoire graphique qui se trouve à 0A000h:0000.

 

En plaçant le segment ES sur 0B800h et l’offset DI à zéro, on obtient un accès direct au premier caractère affiché à l’écran. Chaque caractère est stocké sous forme d’un mot de 16 bits. Le byte de poids faible contient le code ASCII du caractère, tandis que le byte de poids fort contient l’attribut de couleur.

 

Il devient alors possible d’écrire un caractère précis avec une couleur donnée directement en mémoire. Pour afficher le caractère suivant, il faut simplement avancer de deux octets, puisque chaque caractère occupe un mot complet. Cette méthode offre un contrôle total sur l’affichage et permet de modifier indépendamment chaque caractère visible à l’écran.

 

Le principe du page flipping en mode texte

 

L’un des grands avantages du mode texte est la possibilité de faire du page flipping. Cette technique consiste à écrire les données sur une page mémoire qui n’est pas actuellement affichée, pendant qu’une autre page déjà calculée est visible à l’écran. Une fois le dessin terminé, on inverse les pages. Cela permet d’éviter les scintillements et les effets de déchirure, car l’écran n’affiche que des images complètes.

 

En mode texte, la première page commence à l’offset 0. La seconde page commence à l’offset 4096, et non à 4000, car l’adressage de la mémoire vidéo se fait par blocs de 512 octets. Il est donc possible d’écrire du texte sur la seconde page sans qu’il soit immédiatement visible.

 

Pour afficher l’une ou l’autre page, on modifie un registre du contrôleur VGA, plus précisément le registre du CRTC responsable de l’adresse de départ linéaire de la mémoire texte. En changeant cette valeur, on indique à la carte graphique quelle page doit être affichée. Le basculement est instantané et permet de créer des animations fluides et propres.

 

Le principe général consiste à afficher une page pendant que l’on calcule la suivante, puis à inverser les rôles des pages en continu.

 

Autres modes texte et astuces utiles

 

Il existe également des variantes intéressantes du mode texte, comme le mode 80×50, dans lequel les caractères sont plus petits et apparaissent sous une forme presque carrée. Ce mode s’utilise de la même manière que le mode 80×25 et permet d’afficher davantage d’informations à l’écran.

 

Il est aussi possible de masquer le curseur matériel, qui peut parfois être gênant lors de la réalisation d’effets visuels. Le curseur peut être désactivé via une interruption BIOS spécifique, puis réactivé ultérieurement si nécessaire, ou simplement restauré en réinitialisant le mode texte.

 

Ces différentes techniques font du mode texte un environnement simple, rapide et étonnamment puissant pour la programmation d’effets visuels sous DOS.