Организация ЭВМ и систем. Однопроцессорные ЭВМ. Часть 2

       

СПОСОБЫ АДРЕСАЦИИ


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

Адресный код (АК) – это информация об адресе операнда, содержащаяся в команде.

Исполнительный адрес (АИ) – это номер ячейки ОП, к которой производится фактическое обращение.

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

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

Подразумеваемый операнд

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

Подразумеваемый адрес

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

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

В команде содержится не адрес операнда, а непосредственно сам операнд (рис. 5.3). Это способ уменьшения объема программы и занимаемой памяти, так как не требует операций обращения к памяти и самой ячейки памяти.

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



Обычно он используется для хранения различных констант.

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

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

Достоинства: быстрота исполнения и простота реализации. Недостатком является длинная адресная часть команды.

Относительная адресация, или базирование

Исполнительный адрес (АИ) определяется как сумма адресного кода команды (АК) и некоторого числа АБ, называемого базовым адресом. АИ = АБ + АК (рис. 5.5).



Для хранения АБ используются базовые регистры. Это или специальные внутренние регистры процессора и сверхоперативной памяти, или специально выделенные ячейки ОП с короткими начальными адресами. В команде выделяется поле "B" для указания номера базового регистра. Число разрядов в базовом адресе АБ выбирается таким, чтобы можно было адресовать любую ячейку ОП. Адресный код АК самой команды имеет мало разрядов и используется для представления лишь сравнительно короткого "смещения" (D). Это смещение определяет положение операнда относительно начала массива, задаваемого базовым адресом АБ (рис. 5.5, а).

Возможны два варианта формирования АИ при базировании.

  • Метод суммирования (рис. 5.5, б).


  • Этот метод прост и позволяет задавать в качестве АБ любой адрес ОП. Недостатком является то, что на операцию суммирования уходит время.

    • Метод совмещения (рис.5.5, в).


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

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


      п. 9.4). Кроме того, она облегчает компоновку программ, части которых написаны разными программистами.

      Регистровая адресация

      Это частный случай так называемой укороченной

      адресации, суть которой сводится к тому, что используется только небольшая группа фиксированных ячеек памяти с начальными (короткими) адресами (0000001, 0000010, 0000011 и т.д.). Такая адресация используется только совместно с другими типами адресации.

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

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

      Это, фактически, прямая адресация к сверхбыстрой памяти процессора. Достоинства данного способа адресации – укорочение команд, увеличение скорости выполнения операций. Недостаток – малое число адресов.

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

      Адресный код (АК) команды указывает адрес ячейки ОП, в которой находится исполнительный адрес (АИ) операнда или команды, т.е. это адрес адреса – АА. Схема косвенной адресации представлена на рис. 5.7.

      На косвенную адресацию указывает код операции (КОП) команды. В некоторых ЭВМ в команде отводится специальный разряд (указатель адресации

      – УА), и цифра 0 или 1 в нем указывает, является адресная часть команды прямым адресом или косвенным.



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

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



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

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

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

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

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

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

      Стековая адресация

      При рассмотрении устройств памяти отмечалось, что основной принцип работы стекового ЗУ соответствует правилу: "последний пришел – первый ушел" (имеется в виду стек LIFO). Это правило реализуется автоматически. Поэтому при операциях со стеком возможно безадресное задание операнда – команда не содержит адреса ячейки стека, а содержит только адрес (или он подразумевается) регистра или ячейки ОП, откуда слово загружается в стек или куда выгружается из стека.


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

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

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

      При выполнении команды загрузки слова в стек (содержимое РгК) из регистра (в данном случае из Рг5) или ячейки ОП сначала содержимое указателя стека (УС) уменьшается на 1 (стек "перевернутый"), а затем слово помещается в ячейку стека, указываемую УС. При выгрузке слова из стека в регистр или ОП слово сначала извлекается из вершины стека, а затем УС увеличивается на 1 (на рисунке не

      показано).

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



      Безадресные команды на основе стековой адресации предельно сокращают формат команд, экономят память и повышают производительность ЭВМ.

      В современных ЭВМ (микропроцессорах) стек и стековая адресация широко используется для:

      • сохранения содержимого регистров при переходе к подпрограмме и выходе из нее;


      • сохранения информации, содержащейся во внутренних регистрах процессора при прерываниях программы;


      • организации хранения элементов массивов при их циклической обработке.


      • Как уже отмечалось, современные ЭВМ во многих случаях используют сложные, комбинированные системы адресации, которые не могут быть в чистом виде отнесены к какому-либо одному из рассмотренных выше способов адресации. Это позволяет программисту более гибко и эффективно использовать все ресурсы ЭВМ. Однако разнообразие форматов команд и их длины ведет к усложнению УУ процессора и замедлению процесса выполнения команды.


        Содержание раздела