Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ВМСС-всё(ЭКЗАМЕН).docx
Скачиваний:
36
Добавлен:
09.12.2018
Размер:
8.84 Mб
Скачать
    1. 3.1.2. Список команд.

Список команд – это, по сути дела, список операций, которые способен выполнять компьютер. В среднем их количество составляет 70-80 команд, но бывает и больше.

У персональных и микро ЭВМ уже устоялось 64-128 (RISC – 32). (Заметим, что если разрядность КОП равна 8, то всего может быть построено 28=256 двоичных кодов, каждый из которых может быть использован для кодирования определенной операции). Казалось бы, чем больше, тем лучше. СуперМини ЭВМ VAX 11/780 имела, например, 303 команды. Кажется это абсолютный рекорд.

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

Среди списка команд можно выделить следующие группы операций:

  1. арифметические (сложения разных видов, инкрементация, декрементация, умножение и т.п.);

  2. логические (обычно поразрядные!); сюда же обычно относят сдвиги;

  3. операции пересылок данных, кодов (между процессором, СОЗУ и ОЗУ, между ячейками ОЗУ и др.);

  4. передачи управления (условные и безусловные переходы, вход и выход из подпрограмм и др.);

  5. операции с внешними устройствами

  6. специальные команды (Останов, Пустая команда и др.);

Помимо такой (основной!) классификации иногда выделяют классы:

  • операции над стеками;

  • операции арифметики с двойной точностью;

  • операции арифметико-логические (например, сдвиг и сложение сразу);

  • операции с двоично-десятичными кодами и др.

<119>

    1. 3.1.3. Способы адресации.

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

Размерность адреса, как известно, определяет максимальную область памяти, доступную для процессора. Например, 16-разрядный адрес означает, что может использоваться 216=64К слов (байт).

Разработчики PDP-11 когда-то писали:

«…Самая большая и наиболее распространенная ошибка, которая может быть совершена при конструировании ЭВМ, состоит в том, что не обеспечивается достаточное количество адресных разрядов для обращения к памяти и управления. Совершенно очевидно, что через каждые два-три года требуется увеличивать адрес на один разряд, так как цены на запоминающие устройства снижаются ежегодно на 30%, а пользователи хотят приобретать более совершенные модели вычислительных систем по постоянной цене».

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

Наиболее простым способом указания адреса является включение его в состав (структуру) команды. Но обычно весьма удобными и эффективными являются «манипуляции» адресом, имеющие, в основном, следующие цели:

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

  • допустить работу с адресами в форме, наиболее подходящей для таких широко применяемых структур данных, как стеки и одномерные массивы;

  • указывать полный адрес памяти наименьшим количеством разрядов (делать команду короче);

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

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

<120>

Необходимо различать понятия «адресный код» и «исполнительный адрес».

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

Аи = F ( Ак ).

Последнее выражение справедливо и для команд передачи управления. В этом случае по исполнительному адресу в ЗУ размещается фактический адрес передачи управления.

Операнд является содержимым некоторой ячейки с исполнительным адресом:

О = < Аи >.

В настоящее время в ЭВМ имеется большой набор типов адресации.

Причем существует определенный разнобой в наименованиях этих типов. Попытаемся в них разобраться.

Прежде всего, выделяют два основных принципа адресации: прямой и косвенный.

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

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

<121>

Существующие типы адресации и их характеристики:

  1. Абсолютная (иногда ее и называют прямой). Это самая простая и понятная, так как

Аи = Ак.

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

Рис. 3.1.3.01.

  1. Регистровая (абсолютная регистровая). Операнд хранится в одном из регистров СОЗУ; обычно в этом случае адрес (номер) регистра входит в КОП, а иногда вводится и в аббревиатуру команды.

Рис. 3.1.3.02.

  1. Непосредственная. Операндом является сам адресный код:

О = Ак.

