Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Организация стека в З/Р(pmode)

419
29 января 2003 года
Mitja Gladkih
284 / / 19.12.2002
Привет всем!
Кажется, я понял, почему компьютер перезагружался. Понял я это после варьирования параметров стека. Вот мои вопросы:
Когда объявляем стек, параметр(п.) НАЧАЛО означает, при расширении в сторону младших адресов(кстати, какой при это байт атрибутов), начало куска памяти под стек или максимальный(начальный) адрес?
п. РАЗМЕР - размер куска памяти под стек или что-то другое, какие-то границы(как написано в двухтомном описании 486)?
1.8K
29 января 2003 года
Lonesome
112 / / 27.01.2003
Цитата:
Originally posted by Mitja Gladkih
Привет всем!
Кажется, я понял, почему компьютер перезагружался. Понял я это после варьирования параметров стека. Вот мои вопросы:
Когда объявляем стек, параметр(п.) НАЧАЛО означает, при расширении в сторону младших адресов(кстати, какой при это байт атрибутов), начало куска памяти под стек или максимальный(начальный) адрес?
п. РАЗМЕР - размер куска памяти под стек или что-то другое, какие-то границы(как написано в двухтомном описании 486)?



Под объявлением стека ты подразумеваешь занос селектора его сегмента в SS?

395
30 января 2003 года
RelB
367 / / 09.11.2002
Цитата:
Originally posted by Mitja Gladkih
Привет всем!
Кажется, я понял, почему компьютер перезагружался. Понял я это после варьирования параметров стека. Вот мои вопросы:
Когда объявляем стек, параметр(п.) НАЧАЛО означает, при расширении в сторону младших адресов(кстати, какой при это байт атрибутов), начало куска памяти под стек или максимальный(начальный) адрес?
п. РАЗМЕР - размер куска памяти под стек или что-то другое, какие-то границы(как написано в двухтомном описании 486)?


Как я понял ты про дескриптор, описывающий сегмент стека? Ваще лучше использовать для стека обычный сегмент данных с расширением вверх. Тут все обычно, БАЗА сегмента и РАЗМЕР, т.е. младший линейный адрес (адрес после всех преобразований: селектор + смещение и т.д.) этого сегмента будет от БАЗЫ до БАЗЫ + РАЗМЕР. Если же мы выберем сегмент расширяющиеся вниз, то линейное пространство этого сегмента будет: от БАЗЫ - РАЗМЕР до БАЗЫ. Введено это для динамических сегментов стека, размер у которых меняется время от времени. Вообще такими сегментами я никогда не полязовался, а пользовался обычными сегментами данных, они проще - просто загружаешь в ss селектор сегмента, а esp устанавливаешь на размер (ну или там на границу) этого сегмента данных.

419
30 января 2003 года
Mitja Gladkih
284 / / 19.12.2002
Цитата:
Originally posted by RelB

Как я понял ты про дескриптор, описывающий сегмент стека? Ваще лучше использовать для стека обычный сегмент данных с расширением вверх. Тут все обычно, БАЗА сегмента и РАЗМЕР, т.е. младший линейный адрес (адрес после всех преобразований: селектор + смещение и т.д.) этого сегмента будет от БАЗЫ до БАЗЫ + РАЗМЕР.


Спасибо за совет, но все ж таки я привык пользоваться обычным, классическим стеком с расширением в сторону младших адресов.

Цитата:

Если же мы выберем сегмент расширяющиеся вниз, то линейное пространство этого сегмента будет: от БАЗЫ - РАЗМЕР до БАЗЫ.


То есть, если я объявлю сегмент стека с расш. вниз, который располагается по 0, размер 100, я должен в БАЗУ занести 100, в esp - тоже 100?

Цитата:

Введено это для динамических сегментов стека, размер у которых меняется время от времени. Вообще такими сегментами я никогда не полязовался, а пользовался обычными сегментами данных, они проще - просто загружаешь в ss селектор сегмента, а esp устанавливаешь на размер (ну или там на границу) этого сегмента данных.


Это как? Можно и в сегменте данных адреса уменьшать, как в стеке?(объявит данные, но идент. стеку?)

395
30 января 2003 года
RelB
367 / / 09.11.2002
Цитата:
Originally posted by Mitja Gladkih

Спасибо за совет, но все ж таки я привык пользоваться обычным, классическим стеком с расширением в сторону младших адресов.

То есть, если я объявлю сегмент стека с расш. вниз, который располагается по 0, размер 100, я должен в БАЗУ занести 100, в esp - тоже 100?

Это как? Можно и в сегменте данных адреса уменьшать, как в стеке?(объявит данные, но идент. стеку?)

