Assembleur x86 pour le mode 13h
Attention : Cette page n'est pas une initiation à l'assembleur. Son objectif est uniquement de poser quelques principes de bases nécessaires pour comprendre la programmation du mode 13h.

Segment et Offset

La mémoire d'un ordinateur n'est en réalité qu'une série d'octets consécutifs qui forment un très gros tableau à une seule dimension. Sur les PC, cette mémoire est divisée en zones de 64 Ko (65536 Octets) appelées segments. L'adresse mémoire d'un octet se décompose selon 2 éléments : un numéro de segment et une position dans le segment (l'offset). La notation courante est la suivante Segment:Offset.

Exemple :

A000:0001 représente le deuxième octet du segment A000 (40960 en décimal).

Les registres

Les registres sont des zones mémoires très rapides situées à l'intérieur du microprocesseur. Il en existe de plusieurs sortes :

Les registres de travail :

Il y en a 4 (EAX, EBX, ECX et EDX) et ils servent à manipuler des données ou à stocker des paramètres lors d'appels d'interruptions. Historiquement, ils etaient 16 bits avant d'être étendu à 32 bits.

EAX 32 bits
AX 16 bits
AH AL 8 bits
 
EBX 32 bits
BX 16 bits
BH BL 8 bits
 
ECX 32 bits
CX 16 bits
CH CL 8 bits
 
EDX 32 bits
DX 16 bits
DH DL 8 bits


Registre étendu Registre Partie forte du registre Partie faible du registre Fonction
EAX AX AH AL Accumulateur
EBX BX BH BL Base
ECX CX CH CL Compteur
EDX DX DH DL Pointeur de donnée
ESI SI Non accessible directement Index de source
EDI DI Non accessible directement Non accessible directement Index de destination
ESP SP Non accessible directement Non accessible directement Pointeur de pile
EBP BP Non accessible directement Non accessible directement Pointeur de base

Remarque : lorsque que l'on modifie une partie de registre, les sous-parties sont bien sur touchées. Exemple si je modifie la valeur de EAX alors AX, AH et AL sont modifiées mais l'opération inverse n'est pas vraie, si je touche à AL, la valeur de AH n'est pas modifiée.

Les registres de segment :

Ils sont utilisés pour stocker l'adresse du début d'un segment. Cela peut être un segment d'instruction de programme, de début de données ou de la pile.

Nom Fonction
CS Segment de code
DS Segment de données
ES Extra Segment
SS Segment de pile
FS Segment supplémentaire (386 et +)
GS Segment supplémentaire (386 et +)

Les autres registres :

Il existe un registre contenant le déplacement à effectuer par rapport au début d'un segment (EIP) et un registre Flag qui comporte des bits d'informations (débordement, signe, retenue , ...).

Les opérations de base

L'affectation :

Pour donner à une variable ou à un registre une valeur on utilise la fonction mov

Exemple : faire prendre au registre AX la valeur 123

mov ax, 123 ;

L'addition :

L'addition se fait à l'aide de add.

Exemple : additionner 12 et 53, le resultat sera automatiquement stocké dans AX

mov ax, 12 ;
add 53 ;


La multiplication :

L'addition se fait à l'aide de mul.

Exemple : multiplier 5 et 9, le resultat sera automatiquement stocké dans AX

mov ax, 5 ;
mul 9 ;


Les interruptions

Les interruptions sont des fonctions du Bios ou du système d'exploitation. Certaines fonctions ont besoin de paramètres, on les transmet alors à l'aide des registres. On exécute une interruption grâce a la fonction int.

Exemple :

Exécution de l'interruption 10h avec passage de paramètres dans AH et AL

mov ah, 00h ;
mov al, 13h ;
int 10h ;


Ce sera tout pour l'assembleur, cela suffît pour comprendre le fonctionnement mode 13h.


Tutoriaux - Assembleur x86 - Photographies, projects informatiques et tutoriaux de programmation.
Chandelier Japonais - Annonce immobilière maison - Sellette occasion - Logiciel de rendez-vous - Velo route occasion - Chat sans inscription - Masque - Pic petrolier