Удобно, если разрядности Ак хватает для размера операнда и обеспечения точности вычислений. Широко используются как адресные константы с последующим применением в других типах адресации. Сокращаются объем программы и время выполнения (меньше обращений к памяти, могут исключаться неупорядоченные адреса констант, которых всегда хватает: 2 и др.). Кроме того, с программиста снимаются заботы о мелких деталях, например присвоение пересекающихся имен константам и др.

Рис. 3.1.3.03.

  1. Неявная. Адресная часть отсутствует, операнд подразумевается (сравните с безадресной командой, это её частный случай) в какой-либо части МП или компьютера: АЛУ, регистр, шина входа.

Пересекается с регистровой адресацией, когда в последней номер регистра входит в КОП; но здесь, по-моему, следует различать случаи:

а) когда поле задания номера регистра выделяется (регистровая адресация);

б) когда поле не выделяется (неявная адресация).

<122>

  1. Косвенная регистровая адресация. Используется в той или иной форме во всех современных микро-ЭВМ.

Рис. 3.1.3.04.

  1. Косвенная абсолютная адресация. Используется при обработке списков, при взаимодействии с подпрограммами и др.

; ;…;

  1. Автоинкрементная. Нужда в ней возникает в связи с необходимостью пошагового просмотра таблиц или списков данных.

Рис. 3.1.3.05.

На рисунке: p – шаг инкрементации (он определяется размером операнда).

Ак ≡ Nr;

Аи = < Nr >;

< Nr > + p => Nr .

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

В последнем случае соблюдаются правила:

  • указатель стека всегда указывает на верхушку стека;

  • с уменьшением содержимого указателя стека объем информации в стеке увеличивается.

Именно поэтому вычитание p (размера операнда), в отличие от автоинкрементной адресации, выполняется до использования адреса в качестве исполнительного.

Рис. 3.1.3.06.

Ак ≡ Nr;

< Nr > - p => Nr ;

Аи = < Nr >.

  1. Косвенная автоинкрементная (применялась ещё в PDP-11, LSI-11 и наших аналогах СМ-, Электроника 60).

Рис. 3.1.3.07.

  1. Косвенная автодекрементная. См. (8) и (9).

<123>

  1. Относительная (адресация по базе).

Первый вариант:

Рис. 3.1.3.08.

Основное удобство – расширение адресного поля. Индексная адресация

является развитием относительной: в команде указан адрес (номер) ячейки, являющейся индексной, хранящей базовый адрес.

Второй вариант:

Рис. 3.1.3.09.

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

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

  1. Индексная (адресация с индексированием).

Рис. 3.1.3.10.

Для индексных регистров (ИР) выделяются либо ячейки ОЗУ, либо (в микропроцессорах) регистры (РОНы) . По Уокерли:

Рис. 3.1.3.11.

  1. прединдексная косвенная адресация – смещение прибавляется к базовому адресу для формирования косвенного адреса, а в содержимое ячейки с косвенным адресом является исполнительным адресом. Была в PDP-11 и её клонах. Ныне применяется в больших ЭВМ.

Ак = Nr;

Акосв = < Абаз. > + < Nr >;

Аи = < Акосв. >.

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

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

  1. Относительная в терминологии Уокерли. Есть в сходных формах в РС-86 и PDP-11.

Рис. 3.1.3.12.

Есть и дальнейшее усложнение этого способа адресации: косвенно-относительная адресация, при которой

Акосв. = < Ак > + < СчК >;

Аи = < Акосв. >.

<124>

  1. Страничная.

Рис. 3.1.3.13.

Вся память делится на страницы, и команда содержит только адрес операнда на странице, а номер страницы определяется одним из путей:

    1. через базовую (нулевую) страницу: номеру страницы присваивается значение «0»;

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

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

Страничная организация очень близка к адресации по базе: отличие в использовании конкатенации вместо суммирования (конкатенацию можно свести к суммированию).

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

<125>

<126>

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]