У вас вопросы?
У нас ответы:) SamZan.net

Общая шина и управляет распределением общей шины между памятью и контроллерами внешних устройств рис

Работа добавлена на сайт samzan.net: 2016-06-20

Поможем написать учебную работу

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

Предоплата всего

от 25%

Подписываем

договор

Выберите тип работы:

Скидка 25% при заказе до 6.4.2025

                1.  ПРОЦЕССОР И СТРУКТУРА ПАМЯТИ

                   1.1   ОСНОВНОЙ ПРОЦЕССОР

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

    C=1 ,  если  в  результате выполнения арифметической операции произошел перенос или заимствование из старшего разряда результата;

    V=1,  если произошло арифметическое переполнение;

    Z=1,  если результат выполнения операции равен нулю;

    N=1,  если результат выполнения операции отрицательный.

Указанные признаки вместе с информацией  о  разрешении  прерываний сохраняются в слове состояния процессора.

    Процессор содержит шестнадцать 32-разрядных регистров  общего назначения (РОН) R0 - R15.

    Эти регистры  могут  быть использованы как аккумуляторы,  индексные регистры,  указатели адресов, таблиц, списков и т.п., указатели стека и выполнять другие функции.  Конкретное использование регистров зависит от выбранного режима адресации.  Среди этих  регистров следует особо выделить четыре регистра (R12 - R15).

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

    Регистр R14 употребляется как указатель стека SP (Stack Pointer).

    Регистр R13 является указателем кадра вызова,  который создается для хранения отдельных разрядов слова состояния процессора  и содержимого некоторых регистров при вызове процедуры.  Регистр R12 при вызове процедуры используется как указатель списка аргументов.

    Специальное назначение регистров R12 - R14 не исключает  возможность их использования для других целей.

   └────────────────────────────────────────────────────────┘

                  О Б Щ А Я        Ш И Н А

   ┌────────┐ ┌───────────────────┐ ┌───────────────────┐ ┌─┐

            │ │                   │ │                   │ │

      ┌─────┴─┴─────┐       ┌─────┴─┴─────┐       ┌─────┴─┴─────┐

      │ Центральный │       │  Внешние    │       │ Оперативная │

┌─────┤  процессор  │ ┌─────┤ устройства  │ ┌─────┤   память    │

│     └───────────┬─┘ │     └───────────┬─┘ │     └───────────┬─┘

│ Регистры общего │   │ Регистры внешних│   │ ┌─────────────┐ │

│   назначения    │   │   устройств     │   │ │ Программная │ │

│ ┌─────────────┐ │   │ ┌─────────────┐ │   │ │   область   │ │

│ │     R 0     │ │   │ │             │ │   │ └─────────────┘ │

│ └─────────────┘ │   │ └─────────────┘ │   │ ┌─────────────┐ │

│ ┌─────────────┐ │   │ ┌─────────────┐ │   │ │   Область   │ │

│ │     R 1     │ │   │ │             │ │   │ │  управления │ │

│ └─────────────┘ │   │ └─────────────┘ │   │ └─────────────┘ │

│   . . . . . . . │   │   . . . . . . . │   │ ┌─────────────┐ │

│ ┌─────────────┐ │   │ ┌─────────────┐ │   │ │  Системная  │ │

│ │   R15 (PC)  │ │   │ │             │ │   │ │   область   │ │

│ └─────────────┘ │   │ └─────────────┘ │   │ └─────────────┘ │

└─────────────────┘   └─────────────────┘   └─────────────────┘

  Рис.1.1  Общая структурная схема ЭВМ семейства VAX

       1.2   ПРЕДСТАВЛЕНИЕ ЧИСЕЛ В ЭВМ СЕМЕЙСТВА VAX

            1.2.1  Представление целых чисел

    Большинство целочисленных операций в ЭВМ семейства VAX выполняются над группами из 8, 16 или 32 двоичных разрядов (или битов). Группа из 8 битов называется байтом (byte). Информация, содержащаяся в байте,  в ЭВМ представляется в двоичном виде. Однако для человека более  удобным  является  шестнадцатеричное  представление, когда  информация  в байте представляется в виде двух шестнадцатеричных цифр.  Отметим,  что в ЭВМ семейства VAX  шестнадцатеричная система применяется для записи данных,  адресов и команд. При этом может возникнуть неоднозначность в интерпретации чисел.  Например, число  1734 может интерпретироваться и как десятичное,  и как шеснадцатеричное.  Чтобы  избежать  недоразумений,  шестнадцатеричные числа,  где необходимо, будем сопровождать префиксом ^X. Числа без префикса ^X будем рассматривать как десятичные. Таким образом, если предыдущее число обозначить шестнадцатеричным, то его следовало бы записать как ^X 1734.

    В восьми битах можно составить только 2**8 ,  или 256, двоичных комбинаций. Чтобы избежать подобных ограничений, в ЭВМ семейства VAX для хранения большого количества информации  используется 2, 4, 8 или 16 байтов. Информация, содержащаяся в двух байтах, называется словом (word).  Более крупными единицами информации являются длинное слово (longword),  квадрослово (quadword) и октаслово (octaword).  Единицы информации,  используемые в ЭВМ семейства VAX приведены на рис.1.2.

                                    7           0

                                    ┌───────────┐       Байт

                                    │  БАЙТ  0  │    8 разрядов

                                    └───────────┘

                        15                      0

                        ┌───────────┬───────────┐       Слово

                        │  БАЙТ  1  │  БАЙТ  0  │    16 разрядов

                        └───────────┴───────────┘

