Païou : Mandriva Linux depuis 2002. Aujourd'hui, c'est Mageia Linux
On se lasse de tout, sauf de comprendre.
Attribué à Virgile.
29 juillet 2010 : Création de cette page sur l'ancien site de Païou.
Pour : un esprit logique et curieux.
Voici quelques indications sur le fonctionnement de l'affichage à partir de l'assembleur et qui vous permettent de d'afficher du texte à l'écran.
Le programme assembleur que vous écrivez peut utiliser des routines déjà prêtes pour effectuer certaines tâches, telles que l'attente de la saisie d'un caractère au clavier, la gestion des disque, l'affichage à l'écran ...
L'instruction est INT xx avec xx = numéro de l'interruption, en hexadécimal.
Pour gérer l'affichage avec les routines du BIOS, vous utiliserez l'interruption 10h. C'est la "BIOS video services interrupt", c'est à dire l'interruption qui gère le graphisme. Cette interruption dispose de beaucoup de fonctions, mais vous n'en utiliserez probablement que quelques unes.
Avant de placer l'instruction INT 10h, vous devrez renseigner quelques registres avec les valeurs adéquates.
Voici comment vous appellez une routine du BIOS.
MOV AH, xxavec xx = numéro (hexadécimal) de la fonction
INT 10pour appeler la fonction.
Suivant la fonction appelée, vous devrez également renseigner d'autres registres.
Voici la liste de quelques fonctions correspondant à l'interruption 10 :
Quelques unes de ces fonctions vont être explicitées.
Pour configurer un mode d'affichage, vous écrirez :
MOV AX 0003 AH = 00 (définition de la fonction 00) AL = 03 (définition du mode 03 par exemple).
INT 10 appel de la fonction.
Voici la liste des modes :
Un changement de mode efface tout l'écran !.
Au démarrage de l'ordinateur c'est ce mode 03 qui est pris par défaut.
Vous pouvez définir la couleur de l'élément dessiné (pixel ou caractère) et du fond. C'est le registre BL qui est utilisé :
MOV BL,1C
Les différents bits correspondant à la valeur hexadécimale ont la signification suivante :
0 0 0 1 1 1 0 0avec, de gauche à droite :
Pour l'intensité : 0 = sombre, 1 = lumineux. Pour les composantes : 0 la couleur est absente, 1 = la couleur est présente.
Ainsi, l'exemple ci-dessus donne : fond bleu sombre, caractère rouge lumineux.
C'est ce mode qui permet le maximum de possibilités, mais sa gestion demande plus d'instructions.
La fonction 02 vous permet de placer le curseur à une position donnée :
MOV AH,02 définit la fonction.
MOV BH,00 page 00 = page courante.
MOV DX,020B ligne = 3 (02+1), colonne = 12 (0B+1).
INT 10 place le curseur.
C'est la fonction 09 qui définit le caractère :
MOV AH,09 définit la fonction.
MOV AL,41 définit le caractère 'A'.
MOV BH,00 page 00 = page courante.
MOV AL,65 définit le caractère 'A'.
MOV CX,0002 définit le nombre de caractères identiques.
INT 10 affiche les caractères.
Le curseur n'est pas déplacé automatiquement.
La fonction 0A écrit également un caractère, mais en conservant les attributs de l'emplacement où sera écrit le caractère
Elle est utilisée comme la fonction 09, mais le registre BL est sans incidence.
Le curseur n'est pas déplacé.
Cette fonction affiche un caractère à l'écran (écrit dans la page courante), avance le curseur, fait défiler les lignes si nécessaire.
Les caractères 07h (beep), 08h (arrière), 0Ah (saut de ligne) et 0D (retour chariot) sont correctement exécutés.
MOV AH,0E définit la fonction.
MOV AL,41 définit le code ASCII du caractère, ici 'A'.
MOV BH,00 page = page courante.
MOV BL,0C attributs du caractère (pas du fond), comme spécifié ci-dessus.
INT 10 écrit le caractère.
Avec cette fonction, seuls les attributs du caractère sont pris en compte, et uniquement pour les modes graphiques (0D, 0E,10, 12, 13)
Lors du démarrage de l'ordinateur, c'est ce mode qui est utilisé par le BIOS et le mini-programme de démarrage.
Dans pratiquement tous les programmes on utilise la pile, par exemple avant d'appeler une routine.