Ща я попробую объяснить, я не совсем правильно выразился насчет БАЗА - РАЗМЕР. Короче смотри, как процессор следит за границами сегменита.
1. Сегмент расширяется вверх. Генерируется #GP, если смещение болеше размера сегмента (поле LIMIT в дескрипторе сегмента, учитывая бит гранулярности)
2. Сегмент расширяемый вниз. Генерируется #GP, если смещение не попадает в диапазон LIMIT + 1 до 0FFFFFFFFh для 32-х разрядного сегмента и до 0FFFFh для 16-ти разрядного.
Т.е. для таких сегментов стек располагается только в старших адресах. Если поле LIMIT равно 0, то это значит что размер сегмента равен 4 гб. Вот собственно и все.

Т.е. у тебя полюбому не получится стек в диапозоне от 0h до 100h если использовать стек с расширением вниз (т.е. получится, но через заднее место Base Address на ноль, esp = 100h, LIMIT = 0). Для этой цели воспользуйся обычным сегментом данных (чего тебе не нравится) с БАЗОЙ = 0, LIMIT = 100h, esp = 100h. Ни какой разницы.

419
30 января 2003 года
Mitja Gladkih
284 / / 19.12.2002
Цитата:
Originally posted by RelB

Т.е. у тебя полюбому не получится стек в диапозоне от 0h до 100h если использовать стек с расширением вниз (т.е. получится, но через заднее место Base Address на ноль, esp = 100h, LIMIT = 0). Для этой цели воспользуйся обычным сегментом данных (чего тебе не нравится) с БАЗОЙ = 0, LIMIT = 100h, esp = 100h. Ни какой разницы.


В этом случае стек тоже будет расти "вниз"?
Какая тогда разница?
Спасибо!

395
31 января 2003 года
RelB
367 / / 09.11.2002
Цитата:
Originally posted by Mitja Gladkih

В этом случае стек тоже будет расти "вниз"?
Какая тогда разница?
Спасибо!

Да, он будет расти вниз, т.е. esp будет уменьшаться как и положено. Сегменты расширяюшиеся вниз используются для стековых сегментов, которые меняют свой размер во времени. Т.е. если использовать обычный сегмент при уменьшении значения поля LIMIT, будут потеряны значения, которые были заPUSHены первыми, а при увеличении стек будет уже располагаться не сверху, а посередине сегмента, и эффекта от увеличения ты не получишь. А у сегмента, расширяемого вниз граница движется внизу, поэтому изменение поля LIMIT не изменит само содержимое стека, а так же даст эффект от увеличения сегмента.
Далее, не думайте, раз сегмент расширяется вниз, значит это именно сегмент стека. Это не обязательно!!! Такие сегменты различаются только лишь организацией проверки на выход за границы сегмента и все. Такие сегменты можно спокойно использовать и под данные.

419
31 января 2003 года
Mitja Gladkih
284 / / 19.12.2002
Цитата:
Originally posted by RelB
Да, он будет расти вниз, т.е. esp будет уменьшаться как и положено.


А какая разница между обычным сегментом стека и сегментом данных с расширением вниз? Только проверка на выход за границы? А какой байт атрибутов у такого сегмента?

424
31 января 2003 года
(C)dragon
307 / / 04.12.2002
Цитата:
Originally posted by Mitja Gladkih

А какая разница между обычным сегментом стека и сегментом данных с расширением вниз? Только проверка на выход за границы? А какой байт атрибутов у такого сегмента?



А что, разве есть обычный сегмент стека?

419
01 февраля 2003 года
Mitja Gladkih
284 / / 19.12.2002
Цитата:
Originally posted by (C)dragon

А что, разве есть обычный сегмент стека?


Ну, вроде, речь идет о стеке, и сегменте данных, приспособленном под стек. Или я чего-то недопонял?!

395
01 февраля 2003 года
RelB
367 / / 09.11.2002
Все, говорю последний раз. Нет сегментов приспособленных под сегмент стека!!! Есть сегменты данных с расширением вверх и вниз. Их различия я описал выше. Различаются помойму они битом B поля атрибутов сегментов (могу ошибаться).
419
01 февраля 2003 года
Mitja Gladkih
284 / / 19.12.2002
Цитата:
Originally posted by RelB
Все, говорю последний раз. Нет сегментов приспособленных под сегмент стека!!! Есть сегменты данных с расширением вверх и вниз. Их различия я описал выше. Различаются помойму они битом B поля атрибутов сегментов (могу ошибаться).


Ладно, ладно, молчу!
Просто мне так удобнее именовать - "стек" и остальное. Исправлюсь...

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог