Le segment de la mémoire où se trouve la mémoire écran sur la carte VGA est l'adresse: 0xA000:0000
Sous DJGPP, il n'est pas possible d'utiliser cette adresse directement car il faut oublier les segments.
Il ne faut pas oublier de la même façon que les offsets sont sur 32 bits donc il faut utiliser EDI et ESI (tout comme EAX, EBX…) à la place de DI, SI.


Accès en dos classique (mode réel):

movw $0xa000,%ds
movw 0,%si
movb $0,(%si)

(ATTENTION: Cette syntaxe n'est pas la syntaxe officielle d' INTEL mais celle de GASM, l'assembleur GNU livré avec DJGPP).

Accès sous DJGPP (mode protégé):

 Nous allons tout d'abord convertir le segment en sélecteur:

short video=__dpmi_segment_to_descriptor(0xa000);

 Puis appliquer ce sélecteur à une routine en assembleur.

Void remplir_ecran(short video)
{

asm volatile("
pushw %%es
movw %1,%%ax
movw %%ax,%%es
xorl %%edi,%%edi)
movl $0,%%eax
movl $64000/4,%%ecx
rep; stosl
popw %%es"
:
: "m" (video));

};

 L'appel de cette routine qui efface l'écran (encre 0) par:

remplir_ecran(video);

 

Donc en récapitulant, l'accès à la mémoire écran se fait par l'intermédiaire d'un sélecteur (vidéo) que l'on placera dans un des registres de segments (généralement ES) en n'oubliant pas de sauvegarder celui-ci avant sur la pile. 
Ne pas oublier de ne plus utiliser ESI ou EDI pour les offsets. Une des méthodes les plus rapides étant de les remettre à zéro par un XORL %%ESI,%%ESI ou XOR %%EDI,%%EDI.