Стек и его использование (2ч) — КиберПедия 

Опора деревянной одностоечной и способы укрепление угловых опор: Опоры ВЛ - конструкции, предназначен­ные для поддерживания проводов на необходимой высоте над землей, водой...

Археология об основании Рима: Новые раскопки проясняют и такой острый дискуссионный вопрос, как дата самого возникновения Рима...

Стек и его использование (2ч)

2022-10-04 27
Стек и его использование (2ч) 0.00 из 5.00 0 оценок
Заказать работу

 

Работа с памятью и стеком

Память трактуется как одномерный массив байтов, каждый байт ассоциируется с двоичным адресом (физическим адрес).

Физический адрес – это 20-битовое беззнаковое целое от 0h до FFFFFh, которое позволяет описать адресное пространство объемом 1 Мбайт.

Разрядность основного слова МП равна 2 Байта = 16 бит.Поэтому для вычисления физического адреса используется выделение из адресного пространства сегментов по 64Кбайта (216), и в пределах сегмента можно использовать 16-разрядный адрес.

Сегменты в адресном пространстве могут размещаться, только начиная с байтов, адреса которых кратны 16, т.е. 4 младших бита – нулевые. Такие адреса называются параграфами.

Логический адрес представляет собой пару 16-тибитовых беззнаковых целых чисел, разделенных двоеточием:

- начальный адрес сегмента (базовый),

- смещение (эффективный адрес), указывает расстояние в байтах от начала сегмента до адресуемого байта.

Например,

CS:IP

При вычислении физического адреса МП расширяет содержимое сегментного регистра четырьмя нулевыми битами справа, затем суммирует полученное число со смещением.

 


                                              Сегментный регистр

     
Начало сегмента
 

 


...
                                               смещение

 

 


Получим схему образования физического адреса.

 

                                           15                  12 11                                               0                     

DS

начальный адрес сегмента

0 0 0 0
+  

15                                                                     0    

смещение внутри сегмента

 

19                                                                                                    0

физический адрес ячейки памяти

       

 

Ячейка памяти – это неделимый в данный момент набор последовательных битов.

 

Команда XCHG - обмен значений операндов. Синтаксис команды:

xchg<операнд1>, <операнд2>

 В качестве операндов может выступать регистр или значение в памяти. Разумеется, одновременно два значения памяти менять нельзя. Операнды могут быть любого размера.

Команда ADC - сложение с учётом флага переноса. Синтаксис команды полностью идентичен синтаксису команды ADD. Отличие команды ADC от команды ADD заключается только в том, что команда ADC после выполнения сложения прибавляет к результату значение флага CF, т. е. если этот флаг выставлен, то происходит инкремент результата.

Команда LEA - загрузка эффективного адреса. Синтаксис команды:

lea<регистр>, <переменная>

 Команда загружает адрес переменной в регистр общего назначения. В целом без этой команды можно обойтись, но в некоторых случаях она бывает очень полезна. С помощью этой команды можно произвести некоторые вычисления, которые обычно делаются в два этапа; например, после выполнения этой команды leaeax, [ebx + ebx * 4] в ЕАХ мы получим значение из ЕВХ, умноженное на 5. Наиболее полезной команда LEA будет в следующем случае:

leaесх, [edx + 4]; после выполнения этой команды в регистр ЕСХ будет помещено значение EDX, увеличенное на 4 - таким образом, мы заменяем одной командой LEA пару команд MOV/ADD.

Команда PUSHF - сохранение регистра флагов в стеке. Эта команда сохраняет первые 2 байта регистра флагов в стеке. В защищённом режиме эта команда сохраняет 4 байта регистра флагов в стеке, и она уже называется PUSHFD, но опкод такой же. Соответственно команда PUSHFQ сохраняет 8 байт регистра флагов в стеке.

 

Работа со стеком

 