31                                              0

┌───────────┬───────────┬───────────┬───────────┐   Длинное слово

│  БАЙТ  3  │  БАЙТ  2  │  БАЙТ  1  │  БАЙТ  0  │     32 разряда

└───────────┴───────────┴───────────┴───────────┘

31                                              0

┌───────────┬───────────┬───────────┬───────────┐

│  БАЙТ  3  │  БАЙТ  2  │  БАЙТ  1  │  БАЙТ  0  │     Квадрослово

├───────────┼───────────┼───────────┼───────────┤

│  БАЙТ  7  │  БАЙТ  6  │  БАЙТ  5  │  БАЙТ  4  │     64 разряда

└───────────┴───────────┴───────────┴───────────┘

63                                             32

31                                              0

┌───────────┬───────────┬───────────┬───────────┐

│  БАЙТ  3  │  БАЙТ  2  │  БАЙТ  1  │  БАЙТ  0  │     Октаслово

├───────────┼───────────┼───────────┼───────────┤

│  БАЙТ  7  │  БАЙТ  6  │  БАЙТ  5  │  БАЙТ  4  │    128 разрядов

├───────────┼───────────┼───────────┼───────────┤

│  БАЙТ 11  │  БАЙТ 10  │  БАЙТ  9  │  БАЙТ  8  │

├───────────┼───────────┼───────────┼───────────┤

│  БАЙТ 15  │  БАЙТ 14  │  БАЙТ 13  │  БАЙТ 12  │

└───────────┴───────────┴───────────┴───────────┘

127                                            96

  Рис. 1.2   Единицы информации в ЭВМ семейства VAX

    Представленные на рис.1.2 форматы используются  для  хранения положительных  и отрицательных целых чисел.  Наибольшее применение находят форматы  байта, слова и длинного слова.  Квадрослова и октаслова лишь частично используются для представления целых чисел и поддерживаются ограниченным числом инструкций. Максимальное значение целого числа зависит от используемого формата (табл.1.1).  Отрицательные числа представляются в дополнительном коде. Знак числа всегда содержится в последнем разряде (7 - для  байта,  15  -  для слова и т.д.). Если значение знакового разряда 0, то число положительное, если 1, - число отрицательное.

           Диапазон представления целых чисел         Таблица 1.1

────────────────┬─────────────────────────────────────────────────

Формат числа   │       Диапазон представления целых чисел

               ├────────────────────────────┬────────────────────

               │          со знаком         │     без знака

────────────────┼────────────────────────────┼────────────────────

Байт           │ от     -128  до        127 │ от 0 до        255

Слово          │ от   -32768  до      32767 │ от 0 до      65535

Длинное слово  │ от  -(2**31) до  (2**31)-1 │ от 0 до  (2**32)-1

Квадрослово    │ от  -(2**63) до  (2**63)-1 │ от 0 до  (2**64)-1

Октаслово      │ от -(2**127) до (2**127)-1 │ от 0 до (2**128)-1

     1.2.2 Представление чисел с плавающей запятой

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

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

    Характеристика - это специфичная машинная форма представления

порядка  и  в отличие от истинного порядка,  который есть число со знаком, всегда является положительным числом. Значение характеристики (Е) определяется как сумма порядка (Р) и постоянного смещения (СМ)

                       Е = Р + СМ  .

                              

Смещение, с учетом того,  что ноль является положительным  числом, равно максимальному порядку плюс 1 (или абсолютной величине самого большого по модулю отрицательного порядка).  Тогда  характеристика самого маленького числа (с порядком Р = -Р[max]-1) будет равна нулю, характеристика самого большого числа (с порядком P = P[max]) - 2P[max]+1, а характеристика числа с нулевым порядком - СМ=P[max]+1. Характеристика числа является смещенным порядком, поэтому ее часто называют просто порядком.

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

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

    ┌──────────────┬──────────────────┬───────────────────┐

      │  Знак числа  │  Характеристика  │  Модуль мантиссы  │

      └──────────────┴──────────────────┴───────────────────┘

    В ЭВМ семейства VAX применяются четыре формата для записи чисел с плавающей запятой: формат типа F, формат типа D, формат типа G  и  формат типа H.  Требуемый для них объем памяти изменяется от 32-битового длинного слова (формат F)  до  128-битового  октаслова (формат H).  Кроме того, форматы типов D и G, каждый занимающий по 64 бита,  различаются числом битов,  отведенных для порядка и мантиссы.

       1.2.2.1  Числа с плавающей запятой в формате F

    В формате F для записи числа с плавающей запятой отводится 32 разряда (одно длинное слово).  При этом, знак числа  занимает один бит, под характеристику отводится 8 разрядов,  и 24-разрядная мантисса (с учетом скрытого бита) хранится в 23 разрядах.

    В формате F на ЭВМ VAX-11 могут быть представлены числа в диапазоне от 2**(-129) до (2**127)-1.  Смещение  порядка  равно  128 (10000000 в двоичном виде).  Следовательно, имеется следующая таблица порядков:

    Десятичный       Двоичное      Шестнадцатеричное

      порядок     представление      представление

       +127         11111111              FF

         +1         10000001              81

          0         10000000              80

         -1         01111111              7F

       -128         00000000              00

    В качестве примера рассмотрим представление десятичного числа 0.75 или  3/4 * (2**0) в виде двоичного числа с плавающей запятой.

