выход из PM

Тема в разделе "WASM.OS.DEVEL", создана пользователем NoName, 29 июн 2007.

  1. NoName

    NoName New Member

    Публикаций:
    0
    Регистрация:
    1 авг 2004
    Сообщения:
    1.229
    активируем PM преходом на PM

    TMP32 segment para public use32 'CODE-32'
    assume cs:TMP32,ds:TMP32
    PM:
    mov eax,cr0
    btr eax,0 ; reset PE flag
    mov cr0,eax
    jmp Quit0
    Quit0: ; clear prefetch queue

    db 66h
    db 0eah
    dw RealStep,Txt16 ; <- находится в 16-ти битном сегмента, а команды интепретируются как будто в 32 вроде, короче неправильно, но попадает туда куда нужно

    как это исправить?
     
  2. rei3er

    rei3er maxim

    Публикаций:
    0
    Регистрация:
    15 янв 2007
    Сообщения:
    917
    Адрес:
    minsk
    Код (Text):
    1. use32
    2.     ...
    3. ; изменяем DS, SS, ... если нужно
    4.     jmp far RM_SELECTOR:@F ; переходим на 16-ти битный сегмент кода
    5. use16
    6. @@:
    7.     mov eax, cr0
    8.     and al, 0xFE
    9.     mov cr0, eax
    10.     jmp far 0000h:@F ; изменяем базу CS
    11. @@:
    12.     ...
    у тебя тут
    изменяется только база в скрытой части CS, а бит разрядности не изменяется (т. е сегмент кода 32-ух разрядный)
     
  3. NoName

    NoName New Member

    Публикаций:
    0
    Регистрация:
    1 авг 2004
    Сообщения:
    1.229
    да я уже понял как ошибся, спасибо
     
  4. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    Сбросил бит D чтоли у дескриптора?
     
  5. NoName

    NoName New Member

    Публикаций:
    0
    Регистрация:
    1 авг 2004
    Сообщения:
    1.229
    нужно просто выходить в 16-ти разрядный защищенный режим а уже потом из него
     
  6. NoName

    NoName New Member

    Публикаций:
    0
    Регистрация:
    1 авг 2004
    Сообщения:
    1.229
    А кто-нибудь делал, какие точно условия необходимо выполнить?
    У меня падает на возврате из PM32 в PM16 или переходе из реального в PM16. Причем сегменты естественно определены и выхода за предел 0xfffff нету. Может быть так что проблема не в дескрипторах?
     
  7. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    Как конкретно падает? какое исключение? какой код ошибки?
     
  8. rei3er

    rei3er maxim

    Публикаций:
    0
    Регистрация:
    15 янв 2007
    Сообщения:
    917
    Адрес:
    minsk
     
  9. NoName

    NoName New Member

    Публикаций:
    0
    Регистрация:
    1 авг 2004
    Сообщения:
    1.229
    нашел, ошибка была у меня, это просто мега лол.