# Mode virtuel 8086

Le mode virtuel 8086 (en anglais : Virtual 8086 mode) est un mode d'exécution particulier pour les processeurs de la famille x86. Ce mode fut créé avec l'apparition du processeur Intel 80386 en 1985 et est disponible sur toutes les versions ultérieures des processeurs Intel de la famille x86.
Le mode virtuel 8086, aussi appelé Virtual 8086 ou V86, permet au processeur de se comporter comme un processeur 8086 ou 8088 pour lesquels n'existait que le mode réel. Ses avantages par rapport au mode réel sont qu'il permet de garder la protection mémoire ainsi que le contrôle des processus par le système d'exploitation, et qu'il est très facile et très rapide de passer de ce mode au mode protégé et inversement.
Ce mode d'exécution fut créé pour faire fonctionner des applications DOS en même temps que des applications Windows qui nécessitent le mode protégé. Les programmes DOS (qu'ils soient 16 ou 32 bits) compatibles DPMI (en anglais : DOS Protected Mode Interface) fonctionnent en mode protégé et non au travers du mode virtuel 8086.

## En pratique

Ce mode utilise une segmentation similaire avec celle du mode réel, avec des adresses mémoire sur 20 bits, mais sujettes à la pagination du mode protégé.
Les interruptions de type IRQ ou exceptions sont gérées comme si le processeur était en mode protégé (grâce à l'IDT qui n'a pas besoin de se situer dans la petite zone de mémoire accessible dans ce mode). Dans ce cas, les registres DS, ES, FS et GS sont placées sur la pile en plus des registres normalement placés en cas d'interruption.
Les instructions INT, IRET, IN, OUT, PUSHF, POPF, CLI et STI sont considérés comme sensibles et déclenchent une exception GPF traitée par une partie du système d'exploitation appelée gestionnaire du mode virtuel. Ce gestionnaire peut soit arrêter l'exécution du programme, soit analyser l'instruction fautive, simuler son exécution, puis reprendre l'exécution normale du programme en mode virtuel.

## Utilisation

Le mode virtuel 8086 est utilisé notamment sous Windows/386 2.1x, Windows 3.x en mode 386, Windows 9x, Windows Me et OS/2 2.x. Il est utilisé dans d'autres systèmes uniquement pour exécuter des programmes DOS et Windows 16 bits : sous Windows NT et tous ses successeurs par l'intermédiaire de la machine virtuelle NTVDM, sous SCO UNIX au travers de Merge, et sous Linux grâce à, par exemple, DosEmu. Des machines virtuelles avancées comme VMware permettent l'utilisation de ce mode.
Il peut également être utilisé par les systèmes d'exploitation actuels pour utiliser des fonctions du BIOS, notamment celles du BIOS vidéo en l'absence d'un driver pour la carte graphique.
Toutefois, les processeurs x86-64 actuels ne peuvent pas basculer en mode 8086 virtuel lorsqu'ils fonctionnent en "Long Mode", c'est-à-dire dans le contexte d'un système d'exploitation 64 bits. C'est la raison pour laquelle il n'est plus possible d'exécuter de programmes MS-DOS dans les versions x64 de Windows, ni indirectement de programmes Windows 16 bits car ces programmes, bien qu'ils fonctionnaient en mode protégé et seraient supportés par le processeur en "Long Mode", faisaient appel au DOS (donc au mode 8086 virtuel) pour un certain nombre d'opérations.