Число 0.75 в нормальной форме в двоичной системе счисления:

    Знак       Порядок              Мантисса

     0         00000000      11000000000000000000000

Число 0.75 в форме числа с плавающей запятой  в  двоичной  системе счисления:

    Знак    Характеристика   Мантисса (со скрытым битом)

     0         10000000      10000000000000000000000

    ЭВМ семейства  VAX разрабатывались так,  чтобы обеспечивалась некоторая совместимость с 16-разрядными ЭВМ (в том числе с ЭВМ семейства PDP-11). 32-битовые и 64-битовые числа с плавающей запятой в памяти этих ЭВМ размещаются  как  последовательности  16-битовых слов,  причем  первой  располагается старшая значащая часть числа.

Аналогичная схема записи чисел с плавающей запятой принята и  для ЭВМ семейства VAX.  При записи чисел с плавающей запятой в формате 16-битовых слов это не вызывает затруднений, так как соответствует естественному для человека порядку записи. Однако при записи чисел с плавающей запятой в формате 32-битовых слов внутри длинного слова младшие 16 разрядов числа меняются местами со старшими разрядами числа.  Соответственно,  такой порядок записи чисел с плавающей запятой распространяется и на другие форматы. Формат F представлен на рис.1.3.

    В мантиссе  разряды  увеличивают свое значение от 16-го до 31 (младшая часть) и от 0-го до 6-го (старшая часть).  Число  0.75  в формате F будет представлено следующим образом:

       Двоичное представление               

                                          Шестнадцатеричное

                                             представление

  0000 0000 0000 0000 0100 0000 0100 0000    ^ X 00004040

Бит  15  14  13  12  11  10  9  8  7 6   5   4   3   2   1   0

  ┌────┬───────────────────────────┬────────────────────────┐

  │Знак│ Порядок со  смещением  128│ Старшая часть мантиссы │ А+0

  ├────┴───────────────────────────┴────────────────────────┤

  │                 Младшая часть мантиссы                  │ A+2

  └─────────────────────────────────────────────────────────┘

                    Рис.1.3  Формат F

1.2.2.2  Числа с плавающей запятой в форматах типа D, G, H

    Числа с плавающей запятой в формате F иногда называют числами с  плавающей  запятой  одинарной  точности (точность представления составляет примерно 7 значащих десятичных цифр).  Числа в формате D,  которые иногда называют числами с плавающей запятой двойной точности, имеют 64-битовую длину и поэтому занимают квадрослово.  Формат D идентичен формату F,  за исключением того, что поле мантиссы расширяется от 23 до 55 битов (добавляются 32 бита; скрытый бит не считается). Формат D приведен на рис.1.4.

    Дополнительные биты поля мантиссы допускают представление чисел с точностью примерно 16 значащих десятичных цифр.  Число .75 в формате D будет выглядеть следующим образом :

        Содержимое           Адрес

           4040           начальный адрес

           0000           начальный адрес + 2

           0000           начальный адрес + 4

           0000           начальный адрес + 6

Как квадрослово это будет ^X 0000000000004040.

Бит 15   14 13 12 11 10  9  8  7   6   5   4   3   2   1   0

 ┌────┬────────────────────────┬────────────────────────────┐

 │Знак│Порядок со смещением 128│Самая старшая часть мантиссы│ A+0

 ├────┴────────────────────────┴────────────────────────────┤

 │                  Старшая часть мантиссы                  │ A+2

 ├──────────────────────────────────────────────────────────┤

 │                  Младшая часть мантиссы                  │ A+4

 ├──────────────────────────────────────────────────────────┤

 │                Самая младшая часть мантиссы              │ A+6

 └──────────────────────────────────────────────────────────┘

                    Рис 1.4   Формат D

                              

    Представление чисел  с плавающей запятой в форматах типов F и D,  используемое в ЭВМ семейства VAX,  совпадает с  представлением таких чисел на ЭВМ семейства PDP-11, выпускавшихся фирмой DEC. Это позволяет обеспечить программную совместимость этих двух  семейств ЭВМ.  Существует, однако, новый стандарт для представления чисел с

плавающей запятой,  который был одобрен  Институтом  инженеров  по электротехнике и радиоэлектронике (IEEE).

    Для согласования с этим стандартом в ЭВМ семейства VAX введены  два  новых формата чисел с плавающей запятой типов G и H.  Для представления числа в формате G (рис1.5) используется 64 бита, как и в формате D.  Однако порядок занимает более длинное поле, а мантисса - соответственно поле меньшей длины.  Это означает, что формат  G  несколько менее точный,  но охватывает значительно больший диапазон чисел, чем формат D (см. диапазоны и точность представления в табл.1.2).

    Для представления  чисел  в  формате H (рис.1.6) используется 128 битов,  что в два раза больше,  чем для форматов типа D и G. И для  порядка,  и  для мантиссы отводятся дополнительные биты,  что обеспечивает расширенный диапазон значений и  значительно  большую точность.

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

                                                      Таблица 1.2

Представление чисел с плавающей запятой в ЭВМ семейства  VAX

