На главную Назад
Добро пожаловать, уважаемый посетитель!

Региструказателя стека(SP)-это 16-битовыйрегистр, который

определяеттекущеесмещениевершиныстека. Процессор использует

указатель стека совместно с регистром сегмента стека для формирова-

ния физическогоадреса. Процессор используетпару регистров SS:SP

для всехстековых ссылок, включаяPUSH, POP, CALLи RETURN. Пара

SS:SPвсегдауказываеттекущуювершинустека.Когдакоманда

помещает в стек слово, регистрSP уменьшается на два. При извлече-

нии изстека слова процессорувеличивает регистр SPна два. Стек

растет внаправлении меньших адресовпамяти. Все стековыеопера-

ции используютзначения размером в слово.Отдельный байт не может

быть ни помещен в стек ни взят из него.

Процессор изменяет регистр SPдля того чтобы отразить действия

над стеком. Нарегистр SS ни одна изстековых операций не влияет.

Программа устанавливает регистр SSнезависимо от какой либо опера-

цииPUSH(поместитьвстек)илиPOP(извлечь), после чего он

указываетнасегментстека.Этоозначает,чтосистемный стек

ограниченвразмере64килобайтами.Например,еслипрограмма

устанавливает регистр SSв 1000H, а регистр SP -на 0, то первое,

чтобудет помещенов стек,разместится поадресам 1000:FFFFHи

1000:FFFEH.Последовательнопомещаемыевстекданныебудут

размещатьсявнемповсеболеемладшим адресам, пока последий

объектнебудетрасположенв1000:0001Hи1000:0000H.Если

программапоместит встек вэтот моментеще что-нибудь,то оно

разместитсяв 1000:FFFFHи 1000:FFFEH,то естьв первыхбайтах

используемыхстеком.Посколькустектеперь"замкнулся",ранее

помещенные в него данные разрушены.

При нормальном использовании длина стека не достигает 64K. Если

программаустанавливает стекв 512байт, например,то она может

инициализироватьпару SS:SPкак 1000:2000H.Первая ячейкастека

будет 1000:01FFH, а последняя доступная - 1000:0000H. Если програм-

ма поместит встек более 256 слов, уменьшениерегистра SP вызовет

проходегозначениячерезнульиприведет к размещению данных

сначаласегментастека.Послеэтогопрограммабудетпомещать

стековыеданныевобласть,которая вданномслучаене

предназначалась длястека - начинаяс 1000:FFFFH. Приэтом может

произойти одна из двух неприятныхвещей. Стек может перекрыть коды

 

-49 -

 

 

 

илиданные программыи разрушитьих, либостековые данные будут

направлятьсяв пространство,которое неимеет физической памяти.

Любую из этих вещей оченьтрудно обнаружить при отладке программы,

поэтому единственныйвыход - оставлять длястека как можно больше

места.ВслучаеперсональногокомпьютераIBM,использующего

дисковуюоперационную системуIBM рекомендуетсяразмер стекане

меньше128байт.Этодаетдостаточноместа для удовлетворения

потребностейв стекеразличных служебныхпрограмм DOSи системы

вместе с обычными запросами самой программы.


 

Mail.ru