PersCom — Компьютерная Энциклопедия Компьютерная Энциклопедия

Базовая организация ЭВМ

Архитектура ЭВМ

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

Команды обработки

Арифметические команды

Минимальный набор арифметических команд очень мал. Это (например):

  • сложение — ADD;
  • инвертирование — COM / NOT (такая ЭВМ действительно была: PDP-8 (DEC));
  • прибавление "единицы" — INC.

Все остальное можно сделать, комбинируя эти команды.

Однако в современном микропроцессоре арифметических команд обычно больше:

  • SUB — вычитание;
  • CMP — сравнение операндов. Эта команда выполняет вычитание операндов, по результату изменяет флаги, после чего результат теряется (команда предназначена для проверки условий);
  • NEG — смена знака операнда;
  • ASR, ASL, SAR, SAL — арифметические сдвиги операнда (Arithmetic Shift to Right/Left);
  • INC, DEC — увеличение или уменьшение операнда на 1;
  • ADC, SBC/SBB - операции с переносом C (carry-bit) — для выполнения действий с повышенной точностью, когда операнд занимает несколько слов;
  • SXT, SEX, CBW, CWD, CDQ — расширение знака (преобразование в формат с повышенной разрядностью);
  • MUL, DIV — умножение и деление беззнаковых и знаковых чисел.
  • Набор операций с плавающей точкой, включающий обычно значительное количество команд (несколько десятков), в которые часто входят команды вычисления элементарных функций — Sin, Cos, Log, Exp и т.п.

Логические команды

Логические команды — это команды побитовой обработки.

  • OR — поразрядное логическое сложение. Фактически это команда побитовой установки (т.е. записи "единицы" в заданные биты операнда). Пример:
    or opr, 0Ch ;Установка в 1 битов в позициях 2 и 3 в операнде al

Если исходно в al содержался, например, операнд 1101 10012, то после выполнения команды в al будет содержаться: 1101 1101 (отмечены установленные биты). Второй операнд — обычно константа, задавая которую, программист указывает, какие биты следует установить (он на жаргоне программистов носит название "маска").

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

  • AND — поразрядное логическое умножение. Это команда побитового сброса (записи в заданные биты "нулей"). Пример:
    and bh, 0Fh ;Сброс старшей тетрады (старшего ниббла) в байтовом операнде.

Если, например, исходно в регистре bh содержался операнд 1101 10012, то после выполнения команды в регистре bh будет содержаться 0000 10012 (отмечены очищенные биты). Действие команды AND можно описать следующим образом: команда безусловно сбрасывает в 0 биты в тех позициях первого операнда, которые отмечены "нулями" в маске, оставляя прочие биты первого операнда неизменными.

  • XOR — поразрядное исключающее ИЛИ, eXclusive OR (иногда на русском эту операцию называют "ЛИБО"). Эта двухоперандная команда фактически выполняет выборочное инвертирование битов. Например:
    xor cl,0F0h ;Инвертирование битов старшей тетрады

Если исходно в cl содержалось 1101 10012, то после выполнения команды в cl будет содержаться 0010 10012 (отмечены проинвертированные биты). Действие команды xor можно описать так: команда инвертирует в первом операнде биты в позициях, которые отмечены в маске "единицами", оставляя прочие биты неизменными.

  • TEST — проверка битовых полей. Команда чаще всего двухоперандная, выполняет поразрядное логическое умножение операндов и по результату операции изменяет состояние флагов "нуля" zf и "знака" sf, после чего результат операции теряется.
  • NOT, COM — инвертирование операнда (замена значения каждого бита на противоположное). Это однооперандная команда.

Сдвиги

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

  1. ROR, ROL, RCR, RCL — циклические сдвиги. При циклическом сдвиге то, что выходит за границу разрядной сетки, помещается в освобождающуюся позицию на другом конце операнда.
  2. ASR, ASL/SAR, SAL — арифметические сдвиги. Эта разновидность сдвига осуществляется таким образом, что результат оказывается эквивалентен умножению (при сдвиге влево) или делению (при сдвиге вправо) операнда на основание системы счисления, т.е. на 2. Сравните: если "сдвинуть" цифры в десятичном числе на разряд влево, результат будет эквивалентен исходному числу, умноженному на 10 (12 и 120 после сдвига). Более подробно особенности арифметического сдвига обсуждаются при рассмотрении системы команд процессоров х86.
  3. SHL, SHR — логические сдвиги. При выполнении логических сдвигов биты, "выдвигаемые" из разрядной сетки, теряются, а противоположный конец операнда заполняется "нулями".

Каждая из упомянутых разновидностей может также иметь варианты.

Например, в составе системы команд х86 различают пять видов сдвигов.

Организация в программе циклических конструкций

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

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

Один из вариантов цикла предусматривает заранее (до начала выполнения цикла) определенное количество повторений. В этом случае:

  1. заводят специальную переменную;
  2. перед началом цикла заносят в нее требуемое количество повторений;
  3. выполняют команды цикла;
  4. в конце цикла уменьшают переменную цикла на 1;
  5. проверяют переменную цикла на равенство нулю и, если не равно, повторяют, начиная с п.3