─────┬──────────────────┬─────────────────────────────────┬───────

Тип │  Длина поля, бит │      Диапазон значений          │ Число

фор-├─────┬────┬───────┤                                 │знача-

мата │ Пол │Поря│  Ман- │                                 │ щих

    │ ная │док │ тисса │                                 │ цифр

─────┼─────┼────┼───────┼─────────────────────────────────┼───────

 F  │  32 │  8 │   23  │   0.29*10**(-38) - 1.7*10**38   │   7

 D  │  64 │  8 │   55  │   0.29*10**(-38) - 1.7*10**38   │  16

 G  │  64 │ 11 │   52  │   0.56*10**(-308)- 0.9*10**308  │  15

 H  │ 128 │ 15 │  112  │ 0.84*10**(-4932) - 0.59*10**4932│  33

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


Бит  15  14 13 12 11 10 9  8  7  6  5  4  3    2    1     0

  ┌────┬───────────────────────────────┬────────────────────┐

  │Знак│   Порядок со смещением 1024   │ Самая старшая часть│ A+0

  │    │                               │      мантиссы      │

  ├────┴───────────────────────────────┴────────────────────┤

  │                 Старшая часть мантиссы                  │ A+2

  ├─────────────────────────────────────────────────────────┤

  │                 Младшая часть мантиссы                  │ A+4

  ├─────────────────────────────────────────────────────────┤

  │              Самая младшая часть мантиссы               │ A+6

  └─────────────────────────────────────────────────────────┘

                    Рис 1.5   Формат G

Бит  15   14  13  12  11  10  9  8  7  6  5  4  3  2  1   0

  ┌────┬────────────────────────────────────────────────────┐

  │Знак│         Порядок со смещением 16384                 │ A+0

  ├────┴────────────────────── ─────────────────────────────┤

  │              Самая старшая часть мантиссы               │ A+2               │

  ├─────────────────────────────────────────────────────────┤

  │                 Старшая часть мантиссы                  │ A+4               │

  ├─────────────────────────────────────────────────────────┤

  │                      .   .   .                          │ A+6

  ├─────────────────────────────────────────────────────────┤

  │                      .   .   .                          │ A+8

  ├─────────────────────────────────────────────────────────┤

  │                      .   .   .                          │A+10

  ├─────────────────────────────────────────────────────────┤

  │                 Младшая часть мантиссы                  │A+12

  ├─────────────────────────────────────────────────────────┤

  │              Самая младшая часть мантиссы               │A+14

  └─────────────────────────────────────────────────────────┘

                     Рис.1.6.  Формат H

               1.3   ОРГАНИЗАЦИЯ ПАМЯТИ

    Память ЭВМ семейства VAX можно рассматривать как набор  ячеек памяти, каждая из которых содержит один байт ( от ^X 00 до ^X FF). Каждая ячейка памяти однозначно идентифицируется адресом,  который в  ЭВМ  семейства VAX представляет собой 32-битовое двоичное целое число (8 шестнадцатеричных цифр).  Поскольку в 32 битах могут быть образованы (2**32), или 4292967926 двоичные комбинации, то в программе можно было бы адресовать  4  Гбайта  памяти ( ^X 00000000 - ^X FFFFFFFF ). Объем  используемой в эмулирующей программе памяти, составляет 1024 ( ^X 400 ) байт. Диапазон возможных адресов в эмулирующей программе:  ^X 00000000 - ^X 000003FF. Каждая из перечисленных единиц информации на рис.1.2 сформирована из последовательно расположенных байт и всегда адресуется так же, как младший байт в этой группе. На рис. 1.7 показано возможное содержимое первых 11 байтов памяти.

       Шестнадцатеричное               Шестнадцатеричный

          содержимое                         адрес

              90                            00000000

              9F                            00000001

              34                            00000002

              12                            00000003

              00                            00000004

              00                            00000005

              9F                            00000006

              EF                            00000007

              CD                            00000008

              0B                            00000009

              00                            0000000A

    Рис. 1.7 Пример шестнадцатеричного представления  содержимого памяти

    В памяти ЭВМ 16-битовое слово запоминается в двух смежных адресах.  Например,  на рис.1.3 слово ^X 1234 запоминается в  байтах  памяти с адресами ^X 00000002 и ^X 00000003.  Причем, младшие разряды  слова  ^X 34  запоминаются  в  байте   с   младшим   адресом ^X 00000002,  а  старшие  разряды слова ^X 12 - в байте со старшим адресом ^X 00000003. При таком представлении байты слова необходимо                 

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

       Шестнадцатеричное               Шестнадцатеричный

           содержимое                        адрес

              1234                          00000002

Здесь указывается только один адрес,  однако при этом  понимается, что  в  байте с адресом ^X 00000002 содержится ^X 34,  а в байте с адресом ^X 00000003 содержится ^X 12.

    В памяти ЭВМ 32-битовые длинные слова запоминаются в  четырех смежных байтах. Например, на рис.1.7 длинное слово ^X 000BCDEF запоминается в памяти, начиная с адреса ^X 00000007.

       Шестнадцатеричное               Шестнадцатеричный

           содержимое                        адрес

              EF                           00000007

              CD                           00000008

              0B                           00000009

              00                           0000000A

