1. Если вы только начинаете программировать на ассемблере и не знаете с чего начать, тогда попробуйте среду разработки ASM Visual IDE
    (c) на правах рекламы
    Скрыть объявление

Эмуляторы VMWare & Bochs

Тема в разделе "WASM.OS.DEVEL", создана пользователем wasm_test, 15 мар 2007.

  1. Nouzui

    Nouzui New Member

    Публикаций:
    0
    Регистрация:
    17 ноя 2006
    Сообщения:
    856
    лан, ссылаться на даташиты не буду, но вообще-то, если мне не изменяет память, считается, что перед переходом в реал нужно перезаписать в cs нормальный селектор: с ffff лимитом, 16-разрядный итд..
    а что будет, если этого не сделать, вообще не описано (unreal ведь недокументированная фича?). те же 386, кажется, просто ресетились
    так что вмварь сделана даже не по спецификации.. просто сделана, и это не противоречит документации Intel
    ну, правда, сделана неправильно )
     
  2. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    Ну спецификация, это одно. А вот совместимость эмулятора с реальным процом это дело другое. Везде есть недокументированные фичи. И я выберу тот эмуль, который их лучше эмулирует ) А то, что это не по спецификации, както меня не волнует)
    ну вообще-то не селектор, а сегмент :P в реал моде селекторов нету. нужно сделать дальний джамп в сегмент, который в GDT обладает перечисленными тобой свойствами, вот, что ты, наверное, имел в виду)
     
  3. Nouzui

    Nouzui New Member

    Публикаций:
    0
    Регистрация:
    17 ноя 2006
    Сообщения:
    856
    а кто спорит? )

    перед переходом в реал..
     
  4. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    чето тебя плющит) до перехода надо только сегмент такой создать, потом переход в реал моде, потом дальний джамп.
     
  5. Nouzui

    Nouzui New Member

    Публикаций:
    0
    Регистрация:
    17 ноя 2006
    Сообщения:
    856
    говрю же, лень в даташиты лезть..
    но вообще-то на на.. не знаю даже на чем.. все было именно так. а джамп предназначался для сброса очереди предвыборки
     
  6. Nouzui

    Nouzui New Member

    Публикаций:
    0
    Регистрация:
    17 ноя 2006
    Сообщения:
    856
    кстати
    как ты и сказал, в реал моде селекторов нету.. так что после выхода из pm уже все равно, есть там дескриптор сегмента в GDT, нету..
    перезагружать надо именно перед выходом, можно тоже дальним джампом
    и после выхода из PM джам тоже не обязательный, можно и ретом воспользоваться, или еще там чем-нибудь (не проверял)
     
  7. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    насчет jmp / retf - цитирую исходник загрузчка NT4:

    комментарий прочти
     
  8. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    А лучше вот вся функция переключения в RealMode:

    Код (Text):
    1. ;
    2. ; Note: we do not save and restore the gdt and idt values because they
    3. ; cannot change while external services are being used by the OS loader.
    4. ; This is because they MUST remain identity mapped until all mode
    5. ; switching has ceased.
    6. ;
    7.  
    8. public _RealMode
    9. _RealMode proc near
    10.  
    11. ;
    12. ; Switch to real-mode
    13. ;
    14.  
    15.         sgdt     fword ptr [_GDTregister]
    16.         sidt     fword ptr [_IDTregister]
    17.         push     [saveDS]          ; push this so we can get to it later
    18.         mov      ax,SuDataSelector
    19.         mov      es,ax
    20.         mov      fs,ax
    21.         mov      gs,ax
    22.  
    23.         mov      eax,cr0
    24.         and      eax, not (ENABLE_PAGING + PROT_MODE)
    25.         mov      cr0,eax
    26.  
    27. ;
    28. ; flush the pipeline
    29. ;
    30.         jmp     far ptr here
    31. here:
    32.  
    33. ;
    34. ; Flush TLB
    35. ;
    36.  
    37. ; HACKHACK - We don't know where the page directory is, since it was
    38. ;       allocated in the osloader.  So we don't want to clear out cr3,
    39. ;       but we DO want to flush the TLB....
    40. ;
    41.         mov     eax,cr3
    42.  
    43.         nop                             ; Fill - Ensure 13 non-page split
    44.         nop                             ; accesses before CR3 load
    45.         nop                             ; (P6 errata #11 stepping B0)
    46.         nop
    47.  
    48.         mov     cr3,eax
    49. ;
    50. ; switch to real mode addressing
    51. ;
    52. ; N. B. We need to do a far jump rather than a retf, because a retf will not
    53. ;       reset the access rights to CS properly.
    54. ;
    55.         db      0EAh                    ; JMP FAR PTR
    56.         dw      offset _TEXT:rmode      ; 2000:rmode
    57.         dw      02000h
    58. rmode:
    59.         pop      ax
    60.         mov      ds,ax
    61.         mov      ss,ax
    62. ;
    63. ; Stamp video pointers for real-mode use
    64. ;
    65.         mov     si,offset _ScreenStart
    66.         mov     word ptr [si+2],0b800h
    67.         mov     si,offset _vp
    68.         mov     word ptr [si+2],0b800h
    69. ;
    70. ; re-enable interrups
    71. ;
    72.         lidt    fword ptr [_IDTregisterZero]
    73.  
    74. ;
    75. ; Re-enable interrupts
    76. ;
    77.  
    78.         sti
    79.         ret
    80.  
    81. _RealMode endp
     
  9. Nouzui

    Nouzui New Member

    Публикаций:
    0
    Регистрация:
    17 ноя 2006
    Сообщения:
    856
    ну написал же:
    а вот выдержка из даташита, чтобы окончательно расставить точки над первой буквой названия корпорации )))

    IA-32 Intel® Architecture Software Developer’s Manual. Volume 3: System Programming Guide
    Order Number 245472-012.
    2003
    так что, что это за второй джамп, который "reset the access rights to CS properly." остается толко догадываться ))
     
  10. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    У меня есть все три тома ;)
     
  11. Nouzui

    Nouzui New Member

    Публикаций:
    0
    Регистрация:
    17 ноя 2006
    Сообщения:
    856
    не беспокойся, у меня тожее xD