Помогите разобраться в нереальном режиме!!(flat real mode)

Тема в разделе "WASM.BEGINNERS", создана пользователем S2006, 22 май 2006.

  1. S2006

    S2006 New Member

    Публикаций:
    0
    Регистрация:
    22 май 2006
    Сообщения:
    2
    Адрес:
    Russia
    Идея такая:

    1) Дескрипторы создаём (3 штуки: сегмента,кода и еще с базой 0 и 4Гб пределом)

    2) Находим базы кода и данных,правим дескрипторы

    3) переходим в защ. режим

    4) заносим в рег. селектор на деск 4 Гб

    5) возвращаемся в реальный режим



    Всё так?
     
  2. S2006

    S2006 New Member

    Публикаций:
    0
    Регистрация:
    22 май 2006
    Сообщения:
    2
    Адрес:
    Russia
    Добавляю свой кодик.... где наврал?
    Код (Text):
    1.  
    2. .MODEL SMALL
    3. .386P
    4. .DATA
    5. desc0 dd 0,0
    6. desc1 dw 0ffffh         ; Дескриптор сегмента кода
    7.       dw ?
    8.       db ?, 10011000b
    9.       db 10011111b,?
    10. desc2 dw 0ffffh         ; Дескриптор сегмента данных
    11.       dw ?
    12.       db ?,10010000b
    13.       db 10001111b,?
    14. desc3 dw 0ffffh         ; Это для нереала
    15.       dw 0
    16.       db 0,10010000b
    17.       db 10001111b,0
    18. GDTR LABEL FWORD
    19. dw    offset GDTR   - 1 - offset desc0
    20. line  dd ?
    21. .CODE
    22. MAKE    MACRO SEG,OFF
    23.         mov EAX,0
    24.         mov EBX,0
    25.         mov AX,SEG
    26.         mov BX,OFF
    27.         shl EAX,4
    28.         add EAX,EBX
    29.         ENDM
    30.        
    31. .STARTUP   
    32.     mov     AX,@data        
    33.     mov     DS,AX
    34.    
    35.     mov eax,cr0
    36.     test al,1
    37.     jnz exit
    38.  
    39.         MAKE DS,OFFSET desc0
    40.         mov line,EAX
    41.         LGDT FWORD PTR GDTR
    42.        
    43.         cli
    44.                  
    45.                 in AL,70h
    46.         or AL,80h
    47.         out 70h,AL
    48.        
    49.        
    50.         MAKE DS,0
    51.         ror EAX,16
    52.         mov WORD PTR DS:[desc1 + 1],ax
    53.         ror EAX,8
    54.         mov BYTE PTR DS:[desc1 + 4],al
    55.         ror EAX,8
    56.         mov BYTE PTR DS:[desc1 + 7],al
    57.        
    58.         MAKE CS,0
    59.         ror EAX,16
    60.         mov WORD PTR DS:[desc2 + 1],ax
    61.         ror EAX,8
    62.         mov BYTE PTR DS:[desc2 + 4],al
    63.         ror EAX,8
    64.         mov BYTE PTR DS:[desc2 + 7],al     
    65.        
    66.         in AL,92h
    67.         or AL,2
    68.         out 92h,AL
    69.        
    70.         mov EAX,CR0
    71.         or  EAX,1
    72.         mov CR0,EAX
    73.        
    74.         jmp FAR PTR nex1
    75.        
    76.         nex1:
    77.         mov AX,18H
    78.         MOV DS,AX
    79.         MOV ES,AX
    80.         MOV SS,AX
    81.         MOV GS,AX
    82.         MOV FS,AX
    83.                
    84.         mov EAX,CR0
    85.         and EAX,0FFFEh
    86.         mov CR0,EAX
    87.        
    88.         jmp FAR PTR next2
    89.        
    90.         next2:
    91.  
    92.         sti
    93.         in AL,70h
    94.         and AL,08Fh
    95.         out 70h,AL
    96.        
    97.         XOR AX,AX
    98.         MOV DS,AX
    99.         MOV ES,AX
    100.         MOV SS,AX
    101.         MOV GS,AX
    102.         MOV FS,AX
    103.        
    104.  exit:
    105. .EXIT
    106. END
    107.