Перевод процессора в защищенный режим

Тема в разделе "Другие", создана пользователем Tolstiy, 8 июн 2005.

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

    Tolstiy Гость

    После перехода в защищенный режим, нужно проинициализировать сегментный регистр CS, это можно сделать выполнив команду дальнего перехода.
    Вопрос 1: Зачем указывать явно код команды дальнего перехода, т.е. записывать команду дальнего перехода как последовательность данных?

    В старших моделях процессоров Intel, можно написать команду косвенного дальнего перехода jmp dword ptr Address (где в переменной Address храниться селектор сегмента кода и смещение), в старых моделях мы так делать не могли. Удалось выяснить что это как то связанно с особенностями конвейера старших поколений процессоров Intel.
    Вопрос 2: Чем отличаются конвейеры младших и старших поколений Intel, что появилось нового, за счет чего стало возможным выполнить такую команду сразу после перехода в защищенный режим? и из за чего на старых процессорах нельзя было так сделать?

    И буду очень рад подробной информации и работе конвейеров процессоров Intel.
     
  2. Dico

    Dico Гость

    http://wasm.ru/doclist.php?list=1


    Скачай себе хоть и немало но всё там есть:
    WASM.RU by WASM.RU
    Оффлайновая версия сайта (статьи и прилагающиеся к ним файлы) на 31.12.2004.
    + Новый Дзайн
    + Поиск

    Домашняя страница: http://www.wasm.ru/
    русский
    Размер: 9897.27 kb
    Комментариев: 16
     
  3. ????

    ???? Гость

  4. ????

    ???? Гость

    Для: Tolstiy
    ну ещё и цитата из Юрова (Юров В., Хорошенко С. Assembler: учебный курс урок 16)
     
  5. Guest

    Guest Гость

    Юрова я уже выучил чуть ли не на изусть, но там ответа на мой вопрос нету, я перерыл несколько десятков книг по ассемблеру и защещенному режиму, везде написано для чего мы это делаем, но нигде нету, почему именно так, и не как иначе.
    Причем я написал второй способ как это можно сделать, но только в процессорах старших моделей, нигде про второй способ даже и не пишется. Не говоря уж про то, за счет чего стало возможным так делать.
    Еще напоролся на инфу, что в старших моделях инициализировать регистры cs и ss вобще не обязательно, процессор будет смотреть на содержимое в теневых регистрах, и вполне нормально работать.
     
  6. Dico

    Dico Гость

  7. ????

    ???? Гость

    <!--QuoteBegin-Guest+8:06:2005, 11:34 -->
    <span class="vbquote">(Guest @ 8:06:2005, 11:34 )</span><!--QuoteEBegin-->Причем я написал второй способ как это можно сделать, но только в процессорах старших моделей, нигде про второй способ даже и не пишется.
    [snapback]20770" rel="nofollow" target="_blank[/snapback]​
    [/quote]
    Пишется. Библиотека системного программиста том 6. (2.4. Пример простой программы переключения режима):

    Код (Text):
    ; ------------------------------------------------------------
    ; Процедура переключает процессор в защищённый режим
    ; ------------------------------------------------------------

    PROC  set_protected_mode   NEAR

       mov   ax,[rl_crt]  ; записываем в es сегментный
       mov   es,ax     ; адрес видеопамяти

       call  enable_a20  ; открываем адресную линию A20

       mov   [real_ss],ss ; запоминаем указатель стека
       mov   [real_es],es ; для реального режима

    ; Загружаем регистр GDTR

       lgdt  [QWORD gdt_gdt]

    ; Устанавливаем защищённый режим работы процессора

       mov   ax,VIRTUAL_MODE
       lmsw  ax

    ; Мы находимся в защищённом режиме

    ; Очищаем внутреннюю очередь команд процессора
    ; Выполняем команду межсегментного прерхода,
    ; в качестве селектора указываем селектор текущего
    ; сегмента кода, в качестве смещения - метку flush

    ;    jmp   far flush
       db   0ea
       dw   OFFSET flush
       dw   CS_DESCR

    LABEL  flush  FAR

    ; Загружаем сегментные регистры SS и DS селекторами

       mov   ax,SS_DESCR
       mov   ss,ax
       mov   ax,DS_DESCR
       mov   ds,ax
       ret

    ENDP  set_protected_mode
    Как видишь, упоминание про jmp far flush есть, а обяснений я не искал.
     

    Вложения:

    • bsp_06.zip
      Размер файла:
      362 КБ
      Просмотров:
      82
  8. Guest

    Guest Гость

    Если ты присмотришься повнимательнее, то увидишь, что перед jmp far flush стоит знак ";", т.е. это коментарий, и тем более что это прямой дальний переход на метку flush, так компилятор никогда не примет, потому и закоментирована эта команда, и далее написан код этой команды явно. Почему? это и есть мой первый вопрос.

    А второй способ, это косвенный переход, т.е. переход по адресу, который указан в соответствующей ячейке памяти. Например:
    Address dd 00000030h
    ....
    jmp dword ptr Address
    Вот о таком способе я нигде не видел упоминаний.

    И вобще надо прикладывать список книг которые я прочетал, чтоб не цитировали мне то, что я и так наизусть знаю, и где никакого ответа нету.

    Из следующих книг прошу информацию не кидать.
    Финогенов К.Г., Юров В., Зубков, Александр Фролов, Григорий Фролов, и т.д. и т.п., Вся Библиотека Системного Программиста.
     
  9. remedius

    remedius Гость

    Подскажите пожалйста, Я скопировала пример из Финогенова - он не работает(мало того он не компилился, было куча опечатков)...После долгого и нудного сравнения с примером Зубкова, который работает, по ходу дела у него изначально неправильно что-то, или какае-то глобальная опечатка. При запуске проги, просто раскручивается флоп и все...И такое происходит и в первом его и во втором примере. Может кто смотрел и проверял код Финогенова..Помогите пожалуйста!!!
     
Загрузка...
Статус темы:
Закрыта.

Поделиться этой страницей