:




Автоинкрементная и автодекрементная адресация.

 

 

Основная (оперативная) память ЭВМ обычно является адресной. Это значит, что каждой хранимой в ОП единице информации (байту, слову) ставится в соответствие специальное число - адрес, определяющий место ее хранения в памяти.

Следует различать понятия адресный код в команде Ак и исполнительный адрес Аи. Адресный код - это информация об адресе операнда, содержащаяся в команде. Исполнительный адрес - это номер ячейки памяти, к которой производится фактическое обращение. В современных ЭВМ, адресный код, как правило, не совпадает с исполнительным адресом.

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

егистровая косвенная адресация требует предварительной загрузки регистра из ОП косвенным адресом, что связано с потерей времени (при косвенной адресации адресный код команды указывает адрес ячейки памяти, в которой находится адрес операнда или команды, таким образом, косвенная адресация может быть иначе определена как «адресация адреса»).




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

 

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

 

Автоинкрементная и автодекрементная адресации могут рассматриваться как упрощенный вариант индексации - весьма важного механизма преобразования адресных частей команд и организации вычислительных циклов, поэтому их часто называют автоиндексацией.

 

Постдекрементная ( postdecrement) - автодекрементная адресация, при которой вычитание производится после выборки операнда.

Предекрементная ( predecrement) - автодекрементная адресация, при которой вычитание производится до выборки операнда.

 

У Intel только 1, нет направления, в процессорах этого типа есть ФЛАГ НАПАВЛЕНИЯ.

Флаг направления (Direct Flag) в регистре состояния определяет направление обработки строк. Если он равен 1, то адрес уменьшается, а если он сброшен в 0, то адрес увеличивается. Флаг направления позволяет одному набору строковых команд обслуживать оба направления в зависимости от установки флага. В некоторых случаях желательно пересылать строку с увеличением адресов, но иногда лучше использовать уменьшение адреса. Сама величина инкремента или декремента адреса определяется размером операнда. Например, для символьных строк, в которых размер операндов равен 1 байту, команды обработки строк изменяют адрес на 1 после каждой операции. Если обрабатывается массив целых чисел, в котором каждый операнд занимает 4 байта, то строковые команды изменяют адрес на 4.

 

28. Стек - структура данных, в которой доступ к элементам организован по принципу «последним пришёл — первым вышел»). Чаще всего принцип работы стека сравнивают со стопкой тарелок: чтобы взять вторую сверху, нужно снять верхнюю.

Добавление элемента, называемое также проталкиванием (push), возможно только в вершину стека (добавленный элемент становится первым сверху). Удаление элемента, называемое также выталкиванием (pop), тоже возможно только из вершины стека, при этом второй сверху элемент становится верхним.

Стек — это область оперативной памяти, специально выделяемая для временного хранения данных программы.

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

Для стека можно отвести любую область памяти, но ее размер зависит от режима работы микропроцессора и ограничивается 64 Кбайт (или 4 Гбайт в защищенном режиме), а начальный адрес должен быть выровнен на границу параграфа (т.е. д.б. кратным 16).

!!! Даже если сама программа не использует стек, сегмент стека в программе все равно надо описывать.Так как стек программы использует ОС при обработке прерываний, возникающих во время выполнения программы.

екомендуемый размер стека (с запасом) - 128 байтов.

В каждый момент времени доступен только один стек, адрес сегмента которого содержится в регистре ss. Этот стек называется текущим.

Особенности организации стека:

1. запись и чтение данных в стеке осуществляется в соответствии с принципом LIFO (Last In First Out — “последним пришел, первым ушел”);

2. по мере записи данных стек растет в сторону младших адресов. Эта особенность заложена в алгоритм команд работы со стеком; Др. словами, стек заполняется снизу вверх: первый элемент записывается в самый конец стека (в ячейку с наибольшим адресом), а следующий элемент записывается «над» ним.

3. при чтении из стека первым всегда удаляется верхний элемент, поэтому низ стека фиксирован, а вершина стека все время сдвигается. Текущее положение этой вершины наз. вершиной стека. Адрес вершины стека храниться в регистре SP (stack pointer, указатель стека). Т.е. в регистре SP хранится смещение той ячейки, в которой находится элемент, записанный в стек последним. Смещение относительно начала сегмента стека. Итак, абсолютный адрес вершины стека задается парой сегментов SS:SP. Команды работы со стеком неявно изменяют этот регистр так, чтобы он указывал всегда на последний записанный в стек элемент. Если стек пуст, то значение esp равно адресу последнего байта сегмента, выделенного под стек.

Замечание: егистр ss автоматически используется процессором для выполнения всех команд, работающих со стеком. Это означает, что при использовании регистров esp/sp и ebp/bp для адресации памяти ассемблер автоматически считает, что содержащиеся в нем значения представляют собой смещения относительно сегментного регистра ss и поэтому префикс SS можно не указывать.

4. Элементы стека могут иметь любой размер (байт, слово и т.д.). Но команды записи и чтения, предназначенные для стека, работают только со словами, т.е. информация, помещаемая в стек и извлекаемая из него, имеет длину 2 байта.

 

Для работы со стеком предназначены три регистра:

•ss — сегментный регистр стека;

•sp/esp — регистр указателя стека;

•bp/ebp — регистр указателя базы кадра стека.

...



<== | ==>
 | Команды работы со стеком.

? google:


 

© studopedia.com.ua '.


: 0.002 .