Дипломированных специалистов «Информатика и вычислительная техника»



Download 12,06 Mb.
Pdf ko'rish
bet90/357
Sana22.02.2022
Hajmi12,06 Mb.
#115195
TuriДиплом
1   ...   86   87   88   89   90   91   92   93   ...   357
Bog'liq
assembler uchebnik dlya vuzov 2-e izd YuRXUW1

Работа со стеком
Стек — это область памяти, специально выделяемая для временного хранения дан-
ных программы. Важность стека определяется тем, что для него в структуре про-
граммы предусмотрен отдельный сегмент.
тот случай, если программист забыл
описать сегмент стека в своей программе, компоновщик
выдаст предупрежда-
ющее сообщение.
Для работы со стеком предназначены три регистра:
И SS — регистр сегмента стека;
SP/ESP — регистр указателя стека;
ВР/ЕВР — регистр указателя базы кадра стека.
Размер стека зависит от режима работы процессора и ограничивается значени-
ем 64 Кбайт (или 4 Гбайт в защищенном режиме). В каждый момент времени дос-
тупен только один стек, адрес сегмента которого содержится в регистре SS. Этот
стек называется текущим. Для того чтобы обратиться к другому стеку
чить стек»), необходимо загрузить в регистр другой адрес. Регистр SS автомати-
чески используется процессором для выполнения всех команд, работающих со сте-
ком.
Перечислим еще некоторые особенности работы со стеком.
• Запись и чтение данных в стеке осуществляются в соответствии с принципом
(Last In First Out — «последним пришел, первым
* По мере записи данных в стек последний растет в сторону младших адресов.
Эта особенность заложена в алгоритм команд работы со стеком.
и При использовании регистров ESP/SP и ЕВР/ВР для адресации памяти ассемб-
лер автоматически считает, что содержащиеся в нем значения представляют
собой смещения относительно сегментного регистра SS.


Работа со стеком
Оперативная память
0000:0000
ss:sp
Сегмент кода
Сегмент данных
Сегмент стека
Вершина стека
Дно стека
Направление
роста стека
Старшие адреса
Рис. 7.3. Концептуальная схема организации стека
В общем случае стек организован
как показано на рис. 7.3.
Регистры SS, ESP/SP и
используются комплексно, и каждый из них
ет свое функциональное назначение. Регистр ESP/SP всегда указывает на вершину
стека, то есть содержит смещение, по которому в стек был занесен последний эле-
мент. Команды работы со стеком неявно изменяют этот регистр так, чтобы он ука-
зывал всегда на последний записанный в стек элемент. Если стек пуст, то значение
ESP равно адресу последнего байта сегмента, выделенного под стек. При занесении
элемента в стек процессор уменьшает значение регистра ESP, а затем записывает
элемент по адресу новой вершины. При извлечении данных из стека процессор
копирует элемент, расположенный по адресу вершины, а затем увеличивает значе-
ние регистра указателя стека ESP. Таким образом, получается, что стек растет вниз,
в сторону уменьшения адресов.
Что нужно сделать для получения доступа к элементам не на вершине, а внутри
стека? Для этого применяют регистр ЕВР. Регистр ЕВР — регистр указателя базы
кадра стека. Например, типичным приемом при входе в подпрограмму является
передача нужных параметров путем записи их в стек. Если подпрограмма тоже
активно работает со стеком, то доступ к этим параметрам становится проблема-
тичным. Выход в том, чтобы после записи нужных данных в стек сохранить адрес
вершины стека в указателе базы кадра стека — регистре ЕВР. Значение в ЕВР в даль-
нейшем можно использовать для доступа к переданным параметрам.
Начало стека расположено в старших адресах памяти. На рис. 7.3 этот адрес
обозначен парой
Смещение
приведено здесь условно. Реально это значе-
ние определяется величиной, которую программист задает при описании сегмента
стека в своей программе. К примеру, для программы из листинга
началу стека
будет соответствовать пара
Адресная пара
— это
для
реального режима значение адреса начала стека, так как размер сегмента в нем
ограничен величиной 64 Кбайт
Какой из регистров применяется для адресации, 32-разрядный или 16-разрядный, зависит от значе-
модификатора
или
в директиве сегментации segment (см. главу 5). При наличии ди-
ректив упрощенного описания сегментов модификаторы
или use32 используются в
model.
б
256


 Глава 7. Команды обмена
Для организации работы со стеком существуют специальные команды записи
и чтения.
Команда PUSH выполняет запись значения
в вершину стека:
push
Интерес представляет алгоритм работы этой команды, который включает два
действия (рис. 7.4):
1. Значение SP уменьшается на 2:
(SP) = (SP) - 2
2. Значение источника записывается по адресу, указываемому парой SS:SP.
Оперативная память
Оперативная память
0000:0000
ss:sp
Сегмент стека
Вершина стека
Дно стека
ss:sp
Т
Сегмент стека
Операнд
Старая вершина стека
Дно стека
Старшие адреса
до команды
PUSH операнд
Старшие адреса ОП
после команды
PUSH операнд

Download 12,06 Mb.

Do'stlaringiz bilan baham:
1   ...   86   87   88   89   90   91   92   93   ...   357




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©hozir.org 2024
ma'muriyatiga murojaat qiling

kiriting | ro'yxatdan o'tish
    Bosh sahifa
юртда тантана
Боғда битган
Бугун юртда
Эшитганлар жилманглар
Эшитмадим деманглар
битган бодомлар
Yangiariq tumani
qitish marakazi
Raqamli texnologiyalar
ilishida muhokamadan
tasdiqqa tavsiya
tavsiya etilgan
iqtisodiyot kafedrasi
steiermarkischen landesregierung
asarlaringizni yuboring
o'zingizning asarlaringizni
Iltimos faqat
faqat o'zingizning
steierm rkischen
landesregierung fachabteilung
rkischen landesregierung
hamshira loyihasi
loyihasi mavsum
faolyatining oqibatlari
asosiy adabiyotlar
fakulteti ahborot
ahborot havfsizligi
havfsizligi kafedrasi
fanidan bo’yicha
fakulteti iqtisodiyot
boshqaruv fakulteti
chiqarishda boshqaruv
ishlab chiqarishda
iqtisodiyot fakultet
multiservis tarmoqlari
fanidan asosiy
Uzbek fanidan
mavzulari potok
asosidagi multiservis
'aliyyil a'ziym
billahil 'aliyyil
illaa billahil
quvvata illaa
falah' deganida
Kompyuter savodxonligi
bo’yicha mustaqil
'alal falah'
Hayya 'alal
'alas soloh
Hayya 'alas
mavsum boyicha


yuklab olish