1127 / 261 / 9
Регистрация: 11.06.2010
Сообщений: 1,050
|
||||||
1 | ||||||
Странные явления(Память/Стек)24.07.2012, 16:47. Просмотров 951. Ответов 6
Метки нет Все метки)
(
Явление 1:
Здравствуйте, форумчане. Продолжаю писать ОС. Добрался до многозадачности. Решил сделать программную многозадачность и переключать задачу через каждые пять инструкций. Для этих целей решил заюзать #DB. Проблема в том, что, когда управление передается обработчику #DB, в стеке перед EIP оказывается еще одно слово. В манах интела не нашел объяснения этой траблы(мб, смотрел плохо). Слово вытаскиваю из стека перед тем, как тащить оттуда EIP, но у меня вопрос:это баг виртуалок(Варя/Бочс/Виртуал Бокс) или я снова чего-то не знаю? Явление 2: Значения в памяти после 1МБ меняются сами:
С памятью явление неожиданно прошло(Чудо?!), но осталось другое. Кладу в стек SS,ESP,EFLAGS,CS,EIP, после чего делаю iretd, на что бочс мне отвечает: Код
iret: SS selector null
0
|
|
24.07.2012, 16:47 | |
Стек и динамическая память Динамическая память и стек,различие Стек или динамическая память!? Динамическая память (список, очередь, стек)
__________________
6
Помогаю в написании курсовых работ и дипломов здесь. |
|
390 / 178 / 2
Регистрация: 14.03.2012
Сообщений: 443
|
|
24.07.2012, 17:10 | 2 |
Из "Язык ассемблера: уроки программирования - Рудаков П.И":
0
|
390 / 178 / 2
Регистрация: 14.03.2012
Сообщений: 443
|
|
24.07.2012, 17:27 | 3 |
1
|
1127 / 261 / 9
Регистрация: 11.06.2010
Сообщений: 1,050
|
|
24.07.2012, 18:31 [ТС] | 4 |
Всё бы хорошо, вот только при #DB кода ошибки нет и быть не может. Тем более, код ошибки весит 4 байта, а у меня в стеке лишних лишь 2.
По поводу выдержки из Рудакова: NT в сохраненном eflags я сбрасываю каждый раз перед iretd(как я думаю), но, т.к. со стеком жуткие непонятки, даже не знаю уже, что я там сбрасываю,а что поднимаю. Проблему с SS решил(методом тыка):после того, как кладу новый селектор для CS, кладу еще одно лишнее слово. Не ясно, почему, но работает(на виртуалках). Далее трабла: несмотря на то, что EIP,CS,SS каким-то чудом грузятся после iretd правильно, EFLAGS и ESP грузятся криво. Мб, кто писал программную многозадачность и может поделиться исходниками? А то я уже не знаю, откуда брать данные, если не из манов интела. Спасибо заранее. Пока у меня получилось так(по iretd): SS 10 байт(какая у них структура????) CS EIP <--------------------ESP указывает сюды
0
|
390 / 178 / 2
Регистрация: 14.03.2012
Сообщений: 443
|
|
24.07.2012, 18:40 | 5 |
Вот как раз в "Язык ассемблера: уроки программирования - Рудаков П.И" посмотри. Там есть примеры. И вообще там очень хорошо про PM написано.
0
|
1127 / 261 / 9
Регистрация: 11.06.2010
Сообщений: 1,050
|
|
24.07.2012, 18:45 [ТС] | 6 |
Ошибку натворил.
Правильно: Перед тем, как класть CS, кладу лишнее слово. _lucius_, почитаю. Спасибо
0
|
1127 / 261 / 9
Регистрация: 11.06.2010
Сообщений: 1,050
|
|
30.07.2012, 00:04 [ТС] | 7 |
Почитал, покодил. Всё заработало. Всем спасибо. Тему можно закрыть
0
|
30.07.2012, 00:04 | |
Заказываю контрольные, курсовые, дипломные работы и диссертации здесь или здесь. Как внести элементы в стек не выделяя память? Стек и распределяющая память. Где лучше хранить? В чем различия? Стек. Определить функции: Попытка чтения или записи в защищенную память Память. Стек или куча - есть ли преимущества одного кода над другим? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |