![]() |
|
|
![]()
|
|
| makwen |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 163 Регистрация: 9.11.2005 Где: Киев Репутация: нет Всего: 1 |
Прога должна переходить в защищенный режим, и через некоторое время выходить в реальный. Писал по примеру Фролова. Но не работает, и не могу понять где ошибка.
код:
|
|||
|
||||
| Hiehachi |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 30 Регистрация: 27.12.2005 Где: Ukraine->Odess a Репутация: нет Всего: нет |
Если под DOS - DPMI используй и програмируй, если на ассемблере то на TASME в моделе FLAT(c линковщиком DLINK), если на C то на WATCOME(с загрузчиком DOS32A7 , а не DOS4GW).
Если нужно понять где ошибка возьми другую литературу(типа Зубкова почитать). Но вообще по вашему примеру: в 286 процессоре небыла до конца правильно продумана схема с дискрипторами. При входе в защищенный режим, выйти можно было только через RESET. Только начиная с 386 все нормально. И вот еще. В Досе при запущенных менеджерах памяти типа EMM386 или других у Вас тоже ничего не получится, выскачит сообщение от диспечера.( Так как нулевое кольцо уже занято диспетчером). В Виндовсе у вас тем более не выйдет(только на уровне драйвера можете ковырять подобное). |
|||
|
||||
| makwen |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 163 Регистрация: 9.11.2005 Где: Киев Репутация: нет Всего: 1 |
Запускаю с чистого доса, поскольку гружусь с загрузочного CD-диска. Использую TASM и TLINK. Примеры Фролова компилятся и работают. Сделал по аналогии - не работает! При запуске программы, такое ощущение, что код
db 0EAH dw offset FLUSH dw (GDT_CS-GDT0) FLUSH: не воспринимается. И не происходит переход на метку FLUSH. Поскольку, после этой метки зацикливал цикл, а проге побарабану. Она спокойно выходила в реал. |
|||
|
||||
| Hiehachi |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 30 Регистрация: 27.12.2005 Где: Ukraine->Odess a Репутация: нет Всего: нет |
Я раньше тесты с Зубкова запускал.Перепрограмировал лимиты дескрипторов. Чтобы в досе можно было вся память цапать.Там для этого надо было подготовить дескриптор с нулевой базой и немеренным лимитом, зайти в защищенный режим применить операцию и выйти с него. И после этого снимался лимит на страничную (64kb) адресацию, можно было с помощью mov ds:[edi],ax и до LFB видеокарты добраться и еще дальше. Проводил научные иследования по архитектуре PC.
Вообще я не большой специалист по настраиванию защищеных режимов. Если Вам надо для института задачку эту решить, помочь не могу я в этом вопросе. Если надо програмировать на ASME в зашищеном режиме - то могу помочь, правда переводить в защищеный режим будет загрузчик DOS32A. (Есть много своих наработок на TASME в режиме FLAT (SVGA в LFB и т.д.)). |
|||
|
||||
| makwen |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 163 Регистрация: 9.11.2005 Где: Киев Репутация: нет Всего: 1 |
Вообще нужно для универа, но хотелось самому разобратся и написать, а не сдававть готовые программы
|
|||
|
||||
| Chingachguk |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1232 Регистрация: 25.3.2002 Где: Москва Репутация: нет Всего: 18 |
Попробуй мой пример по Финогенову:
-------------------- I don't like the drugs (but the drugs like me). M.Manson. |
|||
|
||||
| makwen |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 163 Регистрация: 9.11.2005 Где: Киев Репутация: нет Всего: 1 |
Chingachguk
Она компилилась у тебя? А то Tasm выдает окола 100 ошибок. |
|||
|
||||
| Chingachguk |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1232 Регистрация: 25.3.2002 Где: Москва Репутация: нет Всего: 18 |
Как это не странно - да. Ведь это рабочая программа (фрагмент), а не "элемент обучения". Echo On tasm.exe %1.asm if errorlevel 1 goto MakeError tlink.exe %1.obj /t /3 if errorlevel 1 goto MakeError del *.obj del *.map :AllDone Echo Done !!! exit :MakeError Echo Make Error exit -------------------- I don't like the drugs (but the drugs like me). M.Manson. |
|||
|
||||
| makwen |
|
||||||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 163 Регистрация: 9.11.2005 Где: Киев Репутация: нет Всего: 1 |
Проблема решена, но не совсем!
Нашел, из-за чего не работала программа. Виноват был байт доступа сегмента стека:
а нужно было :
в Фролове написано:
Также было написано и в Юрове, что я и сделал! Но в примере Юрова, этот бит = 0:)! И в примере предоставленным Chingachguk .... gdt_stack descr <255,0,0,92h,0,0> .... второй бит также равен 0, и все работает.... |
||||||
|
|||||||
![]()
|
| Правила форума "Asm: Общие вопросы" | |
|
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, MAKCim. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Asm: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |