Переход в защищённый режим

Тема в разделе "WASM.ASSEMBLER", создана пользователем the_player, 25 июн 2006.

Статус темы:
Закрыта.
  1. the_player

    the_player New Member

    Публикаций:
    0
    Регистрация:
    24 июн 2006
    Сообщения:
    12
    Буду очень признателен, если кто-то сможет помочь мне со следующей программой, выполняющей переключение в защищённый режим:



    include macros.inc



    .386p



    PUBLIC _RealModeEntryPoint



    RealModeCodeSegment SEGMENT PARA USE16

    ASSUME cs: RealModeCodeSegment, es: PMDataSegment



    _RealModeEntryPoint:



    cli



    lgdt fword ptr InitialGDT



    SetPEBit



    ClearCPUPrefetchQueue



    JumpToEntryPoint FlatCodeSelector, _PMEntryPoint



    RealModeCodeSegment ENDS



    PMCodeSegment SEGMENT PARA USE32

    ASSUME cs: PMCodeSegment, ds: PMDataSegment



    _PMEntryPoint:

    jmp $



    PMCodeSegment ENDS



    PMDataSegment SEGMENT PARA USE32



    InitialGDT TABLE_REGISTER <GDTSize - 1, GDT>



    GDT LABEL BYTE

    GDTNull DESCRIPTOR <0000h, 0000h, 00h, 00h, 00h, 00h>

    GDTFlatCode DESCRIPTOR <0FFFFh, 0000h, 00h, DSCR_CODE, DSCR_FLAG_GRANULARITY OR 0FFh, 00h>

    GDTFlatData DESCRIPTOR <0FFFFh, 0000h, 00h, DSCR_DATA, DSCR_FLAG_GRANULARITY OR 0FFh, 00h>

    GDTSize = $ - GDT



    FlatCodeSelector = SIZEOF(DESCRIPTOR) SHL 1

    FlatDataSelector = SIZEOF(DESCRIPTOR) SHL 2



    PMDataSegment ENDS



    END _RealModeEntryPoint



    Макросы и структуры:

    LoadGDTR MACRO dwGDTAddress



    ; 32-bit overridden lea bx, GDTAddress

    db 66h

    db 8Dh

    db 1Eh

    dd dwGDTAddress



    ; lgdt fword ptr [bx]

    db 0Fh

    db 01h

    db 17h



    EndM



    SetPEBit MACRO



    mov eax, cr0

    or eax, CR0_PROTECTION

    mov cr0, eax



    EndM



    ClearCPUPrefetchQueue MACRO



    jmp $ + 2



    EndM



    JumpToEntryPoint MACRO wSelector, dwOffset



    ; 32-bit overriden far jmp

    db 66h

    db 0EAh

    dd offset dwOffset

    dw wSelector



    EndM



    DESCRIPTOR STRUC

    LimitL DW 0

    BaseL DW 0

    BaseM DB 0

    Access DB 0

    Granularity DB 0

    BaseH DB 0

    DESCRIPTOR ENDS



    Пробую запускать exe-файл из-под VMWare и получаю kernel stack fault (как я понял, так VMWare называет Double fault). В чём может быть проблема?



    Заранее спасибо![font=][/font][font=][/font]
     
Статус темы:
Закрыта.