Меню сайта

Урок 31. Указатель стека

Регистр -указателя стека — (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. При — этомможет
— — — произойти одна из двух неприятных — вещей. Стек может перекрыть коды
— — — или -данные программы — и разрушить — — — их, либо -стековые данные будут
— — — направляться — в пространство, — котороене — имеет физической памяти.
— — — Любую из этих вещей очень — трудно обнаружить при отладке программы,
— — — поэтому единственный — выход — оставлять для — стека как можно больше
— — — места. -В — — — — случае — — — — — персонального -компьютера — — IBM, — использующего
— — — дисковую -операционную систему — IBMрекомендуется — размер стека — не
— — — меньше -128 — байт. — Это — дает — достаточно -места для удовлетворения
— — — потребностей — в стеке — различныхслужебных — программ DOS — и системы
— — — вместе с обычными запросами самойпрограммы.

Категория: Программирование на Ассемблере | Дата: 17.02.13

Меню раздела
Блок