Assembler - язык неограниченных возможностей
0e1cc9b4

в которой флаг VM регистра


Режим V86 — это задача, исполняющаяся в защищенном режиме, в которой флаг VM регистра EFLAGS равен единице. Внутри этой задачи процессор ведет себя так, как если бы он находился в реальном режиме, за исключением того, что прерывания и исключения передаются обработчикам защищенного режима вне этой задачи (кроме случая, когда используется карта перенаправления прерываний).

Программы не могут изменить флаг VM. Его можно установить, только записав образ EFLAGS с установленным VM при создании TSS новой задачи и затем переключившись на нее. Кроме этой задачи для нормальной реализации V86 требуется монитор режима (VMM) — модуль, который выполняется с CPL = 0 и обрабатывает прерывания, исключения и обращения к портам ввода-вывода из задачи V86, выполняя фактически эмуляцию всего компьютера.

Чтобы выполнять в системе сразу несколько V86-задач, применяется страничная адресация. Каждая V86-задача использует ровно один мегабайт линейного адресного пространства, который можно отобразить на любую область физического.

Процессор переключается в V86 в трех ситуациях:

  • при переключении в задачу, в TSS которой установлен флаг VM;


  • при выполнении команды IRET, если NT = 0 и установлен VM в копии EFLAGS в стеке;


  • при выполнении команды IRET, если NT = 1 и установлен VM в копии EFLAGS в TSS.



  • Содержание раздела