По-другому длинное слово в памяти можно преставить в следующем виде:

       Шестнадцатеричное               Шестнадцатеричный

           содержимое                        адрес

            000BCDEF                       00000007

Программист должен  помнить,  что  в данном случае длинное слово в действительности занимает  байты  с  адресами  от  ^X 00000007  до ^X 0000000A,  а  младшие разряды длинного слова ^X EF содержатся в байте с адресом ^X 00000007.

    Квадрослово (64 бита) запоминается в памяти в восьми  смежных байтах,  а октаслово (128 бит) - в 16-ти смежных байтах.

    Предположим, что в 11 байтах ,  на рис. 1.7, представлены три байта, два слова и одно длинное слово в следующем порядке:

    1. Байты располагаются по адресам ^X 00000000,  ^X 00000001 и ^X 00000006.

    2. Слова начинаются с адресов ^X 00000002 и ^X 00000004.

    3. Длинное слово начинается с адреса ^X 00000007.

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

    Важно понимать,  что на рис.1.7 и 1.8 изображена одна и та же информация, которая является просто различным представлением одного  и  того же содержимого памяти.  Отметим,  что содержимое ^X 9F байта памяти с адресом ^X 00000006 в один момент времени может обрабатываться  программой  как байт,  в другой момент времени – как часть слова,  а в последующее время - как часть длинного слова. Не существует способа, который позволил бы, посмотрев на байт в памяти, определить, как он будет использоваться.

       Шестнадцатеричное               Шестнадцатеричный

           содержимое                        адрес

                  90                       00000000

                  9F                       00000001

                1234                       00000002

                0000                       00000004

                  9F                       00000006

            000BCDEF                       00000007

       Рис.1.8  Компактное представление содержимого памяти

               1.4  РЕЖИМЫ АДРЕСАЦИИ

    Формат подавляющего  большинства  команд  ЭВМ  семейства  VAX включает поле кода операции (КОП) и несколько полей операндов, количество которых определяется соответствующим КОП.  Для  некоторых операций операнды могут отсутствовать.  В этом случае команда состоит только из поля кода операции.  Поле КОП имеет  самый  младший адрес в команде и,  как правило, занимает один байт, хотя есть отдельные команды, у которых это поле занимает 2 байта. Затем располагаются поля операндов,  число которых может быть от 1 до 6. Поле операнда  в  ЭВМ семейства VAX называется спецификацией операнда и может размещаться в одном или нескольких байтах,  что  зависит  от способа адресации этого операнда (рис. 1.9).

┌──────────────┬────┬──────────────┬──────────────┬──────────────┐

│ Спецификация │    │ Спецификация │ Спецификация │ Код операции │

│  операнда N  │ ...│  операнда 2  │  операнда 1  │     (КОП)    │

└──────────────┴────┴──────────────┴──────────────┴──────────────┘

 ───────────────────────────────────────────────   ────────────

                  Поле операндов                    Поле операции

            (один или несколько байтов)           (1 или 2 байта)

       Рис.1.9  Структура машинной команды

    Спецификация операнда,  как правило, содержит байт-спецификатор и может содержать дополнительное адресное поле. В байте-спецификаторе указывается режим адресации и номер используемого регистра.  Наличие, длина и использование дополнительного адресного поля в основном определяется режимом адресации. Адресация в ЭВМ семейства VAX осуществляется достаточно большим  числом  вариантов,  что соответствует  разнообразию  способов адресации,  которые являются развитием способов адресации 16-разрядных ЭВМ  семейства PDP-11  и могут быть разделены на 4 группы:

    адресация через регистры общего назначения;

    адресация через счетчик команд (PC);

    адресация с индексацией;

    адресация в инструкциях перехода.

       1.4.1  Способы адресации через регистры общего назначения

    В этих  способах  адресации  для указания адреса операнда используются 15 регистров общего назначения (R0 - R14) и одиннадцать режимов адресации (табл.1.3).  Формат поля операнда, в котором используются эти режимы, имеет н сколько модификаций. Для первых пяти  способов адресации поле операнда содержит только 1 байт-спецификатор:

         ┌────────────────┬───────────────┐

         │   Код режима   │     Номер     │

         │    адресации   │   регистра    │

         └────────────────┴───────────────┘

Коды режимов  адресации приведены в табл.1.3.  Одного байта вполне достаточно для хранения номера регистра (от 0 до 14) и кода режима адресации (всего их 16).

 Режимы адресации через регистры общего назначения    Таблица 1.3

──────────────────────────────────┬──────────────┬────────────────

    Режим (способ) адресации     │  Код режима  │     Формат

──────────────────────────────────┼──────────────┼────────────────

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

Косвенно-регистровая адресация   │      6       │       (R)

Адресация с автоувеличением      │      8       │       (R)+

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

 с автоувеличением               │      9       │      @(R)+

Адресация с автоуменьшением      │      7       │     - (R)

Адресация по смещению            │    A,C,E     │   смещение (R)

Косвенная адресация по смещению  │    B,D,F     │ @ смещение (R)

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

       1.4.1.1  Прямая регистровая адресация

           КОП  R              Код режима адресации = 5

       Байт-спецификатор                 RG

       ┌───────┬───────┐            ┌───────────┐

       │   5   │  RG   ├───────────>┤  Операнд  │

       └───────┴───────┘            └───────────┘

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