Стек – это область памяти, запись и чтение данных, в которой основаны на принципе LIFO (Lastinputfirstoutput).

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

В ПЭВМ стек используется для временного хранения данных, необходимых для программ и процедур, для передачи параметров в процедуры и для хранения некоторых промежуточных данных.

Считывание и загрузка в стек осуществляется двухбайтовыми словами.

Для стека можно отвести любую область памяти, но к ней предъявляются 2 требования:

-максимальная емкость 64КБ (32К слов),

-конечный адрес должен быть кратным 16 (параграф).

Таким образом, стек представляет собой один сегмент памяти, называемый сегментом стека. Для него используется сегментный регистрSS, указывающим на его начало, т.е. базу стека. Для работы со стеком обычно используется косвенная адресация через указатель стека SP.

Физический адрес, формируемый парой SS:SPназывается вершиной стека.

SP-2
SS
В начале работы SP указывает на последнюю ячейку сегмента стека. При загрузке новогочисла в стек производится автоматический декремент указателя стека на длину слова в байтах, т.е. SP:=SP–2.

     
 
ОП

 


Считывание числа из стека сопровождается автоматическим инкрементом указателя стека: SP:=SP+2, причем считается, что ячейка стека, содержащая считанное число свободна, но ее содержимое остается без изменения до следующей засылки в стек.

Длядополнительного произвольного обращения к элементам стека (не через вершину) можно использовать регистр ВР, называемый дополнительным указателемстека.

Доступ к элементам стека через BPосуществляется на основе определения расстояния от нужного слова до вершины стека и базовой адресации.

Например:

MOVBP,SP; BP:=SP

MOVAX,[BP+4]  ; эквивалентно MOVAХ,SS:[BP+4]

 

Примечание: ВР по умолчанию относится к сегменту стека, а не к сегменту данных.

Если в программе нет явного использования стека, то необходимо его зарезервировать в объеме 128Б для автоматического использования.

 

Стековые команды

 

а) PUSHop; запись слова в стек, флаги не модифицируются

ор – может быть словом в регистре (в том числе и в сегментном) или в ячейке памяти, но не непосредственный операнд.

Алгоритм выполнения:

- декремент SP:=SP–2;

- пересылка содержимого ор на сводную ячейку стека с адресом[SS:SP] в польской инверсной записи (LEM).

Пример:

PUSHAX

 

Примечание:

-SPиспользуется по умолчанию;

- записывать можно только слово;

SS
-если стековый сегмент объемом 64КБ, то при полном его заполнении, каждое следующее обращение разрушаетсодержимое стека.

 

 

 


- Если стек меньшего размера, то при полном его заполнении каждоеследующеезаполнение разрушает область памяти вне стека.

 

б) РОР ор; чтение слова из стека

ор  может быть регистром, в том числе сегментным регистром (кроме CS) или ячейка памяти.

Пример,

POPCX

Примечание:

Если пытаться считывать из пустого стека, то ошибка не фиксируется, а считывается слово, следующее за сегментом стека.

 

в) PUSHF; копирование слова из регистра FLAGSв стек

POPF;копирование слова из стека в регистр FLAGS

Операнд отсутствует. Эти команды флаги не модифицируют, но позволяют сменить флаг TF.

Чтобы изменить TF, нужно выполнить PUSHF, затем изменить 8-й бит;

POPF–измененное состояние вернуть в регистр флагов.

 


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

Организация стока поверхностных вод: Наибольшее количество влаги на земном шаре испаряется с поверхности морей и океанов (88‰)...

Состав сооружений: решетки и песколовки: Решетки – это первое устройство в схеме очистных сооружений. Они представляют...

Биохимия спиртового брожения: Основу технологии получения пива составляет спиртовое брожение, - при котором сахар превращается...

Двойное оплодотворение у цветковых растений: Оплодотворение - это процесс слияния мужской и женской половых клеток с образованием зиготы...



© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!

0.018 с.