Заполнение GDT и прыжок в защищенный режим.

Тема в разделе "WASM.BEGINNERS", создана пользователем white_scorpion, 18 янв 2011.

  1. white_scorpion

    white_scorpion New Member

    Публикаций:
    0
    Регистрация:
    18 янв 2011
    Сообщения:
    14
    Добрый день.

    Прошу прощения, если кому-то мой вопрос покажется избитым и ответы на него можно найти в гугле, но тем не менее... Гугл я общарил, форум тоже, но решить проблему так и не смог. Код либо приводится под другой компилятор, что в данном случае меня не интересует и помочь не смогло, либо, то, что я находил сложно назвать рабочим.

    Имеется первичный загрузчик. С ним проблем не возникает. Далее идет вторичный загрузчик в котором я создаю и заполняю таблицу Global Descriptor Table, а затем пытаюсь прыгнуть в защищенный режим. Тут и появляются проблемы. Приведу урезанный код вторичного загрузчика. Просьба, если кто найдет ошибку или может дать совет, заранее благодарен. В архиве файл head.asm и есть сам вторичный загрузчик, а все остальное, это то, что в него инклюдится.
    Код собирается, при объединении с первичным загрузчиком и создании образа дискеты, гружусь с последнего в виртуальной машине. Выполняется код первичного загрузчика... затем вижу первое сообщение вторичного загрузчика и все подвисает. То ли я намутил что-то с таблицей, то ли сам прыжок не получается.
    Код написан под MASM32 v6.11. Предупреждая вопрос: "Почему такой старый"... на то были свои причины.
    Сам в асме новичок, так что, если что, сильно по рукам не бейте)

    Если что надо уточнить, спрашивайте. На пару дней уезжаю в командировку, вернусь отвечу.
    Всем заранее спасибо.
     
  2. NoName

    NoName New Member

    Публикаций:
    0
    Регистрация:
    1 авг 2004
    Сообщения:
    1.229
    white_scorpion
    Где пакетный файл сборки?

    У меня есть консольная программа которая автоматически создает образ дискеты с любыми указанными файлами в файле конфигурации, если надо могу скинуть. А так я обычно проверяю все в bochs, там часто в файле лога его работы в случае проблем можно быстро узнать какая конкретно или приблизительно ошибка произошла.
     
  3. white_scorpion

    white_scorpion New Member

    Публикаций:
    0
    Регистрация:
    18 янв 2011
    Сообщения:
    14
    Если ты про make файл, то я им не пользуюсь. Я сам написал прогу которая создает образ дискеты с нужными мне лейаутами данных. Но, если можешь, скинь свою, плиз... будет интересно. Спасибо.
     
  4. pashe4ka13

    pashe4ka13 New Member

    Публикаций:
    0
    Регистрация:
    4 окт 2010
    Сообщения:
    263
    white_scorpion
    Я не очень силен в версиях компиляторов, тем более MASM, но что то мне кажется, что v6.11 под DOS, то бишь на нем можно писать тока 16 битный код. Ну может у Вас какой то эксклюзивный )))
     
  5. paralvic

    paralvic Пархоменко Александр Викторович

    Публикаций:
    0
    Регистрация:
    20 ноя 2010
    Сообщения:
    294
    Адрес:
    Нижний Новгород
    подождем продолжения: Прыжок в Long-режим.
     
  6. pashe4ka13

    pashe4ka13 New Member

    Публикаций:
    0
    Регистрация:
    4 окт 2010
    Сообщения:
    263
    paralvic
    А ты уверен, что у него 64 битный процессор?
     
  7. paralvic

    paralvic Пархоменко Александр Викторович

    Публикаций:
    0
    Регистрация:
    20 ноя 2010
    Сообщения:
    294
    Адрес:
    Нижний Новгород
    Разумно было бы копать тему с прицелом на существующие реалии.
    Очень много по этому вопросу недокументированных вещей.
    white_scorpion молодец.

    Intel, amd мануалы в помощь.
     
  8. Toxasoft

    Toxasoft New Member

    Публикаций:
    0
    Регистрация:
    20 сен 2010
    Сообщения:
    188
    Прив всем.
    А у ковото есть похожий пример (рабочий) но для х32
    Ато у мня ни один пример с инета не пашет...
     
  9. Toxasoft

    Toxasoft New Member

    Публикаций:
    0
    Регистрация:
    20 сен 2010
    Сообщения:
    188
    А забыл. Рaralvic кульный исходник
     
  10. pashe4ka13

    pashe4ka13 New Member

    Публикаций:
    0
    Регистрация:
    4 окт 2010
    Сообщения:
    263
    Есть и для 32, выводит строку в защищенном режиме. Обратно в реальный не ворачивается, уходит в бесконечный цикл.
     
  11. Toxasoft

    Toxasoft New Member

    Публикаций:
    0
    Регистрация:
    20 сен 2010
    Сообщения:
    188
    УУУУУУУУУУУУУРРРРРРРРРРРРРАААААААААААААА!!!!!!!!!!!!!!!!!!
    pashe4ka13 Большое спасибо! Ато я думал у мня мозги закипят....
    Я где только не скачивал исходники и ни один не Работал.
     
  12. Toxasoft

    Toxasoft New Member

    Публикаций:
    0
    Регистрация:
    20 сен 2010
    Сообщения:
    188
    pashe4ka13
    А че так?
    Код (Text):
    1.         push  cs
    2.         pop   ds
    3.         mov   ax,ds
    4.         mov   es,ax
    5. можно же
    6.        mov ax,cs
    7.        mov ds,ax
    8.        mov   es,ax
     
  13. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    вы издеватесь.
    на тему инициализации PM было стопицот статей и овер 9000 исходников
     
  14. not1

    not1 Member

    Публикаций:
    0
    Регистрация:
    6 окт 2009
    Сообщения:
    137
    flush1:jmp flush1?
     
  15. Toxasoft

    Toxasoft New Member

    Публикаций:
    0
    Регистрация:
    20 сен 2010
    Сообщения:
    188
    Great
    НО у меня чето ЗАРАБОТАЛ, только етот исходник...
    Даже твой не работал...
     
  16. Toxasoft

    Toxasoft New Member

    Публикаций:
    0
    Регистрация:
    20 сен 2010
    Сообщения:
    188
    flush1:jmp flush1
    Если говорить по простому, Приыжок на себя. а в РМ ето ожидание прерываний...
    и лучше используй

    Код (Text):
    1.   wait:
    2.     hlt
    3.     jmp wait
    етот код останавливает процессор до первого же прерывания...
     
  17. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    Toxasoft
    Нет, до первого прерывания останавливает hlt. А этот код - навсегда. Но как-то очень странно. cli/hlt больше не круто?
     
  18. Toxasoft

    Toxasoft New Member

    Публикаций:
    0
    Регистрация:
    20 сен 2010
    Сообщения:
    188
    Ну не так чуть, чуть написал )))))
     
  19. pashe4ka13

    pashe4ka13 New Member

    Публикаций:
    0
    Регистрация:
    4 окт 2010
    Сообщения:
    263
    Toxasoftслушай Great'a
    flush1:jmp flush1 - Это бесконечный цикл, причем в любом режиме процессра, а их если мне память не изменяет у последних x86 четыре.
    этот код делает останов процессора и ожидание прерывания. По приходу прерывания в стеке сохраняется адрес последней инструкции (команды). В нашем случае jmp wait. Затем управление передается обработчику прерывания и при окончании обработки управление передается нашей программе. То есть переход на wait.
    наверное можно извратиться и из обработчика прерывания вернуть управление нашей программе не командой ret, a сразу на адрес за командой jmp wait. Надеюсь не надо объяснять, что обработчик при этом мы должны написать сами)))
     
  20. pashe4ka13

    pashe4ka13 New Member

    Публикаций:
    0
    Регистрация:
    4 окт 2010
    Сообщения:
    263
    И еще у Great'a опечатка небольшая не cli/hlt, а cli/sti не круто!