1.4.1.2 Косвенно-регистровая (простая косвенная) адресация

 

           КОП (R)             Код режима адресации = 6

    Байт-спецификатор            RG                  ОЗУ

    ┌───────┬───────┐       ┌───────────┐       ┌───────────┐

    │   6   │  RG   ├──────>┤   Адрес   ├──────>┤  Операнд  │

    └───────┴───────┘       └───────────┘       └───────────┘

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

1.4.1.3  Адресация с автоувеличением (простая косвенная с  автоувеличением)

           КОП (R)+            Код режима адресации = 8

  Байт-спецификатор              RG                   ОЗУ

  ┌───────┬───────┐         ┌───────────┐        ┌───────────┐

  │   8   │  RG   ├────┬───>┤   Адрес   ├───┬───>┤  Операнд  │

  └───────┴───────┘    │    └───────────┘   │    └───────────┘

                       │    ┌───────────┐   │

                       └─<──┤ +1,2,4 ...├───┘

                            └───────────┘

                             

    В этом  режиме  используемый регистр содержит адрес операнда. После выборки операнда производится увеличение содержимого регистра  на 1,  2,  4,  8 или 16 соответственно для операндов в формате байта,  слова,  длинного слова,  квадрослова или октаслова. Формат операнда определяется КОП. Режим с автоувеличением особенно эффективен при работе с массивами данных одного формата, так как позволяет без дополнительных команд получать в регистре адрес следующего элемента массива,  а также при обработке таблиц  и  организации стека.

  1.  Косвенная адресация с автоувеличением (двойная
    •  косвенная с автоувеличением)

           КОП @(R)+           Код режима адресации = 9

Байт-спецификатор        RG               ОЗУ             ОЗУ

┌─────┬──────┐      ┌─────────┐      ┌─────────┐     ┌─────────┐

│  9  │  RG  ├──┬──>┤  Адрес  ├──┬──>┤  Адрес  ├────>┤ Операнд │

└─────┴──────┘  │   └─────────┘  │   └─────────┘     └─────────┘

                │    ┌───────┐   │

                └<───┤  + 4  ├───┘

                     └───────┘

    Используемый в данном режиме регистр содержит адрес поля, содержимое которого является адресом операнда.  Поле занимает в  ОЗУ адреса  A, A+1, A+2, A+3. После выборки адреса операнда содержимое указанного регистра увеличивается на 4 вне зависимости от  формата используемых в операции данных.

       1.4.1.5  Адресация с автоуменьшением (простая косвенная с  автоуменьшением)

           КОП  - (R)          Код режима адресации = 7

Байт-спецификатор         RG                             ОЗУ

┌──────┬──────┐      ┌─────────┐  ┌──────────┐      ┌───────────┐

│   7  │  RG  ├──┬──>┤  Адрес  ├──┤-1,2,4 ...├──┬──>┤  Операнд  │

└──────┴──────┘  │   └─────────┘  └──────────┘  │   └───────────┘

                 └───────────────<──────────────┘

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

       1.4.1.6  Адресация по смещению

    КОП  смещение(R)     Коды режимов адресации = A,C,E

  Байт-спецификатор           RG                       ОЗУ

  ┌────────┬───────┐     ┌───────────┐   ┌───┐    ┌───────────┐

 1│  A,C,E │  RG   ├────>┤   Адрес   ├──>┤ + ├───>┤  Операнд  │

  └────────┴───────┘     └───────────┘   └─┬─┘    └───────────┘

  ┌────────────────┐                       │

 2│Смещение (B,W,L)├────────────>──────────┘

  └────────────────┘

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

                                15       8 7   4 3   0

                               ┌──────────┬─────┬─────┐  Смещение

                               │ Смещение │  A  │  R  │ в формате

                               └──────────┴─────┴─────┘     байта

                     23                  8 7   4 3   0

                    ┌─────────────────────┬─────┬─────┐  Смещение

                    │       Смещение      │  C  │  R  │ в формате

                    └─────────────────────┴─────┴─────┘     слова

39                                       8 7   4 3   0   Смещение

┌──────────────────────────────────────────┬─────┬─────┐ в формате

│                  Смещение                │  E  │  R  │  длинного

└──────────────────────────────────────────┴─────┴─────┘     слова

    Если смещение задано в формате байта или слова, то при вычислении адреса операнда выполняется расширение старшего разряда смещения до формата длинного слова.

       1.4.1.7   Косвенная адресация по смещению

    КОП  @смещение(R)     Коды режимов адресации = B,D,F

 Байт-спецификатор      RG                  ОЗУ           ОЗУ

┌───────┬────────┐   ┌───────┐   ┌───┐   ┌───────┐    ┌─────────┐

1│ B,D,F │   RG   ├──>┤ Адрес ├──>┤ + ├──>┤ Адрес ├───>┤ Операнд │

└───────┴────────┘   └───────┘   └─┬─┘   └───────┘    └─────────┘

┌────────────────┐                 │

2│Смещение (B,W,L)├────────>────────┘

└────────────────┘

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

            Возможные варианты смещений               Таблица 1.4

────────────────────┬─────────────────────────────────────────────

                   │              Код  режима  адресации

     Смещение      ├──────────────────┬──────────────────────────

                   │    По смещению   │  Косвенный по смещению

