Непосредственная адресация

В команде содержится не адрес операнда, а непосредственно сам операнд ( рис. 11.5):

Операнд непостредственно доступен.

Плюсы:

- не требуется обращение к памяти

Минусы:

- можно работать только с константами

- число значений ограничего размером поля

Используется для работы с целочисленными константами

Прямая адресация

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

Плюсы: простота

Минусы:

- разрядность регистров общего назначения процессора должна быть не меньше разрядности шины адреса процессора.

- команда имеет доступ всегда только к одному и тому же адресу

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

Косвенная адресация

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

Операндi = ((Аi)).

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

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

Косвенная адресация не применяется по отношению к операндам, находящимся в регистровой памяти.

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

Это разновидности индексной адресации

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

Часто в команду с индексной адресацией включают признак, определяющий шаг индексации Т (Т=1,2,4 и т.д.), что позволяет осуществлять адресацию массивов через байт, слово, двойное слово и т.д.

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

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

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

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

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

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

Флаг направления (Direct Flag)в регистре состояния определяет направление обработки строк. Если он равен 1, то адрес уменьшается, а если он сброшен в 0, то адрес увеличивается.

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

 

28. Стек. Работа стека и его использование.

Практически в любом ЯП есть понятие процедур, использующих локальные переменные. Они доступны во время выполнения процедуры и не доступны после ее окончания.

Где хранить эти переменные? Их нельзя хранить под конкретным адресом в памяти, т.к. процедура может вызывать саму себя, и будут конфликты.

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

Если процедура вызывает другую процедуру – формируется новый стек над уже имеющимся.

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

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

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

· По мере записи данных стек растет в сторону младших адресов. То есть, стек заполняется снизу вверх: первый элемент записывается в самый конец стека (в ячейку с наибольшим адресом), а следующий элемент записывается «над» ним.

· При чтении из стека первым всегда удаляется верхний элемент, поэтому «низ» стека фиксирован, а вершина стека все время сдвигается.

· Адрес верхнего элемента (адрес элемента, записанного в стек последним) называется вершиной стека. Адрес вершины стека хранится в регистре SP (stack pointer, указатель стека). Другими словами, в регистре SP хранится смещение (относительно начала сегмента стека) той ячейки, в которой находится последний элемент.

Команды работы со стеком неявно изменяют этот регистр так, чтобы он указывал всегда на последний записанный в стек элемент. Абсолютный адрес вершины стека SS:SP.задается парой сегментов

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

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

· ss — сегментный регистр стека (адрес сегмента стека);

· sp/esp — регистр указателя стека (адрес вершины стека);

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

Команды работы со стеком

· Запись слова в стек push операнд — запись значения операнд в вершину стека.

· Чтение слова из стека - pop операнд — запись значения из вершины стека по месту, указанному операндом.

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

 

29. Иерархия памяти. Кэш памяти.

Память часто называют «узким местом» фон-Неймановских ВМ из-за ее серьезного отставания по быстродействию от процессоров, причем, разрыв этот неуклонно увеличивается.

Так, если производительность процессоров возрастает вдвое примерно каждые 1,5 года, то для микросхем памяти прирост быстродействия не превышает 9% в год (удвоение за 10 лет), что выражается в увеличении разрыва в быстродействии между процессором и памятью приблизительна на 50% в год.

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

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

Фундамент пирамиды – внешняя память (жесткий и гибкий магнитный диск, магнитные ленты, оптические диски, флэшки):

1. Объем – десятки и сотни гигабайт

2. Время доступа – десятки миллисекунд

Оперативная память:

3. Объем – гигабайты

4. Время доступа – 10-20 наносекунд

5. Реализуется на относительно медленной динамической памяти DRAM

Быстродействующая память (ее же называют Кэш??)

6. На основе статической памяти SRAM

7. Объем – десятки-сотни килобайт

8. Время доступа – до 8 наносек

Регистры процессора

9. Объем – десятки байт

10. Время доступа – 2-3 наносекунды (определяется быстродействием процессора)

 

Кэширование данных

Чем быстрее память, тем она дороже. Но нам хотелось бы быструю и недорогую память. Для этого есть компромиссное решение – кэширование.

Кэширование– это способ совместного функционирования двух типов запоминающих устройств, отличающихся временем доступа и стоимостью хранения данных. При кэшировании за счет копирования наиболее часто использующихся фрагментов информации из медленного ЗУ в быстрое достигается уменьшение времени доступа к данным, но при этом экономится быстродействующая память.

При этом КЭШем называют не только способ организации памяти, но и само быстрое ЗУ, куда производится копирование информации. Более медленное ЗУ называют основной памятью.

Кэширование – универсальный метод, пригодный для ускорения доступа к:

- оперативной памяти – роль КЭШа выполняет быстрая память

- к данным, хранящимся на диске – роль КЭШа выполняют буферы в оперативной памяти

- к другим видам ЗУ.

Виртуальная память по сути – тоже разновидность кэширования, где оперативная память выступает в роли КЭШа по отношению к диску. Правда здесь цель – не ускорение доступа, а увеличение объема и подмена оперативной памяти.