Virtuell 8086 modus

Virtuell 8086 modus, også kalt VM86 og virtuell reell modus, er en adressemodus for 32-bit mikroprosessorer i X86-arkitekturen som debuterte med Intel 80386 den 17. oktober 1985. VM86 gjør det mulig for programmer som er laget for reell modus under MS-DOS og beslektede operativsystemer, å kjøre direkte i beskyttet modus.

Virtuell 8086 modus benytter en segmentert minnemodell identisk med reell modus, og 21-bit adressering som gjør det mulig å implementere virtuell hukommelse gjennom paging. 

Virtuell 8086 modus finnes ikke i X86-64 lang modus, og er derfor ikke til stede i 64-bit x86-prosessorer som kjører i 64-bit beskyttet modus. VM86 er likevel fortsatt til stede når X86-64-prosessorer kjører i 32-bit beskyttet modus. 64-bit utgaver av Microsoft Windows (Windows Server 2003, Windows Vista og Windows Server 2008) har derfor ingen DOS boks og kan heller ikke kjøre 16-bit Windows programmer.

Bruk av Virtuell 8086 modus 
I Windows/386 2.1, Windows 3.0, Windows 3.1x, Windows 95, Windows 98, Windows ME og Windows NT 3.1 ble virtuell 8086 modus benyttet til å kjøre programmer for MS-DOS og beslektede systemer i virtuelle DOS maskiner. Det samme var tilfelle for  OS/2 2.x. I SCO UNIX ble VM86 benyttet i programmet Merge, og i GNU/Linux er den tatt i bruk av abstraksjonslaget DOSEMU.

Såkalte «DOS-programmer» for DOS-utvidere, som kjører i 286 og 386 beskyttet modus, blir ikke utført i Virtuell 8086-modus. Slike programmer kjører i ordinær brukermodus.

Adressering 
Utfordringen med å kjøre 8086 kode for reell modus i beskyttet modus, er at  adresseringen av RAM er helt forskjellig i beskyttet modus og reell modus. I Virtuell 8086 modus er den segmenterte minnemodellen bevart av kompatibilitetshensyn. Samtidig er imidlertid  mekanismen for paging aktiv i den flate minnemodellen til det underliggende operativsystemet. Beskyttelse av minnet og isolering av adressemodus er derfor nødvendig.

Avbrudd 
Ved avbrudd i maskinvaren, programvaren og gjennom instruksjonen iret, blir VM86 modus slått av og prosessoren vender tilbake til full beskyttet modus for å håndtere avbruddet. Før håndteringen av avbruddet blir DS, ES, FS, og GS registrene lagt på stakken og nullstilte.

Utvidet Virtuel 8086 modus i GNU/Linux 
Støtte for Utvidet Virtuel 8086 modus i GNU/Linux, oppnås at «vme»-flagget i seksjonen «flags:» settes i filen /proc/cpuinfo. Dette kan også skje ved at andre bit i assembler-instruksjonen CPUID gir EDX-registeret verdien 0x2.

X86-adresseringsmodi