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

Индивидуальные очистные сооружения: К классу индивидуальных очистных сооружений относят сооружения, пропускная способность которых...

Механическое удерживание земляных масс: Механическое удерживание земляных масс на склоне обеспечивают контрфорсными сооружениями различных конструкций...

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

2022-10-04 30
Стек и его использование (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–измененное состояние вернуть в регистр флагов.

 


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

Поперечные профили набережных и береговой полосы: На городских территориях берегоукрепление проектируют с учетом технических и экономических требований, но особое значение придают эстетическим...

Эмиссия газов от очистных сооружений канализации: В последние годы внимание мирового сообщества сосредоточено на экологических проблемах...

Папиллярные узоры пальцев рук - маркер спортивных способностей: дерматоглифические признаки формируются на 3-5 месяце беременности, не изменяются в течение жизни...

Автоматическое растормаживание колес: Тормозные устройства колес предназначены для уменьше­ния длины пробега и улучшения маневрирования ВС при...



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

0.589 с.