Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Пользовательский стек




Переполнение стека

1) Заметим что в стек может быть записан ограниченный объём данных. Если длинна регистра - LR а число ячеек ОЗУ отведённых под область стека N одновременно и без неприятных последствий в стек может быть записано не более не более N/ LR значений регистров.

 

2) Если вся область стека уже заполнена данными, а программа продолжила записывать данные в область стека – данные записываются в область ОЗУ уже не отводимую под область стека. Записанные слова данных могут повредить другие данные, или программы расположенные на адресах лежащих выше отведённых под область стека. Такую ситуацию принято называть "переполнение стека", и переполнение стека – может вызвать серьёзные разрушения работы операционной системы и программ.

 

3) Между прочим: намеренное целенаправленное переполнение системного стека создают многие программы-вирусы, пытаясь, тем самым - нарушить работу операционной системы и обойти средства защиты ОC.

 

 

 

1) Тот стек, что был рассмотрен выше, и с которым работают команды PUSH и POP, используется для реализации важных системных функции (в частности – при организации переходов от программ к подпрограммам) и называется "системный стек".

 

2) Если прикладной алгоритм выполняемый программой предполагает использование стека, то в качестве такого стека может быть использован и системный стек. Однако: использовать системный стек в таких целях следует с большой осторожностью – ошибка (например – переполнение) при работе со системным стеком может привести к серьёзным нарушениям в работе ОС и программ. Поэтому в таких случаях лучше организовать дополнительный так называемый "пользовательский стек", или - даже несколько пользовательских стеков.

 

3) Пользовательский стек организуется программистом следующим образом:

а) В области памяти доступной задаче резервируется "область пользовательского стека". Опять таки, как и с системным стеком "зарезервировать" в данном случае означает – не использовать в прикладной программе эту область для других целей.

б) Один из универсальных регистров (любой свободный, пусть это будет к примеру reg1) выделяется для использования в качестве указателя пользовательского стека. В него прописывается адрес ячейки, с которой начинается системный стек.

 

 

4) Для записи в пользовательский стек не получится использовать PUSH, так как эта команда - работает с системным стеком. Тогда для записи регистра reg2 в пользовательский стек прийдётся использовать последовательность из двух команд:

 

MOV [reg1] reg2 (1)

ADD reg1 #LR (2)

 

 

Первая команда помещает содержимое reg2 по адресу на который указывает reg1 (функционально эта команда выполняет роль ту же, что и микрооперации 3 команды PUSH).

Вторая команда (добавить к reg1 константу LR) переводит указатель пользовательского стека вверх (функционально эта команда выполняет роль микрооперации 4 команды PUSH)

 

5) По аналогии, для чтения из пользовательского стека также используется последовательность из двух команд:

 

SUB reg1 #LR

MOVE reg2 [ reg1]

 

Функционально эти команды выполняет роль ту же, что и микрооперации 3 и 4 команды PUSH

 




Поделиться с друзьями:


Дата добавления: 2013-12-12; Просмотров: 947; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.008 сек.