Вопросы по режимам работы микропроцессора

Тема в разделе "WASM.BEGINNERS", создана пользователем Scr1pt_, 12 апр 2007.

  1. Scr1pt_

    Scr1pt_ New Member

    Публикаций:
    0
    Регистрация:
    14 мар 2007
    Сообщения:
    34
    Вот накопились некоторые вопросы по режимам работы микропроцессора.

    При компиляции под Windows исходников они по умолчанию выполняются в режиме "виртуальный i8086", этот режим позволяет выполнять программы "реального" режима или в "режиме реальных адресов" в режиме "защищённом".

    Вопрос №1: Каким образом формируется физический адрес в "виртуальном i8086"? А именно - используется ли дескрипторная таблица, как в "защищённом" режиме?
    Этот вопрос я задаю, ибо: во всех учебниках написано, что в "виртуальном i8086" формирование физического адреса происходит по правилам "реального" режима, т.е. без дескрипторов сегментов, но в то же время этот режим может быть 32-разрядным, т.е. сегменты в этом режиме могут быть 32-разрядными, а для этого уже нужен бит d_b в дескрипторе. В общем не понятно. Объясните, пожалуйста.

    Вопрос №2: Наличие/отсутствие V86 можно определить по флагу VM (17 бит в flags). Какой командой можно этот флаг прочитать? И вообще: знаю как работать только с флагами df,if,cf. Как читаются/модифицируются другие флаги?
     
  2. rmn

    rmn Well-Known Member

    Публикаций:
    0
    Регистрация:
    23 ноя 2004
    Сообщения:
    2.347
    Код (Text):
    1. pushfd
    2. pop  eax
    3. test eax, 1 ; проверяем флаг CF
    4. jz   lab1 ; переход, если флаг CF сброшен (аналогично jnc)
    5. and  eax, 0FFFFFFFEh ; сбрасываем CF
    6. push eax
    7. popfd
    8. lab1:
     
  3. MrHammer

    MrHammer New Member

    Публикаций:
    0
    Регистрация:
    9 июл 2003
    Сообщения:
    197
    Понятие виртуальная машина означает что ее физические характеристики эмулируются ( программно и/или аппаратно ).
    А нам известны хар-ки вышеупомянутого проца ( max объем памяти 1 мег, нет поддержки вирт. памяти и т.д).

    Флаги состояния проца можно получить при помощи команды pushfd ( ложит в стек 32-битное слово с флагами ).
     
  4. Y_Mur

    Y_Mur Active Member

    Публикаций:
    0
    Регистрация:
    6 сен 2006
    Сообщения:
    2.494
    Это значит что сегменты выстроены с перекрытием, через параграф (16 байт) и перетасовать их произвольным образом, например выстроить друг за другом без перекрытия нельзя, но можно сделаьт так, что размер каждого сегмента не будет ограничен 64 кбайтами, а будет 32 разрядным, правда вроде как дальше 1Мб винда всё равно дос прогам "напрямую" вылазить не разрешает - только путём всяких извратных механизмов типа отображения окна в 1Мб адресное пространство.