Форум программистов, компьютерный форум, киберфорум
Assembler, MASM, TASM
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
1127 / 261 / 9
Регистрация: 11.06.2010
Сообщений: 1,050
1

Странные явления(Память/Стек)

24.07.2012, 16:47. Просмотров 951. Ответов 6
Метки нет (Все метки)


Явление 1:
Здравствуйте, форумчане. Продолжаю писать ОС. Добрался до многозадачности. Решил сделать программную многозадачность и переключать задачу через каждые пять инструкций. Для этих целей решил заюзать #DB. Проблема в том, что, когда управление передается обработчику #DB, в стеке перед EIP оказывается еще одно слово. В манах интела не нашел объяснения этой траблы(мб, смотрел плохо). Слово вытаскиваю из стека перед тем, как тащить оттуда EIP, но у меня вопрос:это баг виртуалок(Варя/Бочс/Виртуал Бокс) или я снова чего-то не знаю?

Явление 2:
Значения в памяти после 1МБ меняются сами:
Assembler
1
2
3
4
        mov word [ES:EDI+46],01001011b ;пишу по адресу(900040h) одно
        xor eax,eax
        mov ax,[ES:EDI+46] ;а читаю другое(04h)
        ;-----------------------МАГИЯ?---------------------------------
Добавлено через 1 час 11 минут
С памятью явление неожиданно прошло(Чудо?!), но осталось другое. Кладу в стек SS,ESP,EFLAGS,CS,EIP, после чего делаю iretd, на что бочс мне отвечает:
Код
iret: SS selector null
SS лежит в стеке. Что ему не нравится?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
24.07.2012, 16:47
Ответы с готовыми решениями:

Стек и динамическая память
Читаю книжку по с++. Для хранения переменных может использоваться стек или динамическая память. ...

Динамическая память и стек,различие
подскажите в чем различие дин.памяти по отношению к стеку..и почему дин память лучше..?

Стек или динамическая память!?
Добрый вечер всем! Прошу ответить на вопрос (ниже приведен код): почему строка "Test!" выводится на...

Динамическая память (список, очередь, стек)
Добрый вечер.. Простите, но т.к. я не особо разобрался с дин. памятью прошу помощи ещё с данной...

__________________
Помогаю в написании курсовых работ и дипломов здесь.
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
Цитата Сообщение от sh2ezo Посмотреть сообщение
Проблема в том, что, когда управление передается обработчику #DB, в стеке перед EIP оказывается еще одно слово.
Это код ошибки.
1
Миниатюры
Странные явления(Память/Стек)  
1127 / 261 / 9
Регистрация: 11.06.2010
Сообщений: 1,050
24.07.2012, 18:31  [ТС] 4
Цитата Сообщение от _lucius_ Посмотреть сообщение
Это код ошибки.
Всё бы хорошо, вот только при #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
Цитата Сообщение от sh2ezo Посмотреть сообщение
Проблему с SS решил(методом тыка):после того, как кладу новый селектор для CS, кладу еще одно лишнее слово. Не ясно, почему, но работает(на виртуалках).
Ошибку натворил.

Правильно: Перед тем, как класть CS, кладу лишнее слово.


_lucius_, почитаю. Спасибо
0
1127 / 261 / 9
Регистрация: 11.06.2010
Сообщений: 1,050
30.07.2012, 00:04  [ТС] 7
Почитал, покодил. Всё заработало. Всем спасибо. Тему можно закрыть
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
30.07.2012, 00:04

Заказываю контрольные, курсовые, дипломные работы и диссертации здесь или здесь.

Как внести элементы в стек не выделяя память?
Добрый вечер. Интересует вопрос, как внести элементы в стек не используя процедуры New и GetMem? ...

Стек и распределяющая память. Где лучше хранить? В чем различия?
Например: #include &quot;stdafx.h&quot; using namespace System; // Class representing a height value...

Стек. Определить функции: Попытка чтения или записи в защищенную память
Имеется элемент стека (дисциплина обслуживания LIFO): struct Stack { char * data; //указатель...

Память. Стек или куча - есть ли преимущества одного кода над другим?
Здравствуйте, хотел спросить в чем различия. В чем тут недостатки и преимущества разных способов?...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.