────────────────────┼──────────────────┼──────────────────────────

   Байт            │       ^X A       │          ^X B

   Слово           │       ^X C       │          ^X D

   Длинное слово   │       ^X E       │          ^X F

    1.4.2  Способы адресации через счетчик команд PC (R15)

    В этих  способах адресации вместо регистров общего назначения R0-R14 используется программный  счетчик  PC  (R15).  Использовать программный счетчик можно во всех режимах точно так же,  как и регистры общего назначения R0-R14,  но нежелательно, так как это может привести к непредсказуемым результатам.  Основные варианты использования R15 в качестве регистра-указателя при адресации данных приведены в табл.1.5.

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

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

           КОП   # K           Код режима адресации = 8

  Байт-спецификатор              R15                Команда

  ┌───────┬───────┐         ┌───────────┐        ┌───────────┐

  │   8   │   F   ├────┬───>┤   Адрес   ├───┬───>┤  Операнд  │

  └───────┴───────┘    │    └───────────┘   │    └───────────┘

                       │    ┌───────────┐   │

                       └─<──┤ +1,2,4 ...├───┘

                            └───────────┘

    Для этого способа адресации  формат  поля  операнда  выглядит следующим образом:

                            8  7        4  3         0

        ┌─────────────────────┬───────────┬───────────┐

        │       Операнд       │  1 0 0 0  │  1 1 1 1  │

        └─────────────────────┴───────────┴───────────┘

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

   Основные способы адресации с использованием программного           счетчика

Таблица 1.5

─────────────────────────────┬──────────────┬──────────┬──────────

          Способ            │ Спецификация │   Код    │  Формат

         адресации          │   операнда   │  режима  │

─────────────────────────────┼──────────────┼──────────┼──────────

Непосредственная адресация  │     x...x 8F │     8    │    # K

Абсолютная адресация        │  xxxxxxxx 9F │     9    │   @# A

Относительная адресация     │              │          │

 (смещение - байт)          │        xx AF │     A    │     A

 (смещение - слово)         │      xxxx CF │     C    │     A

 (смещение - длинное слово) │  xxxxxxxx EF │     E    │     A

Косвенная относительная     │              │          │

адресация                   │              │          │

 (смещение - байт)          │        xx BF │     B    │    @A

 (смещение - слово)         │      xxxx DF │     D    │    @A

 (смещение - длинное слово) │  xxxxxxxx FF │     F    │    @A

    Примечание: Символ "A" обозначает адрес, символ "K" обозначает константу,  символы "xx" - значения в дополни-                тельном поле спецификации операнда.

      

       1.4.2.2   Абсолютная адресация

           КОП   @# A          Код режима адресации = 9

Байт-спецификатор        R15            Команда           ОЗУ

┌─────┬──────┐      ┌─────────┐      ┌─────────┐     ┌─────────┐

│  9  │   F  ├──┬──>┤  Адрес  ├──┬──>┤  Адрес  ├────>┤ Операнд │

└─────┴──────┘  │   └─────────┘  │   └─────────┘     └─────────┘

                │    ┌───────┐   │

                └<───┤  + 4  ├───┘

                     └───────┘

    Формат поля операнда при этом режиме имеет следующий вид:

      39                    8  7        4  3         0

     ┌────────────────────────┬───────────┬───────────┐

     │    Абсолютный адрес    │  1 0 0 0  │  1 1 1 1  │

     └────────────────────────┴───────────┴───────────┘

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

следующей команды.

       1.4.2.3  Относительная адресация

           КОП  A              Коды режимов адресации = A, C, E

  Байт-спецификатор           R15                      ОЗУ

  ┌────────┬───────┐     ┌───────────┐   ┌───┐    ┌───────────┐

 1│  A,C,E │   F   ├────>┤   Адрес   ├──>┤ + ├───>┤  Операнд  │

  └────────┴───────┘     └───────────┘   └─┬─┘    └───────────┘

  ┌────────────────┐                       │

 2│Смещение (B,W,L)├────────────>──────────┘

  └────────────────┘

    Данный способ адресации реализуется с помощью режима  адресации по смещению в формате байта,  слова или длинного слова, только вместо регистра общего назначения R0-R14 используется регистр R15. Исполнительный  адрес  операнда  определяется как сумма смещения и текущего значения PC,  которое равно начальному адресу или следующей спецификации операнда, или следующей команды. Этот режим адресации очень эффективен при построении позиционно-независимых программ, допускающих перемещение в памяти.

       1.4.2.4  Косвенная относительная адресация

           КОП  @ A            Коды режимов адресации = B, D, F

 Байт-спецификатор      R15                 ОЗУ           ОЗУ

┌───────┬────────┐   ┌───────┐   ┌───┐   ┌───────┐    ┌─────────┐

1│ B,D,F │    F   ├──>┤ Адрес ├──>┤ + ├──>┤ Адрес ├───>┤ Операнд │

└───────┴────────┘   └───────┘   └─┬─┘   └───────┘    └─────────┘

┌────────────────┐                 │

2│Смещение (B,W,L)├────────>────────┘