В системе команд процессоров х86 есть команда организации цикла loop. Ее недостаток состоит в том, что она в качестве переменной-счетчика цикла позволяет использовать только регистр процессора ECX. Это ее свойство затрудняет организацию вложенных циклических конструкций.

Операционные устройства с плавающей запятой

Операции над числами с плавающей запятой имеют существенные отличия от операций целочисленной арифметики, поэтому их реализуют с помощью самостоятельного операционного устройства (ОП). Минимальный набор операций этого устройства включает четыре действия: сложение, вычитание, умножение и деление. Операции выполняются над числами в формате IEEE 754. Особенностью ОП является то, что операции над тремя составляющими чисел с ПЗ (знаками, мантиссами и порядками операндов) выполняются раздельно:

  • блоком обработки знаков;
  • блоком обработки порядков;
  • блоком обработки мантисс.

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

  1. Подготовительный этап.
  2. Определение операнда, имеющего меньший порядок, и сдвиг его мантиссы вправо на число разрядов, равное разности порядков операндов.
  3. Приравнивание порядка результата большему из порядков операндов.
  4. Сложение мантисс.
  5. Проверка на переполнение.
  6. Заключительный этап.

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

  1. Подготовительный этап.
  2. Проверка на равенство нулю одного из сомножителей. Если один из них ноль, то в качестве результата выдается нуль в формате чисел с ПЗ.
  3. Сложение порядков. Если используется смещенный порядок, то из полученной суммы вычитается величина смещения. Проводится анализ переполнения и антипереполнения поля порядка (возникает прерывание по особому случаю).
  4. Перемножение мантисс с учетом знака. Результат округляется до длины поля мантиссы.
  5. Заключительный этап.

Типовая структура машинной команды в пространстве и во времени

Структура машинной команды «в пространстве».

Структура команды:

Машинная команда во внутреннем представлении по форме представляет собой двоичное слово. Его можно представить из двух частей (полей): кода операции (КОП) и адресной части команды.

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

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

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

Обобщенные формы команд.

1. В любой системе команд есть «пустая» команда, которая не делает никакого действия (NOP). Для нее просто не требуется указания операндов. Некоторые команды не требуют указания каких-либо операндов, так как их действие направлено на один заранее предопределенный операнд. Например команда «разрешить прерывание» STI – это команда устанавливает бит IF в регистре состояний EFLAGS.

2. Некоторые команды выполняют действие с одним операндом. Например, команда NEG — поменять знак операнда. Такие команды называют однооперандными. Передача управления — также однооперандная команда, в которой результат операции - изменение содержимого счетчика команд. В таких командах есть одно адресное поле для указания места расположения (или значения) операнда.

Пример такой команды: изменение знака операнда:

negax; эта команда изменит знак целого числа в регистре процессора.

3. В любом процессоре есть команды пересылок, которые копируют содержимое элементов памяти в другие элементы памяти. Такие команды требуют указания двух операндов: источника Source (Scr) и приемника Destination (Dest, Dst).

Пример такой команды:

movbl, [esi]; Содержимое однобайтового элемента данных из ячейки памяти, адрес которой хранится в регистре процессора esi, копируется в регистр процессора bl.

4. Привычные нам арифметические действия (сложение, вычитание, умножение, …) оперируют с двумя операндами и формируют результат операции : С=А+В. Таким образом, в операции участвую три элемента. В некоторых системах команд соответствующие команды действительно позволяют программисту независимо указать места расположения всех трех элементов. Для уменьшения длины команды в других системах команд эти команды имеют только два адресных поля, при выполнении команды результат операции помещается на место одного из операндов, замещая («затирая») его.

5. В системах команд процессоров с длинным командным словом (VLIW) одновременно выполняются несколько команд и они должны быть записаны подряд — длинным словом. Формировать длинное слово может или программист (в сигнальных процессорах), или транслятор языка (Itanium).

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

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

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

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

Адрес(а) операнд(ов), с которым(и) выполнит действие команда, определяются в процессе обработки этой команды (формируются устройством вычисления адресов). Такой адрес называют исполнительным (executive) или эффективным (effective) адресом ЕА. Адрес, который передается по магистрали из процессора в ОЗУ и управляет работой ОЗУ, будем называть физическим адресом.

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

Понятие адресного пространства является одним из фундаментальных в организации ЭВМ.

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

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

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

1)Вычисление исполнительного/эффективного адреса EA (executive/effective address) в соответствии со способом адресации;

2)Переход от EA к физическому адресу (эта часть вычисление, как уже было сказано, называется трансляцией адреса) .

Регистровая архитектура

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

Размер регистров обычно фиксирован и совпадает с размером машинного слова. К любому регистру можно обратиться, указав его номер. Количество РОН в архитектурах типа CISC обычно невелико (от 8 до 32), и для представления номера конкретного регистра необходимо не более пяти разрядов, благодаря чему в адресной части команд обработки допустимо одновременно указать номера двух, а зачастую и трех регистров (двух регистров операндов и регистра результата). RISС-архитектура предполагает использование существенно большего числа РОН (до нескольких сотен), однако типичная для таких ВМ длина команды (обычно 32 разряда) позволяет определить в команде до трех регистров.

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

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

Подкатегории