Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 22.08.2008, 14:59   #1
brainFuck
 
Регистрация: 20.08.2008
Сообщений: 7
По умолчанию lidt опять не работает

привет всем.
на этот раз у мня возникла проблема с выходом из защищенного режима.
Все подготовил к переходу в реальный режим :
настроил дескрипторы, в cr0 сбросил бит, затем far jmp, настроил сегментные регистры, корочя говоря все как положено(с этим у мня не было проблем). В защищенном режиме программ ничего не делает, аппаратные прерывания запрещенны.
Теперь настриваю таблицу веторов прерывания IDTR:
mov ax, 3ffh
mov word ptr pdescr, ax
mov eax, 0
mov dword ptr pdescr+2, eax
lidt pdescr
sti
Корочь после sti у мня процессор перегружается. Корочь хер знает в чем проблема, я не знаю.
запускал программу на dos 6.11(установлен на виртуальной машине)
компилил на tasm 4.1
brainFuck вне форума Ответить с цитированием
Старый 24.08.2008, 21:10   #2
rpy3uH
добрый няша
Старожил
 
Аватар для rpy3uH
 
Регистрация: 29.10.2006
Сообщений: 4,804
По умолчанию

форматы IDT защищённого и реального отличаются друг от друга. как ты подготавливаешь IDT реального режима?
rpy3uH вне форума Ответить с цитированием
Старый 25.08.2008, 06:00   #3
brainFuck
 
Регистрация: 20.08.2008
Сообщений: 7
По умолчанию

Про формат и подготовку idt не очень понял.
Знаю только что в защищенном режиме необходимые данные обратчика хранится в формате шлюза, ну там номер селектора, смещение и т.д., а реальном это число из 4 байтов: 2 байта - адрес сегмента, 2 -байта смещение.
idt никак не подготавливаю . Просто загрузил адрес таблицы векторов прерывания:
cli
;;;;;;;;;;;;pdescr - переменная размером в 6 байт
mov word ptr pdescr, idt_size-1
xor eax, eax
mov ax, offset idt
add eax, ebp ;ebp - адрес сегмента данных,
;который содержит глобальную таблицу
;дескрипторов и таблицу прерываний
; eax += ebp - адрес таблицы векторов
mov dword ptr pdescr+2, eax
lidt pdescr

это все в реальном режиме.
да и вообще тупо скатал с книги Рудакова язык ассемблер уроки программирования. пример 67.1. стр 312
код проверил, вроде все правильно, вроде ничего не забыл списать.
Меня еще один момент смутил.
У него написано что для выхода из защищенного режима надо указать адрес таблицу веторов прерывания реального режима(0000h:3ffh).
Проверил значения команды sidt которые он мне вернул: так там смещение равно ffffh. Почему так?
brainFuck вне форума Ответить с цитированием
Старый 25.08.2008, 06:02   #4
brainFuck
 
Регистрация: 20.08.2008
Сообщений: 7
По умолчанию

пардон не смещение, а размер таблицы, последнее предложение, размер после команды sidt равно ffffh
brainFuck вне форума Ответить с цитированием
Старый 25.08.2008, 14:08   #5
rpy3uH
добрый няша
Старожил
 
Аватар для rpy3uH
 
Регистрация: 29.10.2006
Сообщений: 4,804
По умолчанию

в принципе: какая разница какой там размер? главное чтобы был не меньше самой таблицы.
rpy3uH вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Опять про гистограммму artemavd Общие вопросы Delphi 10 15.07.2008 11:44
И опять мэйлы.. Опять... Pusher PHP 6 28.06.2008 03:08
И опять LookupComboBox Alex_666 БД в Delphi 1 02.06.2008 10:22
Опять Word krem Общие вопросы Delphi 3 08.05.2007 16:27