└────────────────┘

    Этот способ  адресации реализуется с помощью режима косвенной адресации по смещению в формате байта,  слова или длинного  слова, только  вместо  регистра общего назначения R0-R14 используется регистр R15.  Адрес операнда находится в ячейке ОЗУ,  адрес  которой определяется  как  сумма смещения и текущего значения PC,  которое равно начальному адресу или следующей спецификации  операнда,  или следующей команды.

               1.4.3.   Литеральная адресация

     КОП  #литерал      Коды режимов адресации = 0,1,2,3

    Литеральная адресация является особым специальным случаем короткой непосредственной адресации.  Признаком этой адресации являются  два  нуля в старших (6 и 7) разрядах байта-спецификатора.  В младших шести разрядах (с 0 по 5) байта-спецификатора вместо номера  регистра  и младших разрядов кода способа адресации помещается значение операнда. Таким образом, литеральная адресация (один способ  адресации)  использует как бы четыре режима адресации (с 0 по 3). Поле операнда для способа литеральной адресации имеет длину 1 байт и в нем в явном виде отсутствует указание регистра.  Для способа литеральной адресации формат поля  операнда  имеет  следующий вид:

               7     6   5             0

            ┌─────┬─────┬───────────────┐

            │  0  │  0  │    Литерал    │

            └─────┴─────┴───────────────┘

    Так как  старшие  разряды байта-спецификатора при литеральной адресации равны нулю,  то литерал -  всегда  положительное  число. Значение  литерала  для  целых чисел находится в диапазоне от 0 до 63. Формат короткого непосредственного операнда (литерала) – целое                             число или число с плавающей запятой - определяется кодом операции.      Литеральная адресация применяется для экономии памяти при небольших значениях операнда и разрешена только для  операнда-источника.

               1.4.4.    Режимы адресации с индексацией

       КОП   база [RX]         Код режима адресации = 4

Байт-спецификатор      RG                                  ОЗУ

┌──────┬──────┐   ┌────────┐   ┌───────────┐   ┌───┐  ┌─────────┐

1│   4  │  RG  ├──>┤ Индекс ├──>┤ * 1,2,4...├──>┤ + ├─>┤ Операнд │

└──────┴──────┘   └────────┘   └───────────┘   └─┬─┘  └─────────┘

┌──────┬──────┐    ┌─────────────────────────┐   │

2│  CA  │  RG  ├───>┤ Определение адреса базы ├─>─┘

└──────┴──────┘    └─────────────────────────┘

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

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

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

                                    8 7       4 3       0

     ┌───────────────────────────────┬─────────┬─────────┐

     │      Спецификация   базы      │    4    │    R    │

     └───────────────────────────────┴─────────┴─────────┘

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

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

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

         Способы адресации с индексацией             Таблица 1.6

───────────────────────────────────────────┬──────────────────────

         Способ адресации                 │        Формат

───────────────────────────────────────────┼──────────────────────

Косвенно-регистровая адресация с          │           (RN) [RX]

 индексацией                              │

Индексная адресация с автоувеличением     │          (RN)+ [RX]

Индексная адресация с автоуменьшением     │         - (RN) [RX]

Косвенная адресация с автоувеличением и   │

 индексацией                              │        @ (RN)+ [RX]

Адресация по смещению с индексацией       │  смещение (RN) [RX]

Косвенная адресация по смещению с         │

 индексацией                              │ @смещение (RN) [RX]

Абсолютная адресация с индексацией        │      @ # адрес [RX]

Относительная адресация с индексацией     │          адрес [RX]

Косвенная относительная адресация с       │

 индексацией                              │        @ адрес [RX]

   Примечание. (RN) и [RX] - любые из регистров общего назначения

           R0 ... R14.

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

               1.4.5.    Адресация в командах перехода

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

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

    Команды условного перехода и команда BRB имеют следующий формат:

         15                 8 7                   0

         ┌───────────────────┬────────────────────┐

         │     Смещение      │        КОП         │

         └───────────────────┴────────────────────┘

    Команда BRW отличается на величину смещения:

  23                                   8 7                 0

  ┌─────────────────────────────────────┬───────────────────┐

  │               Смещение              │      КОП = 31     │

  └─────────────────────────────────────┴───────────────────┘

    Смещение рассматривается как число со знаком,  представленное в дополнительном коде. При вычислении адреса перехода старший разряд смещения расширяется на старшие разряды до длинного слова. Если смещение задано в формате байта,  то максимальное положительное смещение  (в сторону увеличения значения PC) будет 127 байт и наибольшее отрицательное смещение (в сторону уменьшения значения  PC) - 128  байт.  Для  команд перехода значение программного счетчика, относительно которого рассчитывается смещение,  всегда  равно  начальному адресу команды, следующей за командой перехода.





1. рефератдисертації на здобуття наукового ступенякандидата сільськогосподарських наук Київ ~.
2. Магеллан. Организационноправовая форма.html
3. Контрольна робота з логіки Практичні завдання При допомозі колових схем покажіть відношення між
4. Сущность денежной системы России
5. Гомсельмаш 2
6. Статья- Крест и полумесяц в русской церковной традиции
7. Конституционно-правовая система Англии и Франции в XX веке
8. модульний контроль 1Яка модель ринкової економіки характеризується незначним втручанням держави і всебіч
9. СТРОИТЕЛЬНЫЕ РАБОТЫ Сборник Е2 ЗЕМЛЯНЫЕ РАБОТЫ Выпуск 1 МЕХАНИЗИРОВАННЫЕ И РУЧНЫЕ ЗЕМЛЯНЫЕ
10. тема и субъект хозяйствования Классификация предприятий