Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
АЛОВЦМ / узлы,АЛУ / Архитектура и организация ЭВМ++.docx
Скачиваний:
101
Добавлен:
26.03.2015
Размер:
1.28 Mб
Скачать

1. ОСНОВНЫЕ ФУНКЦИОНАЛЬНЫЕ ЭЛЕМЕНТЫ ЭВМ, ЧАСТЬ 1

Логические элементы.

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

На рис.2.1.2. приведены примеры рассматриваемых логических элементов.

b)

Рис. 2.1‑1

На выходах элементов указаны логические выражения для выходных сигналов в соответствии с приведенными входными сигналами. На Рис. 2.1 -1, b приведен логический элемент с инверсным входом (в логическом выражении сигнал по такому входу используется в обратном значении).

Примеры реализации простейших логических элементов с помощью диодно-резисторной схем приведены на рисунке рис.2.1.3.

Рис. 2.1.2

На рис.2.1.3,а приведена реализация логических элементов И. Реализация злемента ИЛИ приведена на рис.2.1.3,б. Схемы логических элементов построены с условием, что логическая «1» соответствует высокому уровню («+»), а логический ноль - низкому уровню напряжения, близкому «земле». Это соответствие используется и в других реализациях. На рис.2.1.3,а соотношение сопротивления резисторов R1 и R2 при заданном напряжении «+U» выбирается таким образом, что без учета шунтирующего действия диодных цепочек напряжение на выходе имеет значение высокого уровня (уровня, соответствующего логической «1»). Источники входных сигналов Uвх1 и Uвх2 имеют малое внутреннее сопротивления. Поэтому, если один или оба источника подают низкий уровень (логический «0»), то из-за шунтирующего воздействия диодных цепочек на резистора R2 на выходе будет иметь место низкий уровень напряжения, соответствующий логическому нулю. Высокий уровень на выходе (логическая «1») будет иметь место только тогда, когда на оба входа подаются единицы, так как соответствующие им высокие уровни напряжения закрывают оба диода. Таким образом, единица на выходе будет иметь место только тогда, когда и x1, и x2 имеют единичные значения. Это означает, что рассматриваемая схема реализует логику И.

Для схемы на рис.2.1.3,b соотношение сопротивления резисторов R1 и R2 при заданном напряжении «+U» выбирается таким образом, что без учета воздействия диодных цепочек напряжение на выходе имеет значение низкого уровня (уровня, соответствующего логическому «0»). Если хотя бы один или оба источника входных сигналов подают высокий уровень (логическая «1»), то этот высокий уровень проходит через открытый диод и появляется на выходе. Низкий уровень, т.е. логический «0», будет иметь место только тогда, когда оба входных сигнала имеют низкий уровень. Это означает, что рассматриваемая схема реализует логику ИЛИ.

На рис.2.1.4.приведены примеры реализации логических функций НЕ (рис.2.1.4, а) и ИЛИ-НЕ(рис.2.1.4,b) на транзисторах. Транзисторы обозначены символом «Т».

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

На b) на выходе схемы «y» будет низкий уровень (логический нуль) тогда, когда открыт хотя бы один транзистор T1 , T2 , T3 , т.е. тогда, когда хотя бы одна из входных переменных x1, x2, x3, имеет значение логической единицы. Это означает, что выходной сигнал «y» зависит от входных сигналов по логике ИЛИ- НЕ.

На Рис. 2.1 -4 приведены примеры реализации логических функции И-НЕ и функции И на транзисторах.

На Рис. 2.1 -4 а) на выходе схемы «y» будет низкий уровень (логический нуль) только тогда, когда открыты оба транзистора T1 , T2 , т.е. тогда, когда обе входные переменные x1, x2 имеют значение логической единицы. Это означает, что выходной сигнал «y» зависит от входных сигналов по логике И- НЕ.

Рис. 2.1‑3

На Рис. 2.1 -4 b) приведена схема, использующая многоэмиттерный транзистор T3 . Транзистор такого типа пропускает ток только тогда, когда имеет место высокий уровень на его базе и низкий уровень хотя бы на одном из его эмиттеров. В приведенной схеме на базу T3 подается постоянный высокий уровень (логическая константа, равная «1»). В этом случае на выходе схемы «y» будет низкий уровень (логический нуль) тогда, когда есть условия протекания тока хотя бы по одному из его эмиттеров, т.е. хотя бы одна из входных переменных x1, x2 , x3 имеет значение логического нуля. Если на все эмиттеры подается логическая единица, то T3 закрыт, а на выходе схеме имеет место высокий уровень, т.е. логическая единица. Это означает, что выходной сигнал «y» зависит от входных сигналов по логике И.

x1

+

R

э3

.

Рис. 2.1‑4

1.3. Триггер

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

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

Схема запоминающей ячейки на элементах "И-НЕ" представлена на рис. 1.5.

Рис. 1.5.  Запоминающая ячейка на элементах "И-НЕ"

Входной сигнал S (Set) служит для установки ЗЯ в состояние "1" (Q=1, Q=0). Сигнал R (Reset) устанавливает ЗЯ в состояние "0" (Q=0, Q=1). Активными значениями для них являются сигналы низкого уровня. Пусть на входы ЗЯ поданы сигналы: S=0, R=1. Тогда при любом исходном состоянии ЗЯ на выходе элемента 1 установится высокий уровень напряжения. Так как на входы элемента 2 поступают значения Q и R, то на его выходе будет сигнал низкого уровня. Таким образом, ЗЯ перейдет в состояние "1".

Аналогично при S=1, R=0 запоминающая ячейка перейдет в состояние Q=0, Q=1, то есть в "0".

Если S=1, R=1, то состояние ЗЯ будет определяться ее предыдущим состоянием. Если ЗЯ находилась в состоянии "1", то сигнал Q=0, поступая на вход элемента 1, подтвердит состояние его выхода Q=1. На входы элемента 2 поступят сигналы только высокого уровня. Поэтому его выход будет находиться в состоянии Q=0, то есть не изменится. Если ЗЯ находилась в состоянии "0", то сигнал Q=0, поступая на вход элемента 2, подтвердит состояние его выхода Q=1. В свою очередь, выход элемента 1 также останется без изменения. Таким образом, эта комбинация входных сигналов соответствует режиму хранения.

Если на входы S и R поданы сигналы низкого уровня (S = R = 0), то сигнал на выходах элементов 1 и 2 будет высоким (Q = Q = 1). При переводе ЗЯ в режим хранения (S = R = 1), выходы элементов 1 и 2 могут установиться в произвольное состояние. Поэтому комбинация сигналов S = R = 0 на управляющих входах не используется.

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

Таблица 1.3

S

R

Q(t+1)

Функция

0

0

х

Запрещенная комбинация

0

1

1

Установка в "1"

1

0

0

Установка в "0"

1

1

Q(t)

Хранение

Аналогичная запоминающая ячейка может быть построена на элементах "ИЛИ-НЕ".

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

Триггеры можно классифицировать по различным признакам, например так, как это показано на рис. 1.6.

Рис. 1.6.  Классификация триггерных схем

Триггер называется синхронным, если его таблица переходов хотя бы по одному управляющему входу реализуется под воздействием синхронизирующего сигнала. Рассмотрим организацию синхронного одноступенчатого триггера (рис. 1.7).

Рис. 1.7.  Обобщенная схема синхронного одноступенчатого триггера

Основу синхронного одноступенчатого триггера составляет рассмотренная выше запоминающая ячейка (элементы 1, 2). Комбинационная схема преобразует управляющие сигналы триггера, а также, для некоторых типов триггеров, сигналы Q и Q с выходов ЗЯ в сигналы S и R на входах запоминающей ячейки. Синхросигнал C разрешает передачу на входы элементов 1 и 2 таких значений сигналов S и R, которые устанавливают ЗЯ в то или иное состояние. Неактивное значение синхросигнала обеспечивает на входах запоминающей ячейки состояние управляющих сигналов S = R = 1, что соответствует для нее режиму хранения.

Схема синхронного одноступенчатого RS-триггера приведена на рис. 1.8. Его таблица переходов представлена втабл. 1.4.

Рис. 1.8.  Синхронный одноступенчатый RS-триггер

Таблица 1.4

R

S

Q(t+1)

Функция

0

0

Q(t)

Хранение

0

1

1

Установка в "1"

1

0

0

Установка в "0"

1

1

х

Запрещенная комбинация

Еще раз подчеркнем, что данная таблица переходов будет реализовываться лишь при активном уровне синхросигнала C (для данной организации это C = 1). При C = 0 выходы элементов 3 и 4 (см. рис. 1.8) будут в состоянии "1", что соответствует режиму хранения запоминающей ячейки, реализованной на элементах 1 и 2.

Представленный на рис. 1.8триггер имеет статическую синхронизацию, при которой управляющие сигналы активизируют входы S и R запоминающей ячейки во время высокого уровня сигнала на входе синхронизации. Его условно-графическое обозначение приведено на рис. 1.9, а. Условно-графические обозначениятриггеров, использующих другие типы синхронизации, приведены на рис. 1.9, б, в, г(на примереRS-триггера).

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

Рис. 1.9.  Условно-графические обозначения RS-триггера с различной синхронизацией: а - статическая синхронизация; б - статическая инверсная синхронизация; в - динамическая синхронизация передним фронтом синхросигнала; г - динамическая синхронизация задним фронтом синхросигнала

Идеализированная (без учета задержек) временная диаграмма работы RS-триггеров с различными типами синхронизации приведена на рис. 1.10.

Рис. 1.10.  Временная диаграмма работы RS-триггера с различными типами синхронизации: Qа – статическая синхронизация; Qб– статическая инверсная синхронизация; Qв –динамическая синхронизация передним фронтом синхросигнала; Qг– динамическая синхронизация задним фронтом синхросигнала

Как отмечалось выше, синхронный триггер, помимо управляющих входов, воздействующих на его состояние при подаче сигнала синхронизации, может иметь входы, которые воздействуют на его состояние непосредственно. Обычно они используются для установки триггера в то или иное начальное состояние перед подачей последовательности синхросигналов. Схема синхронного RS-триггера с асинхронными входами установки в "0" и в "1" приведена на рис. 1.11, а его условно-графическое обозначение – нарис. 1.12.

Рис. 1.11.  Синхронный одноступенчатый RS-триггер с асинхронными установочными входами

Рис. 1.12.  Условно-графическое обозначение синхронного одноступенчатого RS-триггера с асинхронными установочными входами

Сигналы, поступающие по асинхронным входам S и R, подаются непосредственно на входы запоминающей ячейки, образованной элементами 1 и 2, минуя цепь, управляемую синхросигналом (элементы 1 и 2), и вызывают переключение запоминающей ячейки согласно табл. 1.3.

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

Двухступенчатый RS-триггер (рис. 1.13ирис. 1.14) строится на основе двух одноступенчатыхтриггеров с прямой статической синхронизацией. Информация в первую ступень триггера (элемент 1) заносится во время действия высокого уровня синхросигнала. После того как синхросигнал на входе принимает низкое значение, элемент 1 переходит в режим хранения, а значение высокого сигнала на выходе инвертора 3 обеспечивает запись состояния триггера 1 в триггер 2. Идеализированная временная диаграмма работы двухступенчатого RS-триггера приведена на рис. 1.15.

Рис. 1.13.  Схема двухступенчатого RS-триггера

Рис. 1.14.  Условно-графическое обозначение двухступенчатого RS-триггера

Рис. 1.15.  Временная диаграмма работы двухступенчатого RS-триггера

Следует отметить, что первая ступень представляет собой одноступенчатый триггер, реализующий заданную таблицу переходов, в то время как вторая ступень – это всегда одноступенчатый синхронный RS-триггер. Например, на рис. 1.16показана схемадвухступенчатого JK-триггера.

Рис. 1.16.  Двухступенчатый JK-триггер

T-, JK-, D-триггер

Т- триггер

Т- триггер представляет собой триггер, имеющий один вход «Т», поступление единичного сигнала на который переводит Т-триггер в состояние, противоположное его исходному состоянию (фигурально говоря, по каждому входному сигналу триггер «кувыркается», меняя своё состояние на противоположное). На приведена реализация Т-триггера на базе двухтактного RS - триггера (а) и временная диаграмма его работы (b). Имеющиеся на схеме обратные связи создают ситуацию, при которой сигналы на входах R и S стремятся перевести триггер в состояние, противоположное текущему. Поэтому при приходе очередного сигнала qT триггер воспринимает имеющиеся сигналы на его входах. Выходные сигналы триггера изменяются после снятия единичного сигнала на его входе qT, так как триггер двухтактный.

Рис. 2.1‑5

Т - триггер можно рассматривать как счетчик, считающий по модулю два количество импульсов, поступающих на его вход. Действительно, если в исходном состоянии триггер находимся в «0», то при поступлении на его вход нечетного количества импульсов триггер будет находиться в «1», а при четном - в «0», что соответствует суммированию по модулю «2» количества поступающих импульсов.

JK -триггер

Реализация JK-триггера и соответствующая таблица истинности приведена на рисунке ( ). Вход «J» - это вход установки «1», вход «K» - вход установки «0».

Из приведенной схемы видно, что сигналы qJ или qK, стремящиеся установить триггер, соответственно, в «1» или «0», поступают на соответствующий вход «S» или «R» базового RS - триггера только тогда, когда его исходное состояние противоположно тому, в которое стремится перевести JK-триггер комбинация входных сигналов. В противном случае сигналы qJ или qK на соответствующий вход S или R базового триггера не поступают. В связи с этим комбинация входных сигналов «1, 1» не является запретной, так как в этом случае на соответствующий вход базового RS - триггера поступит только тот сигнал, который стремится установить триггер в состояние, противоположное его исходному состоянию. Этот момент отражен в таблице истинности - при комбинации входных сигналов «1,1» триггер меняет исходное состояние, то есть работает как T-триггер.

Рис. 2.1‑6

Таким образом JK - триггер представляет собой универсальный триггер, объединяющий в себе свойства и RS - триггера и Т - триггера.

D - триггер

D – триггер, по другому, называют элементом задержки. Схема его реализации на базе RS - триггера и временная диаграмма его работы приведен на . Использование подачи сигнала установки «1» через логику НЕ на вход установки «0» приводит к тому, что на входы R и S базового RS - триггера подаются сигналы, имеющие противоположные значения.

1

Рис. 2.1‑7

Это означает, что, когда есть «1» на входе qD, на входах базового триггера будут сигналы: «1» - на входе S и «0» - на входе «R». Поэтому по переднему фронту сигнала СИ в триггере устанавливается «1», если есть «1» на входе qD, в противном случае в триггере будет установлен «0». Состояние, которое имеется у триггера в момент заднего фронда сигнала СИ, будет сохранятьcя («задерживаться») до поступления очередного сигнала синхронизации СИ.

Таблицы переходов JK - и D - триггеров приведены в таблицах 1.5и1.6соответственно.

Таблица 1.5

J

K

Q(t+1)

Функция

0

0

Q(t)

Хранение

0

1

0

Установка в "0"

1

0

1

Установка в "1"

1

1

Q(t)

Инвертирование предыдущего состояния

Таблица 1.6

D

Q(t+1)

Функция

0

0

Установка в "0"

1

1

Установка в "1"

Узлы ЭВМ

Узлы ЭВМ можно подразделить на два типа:

  1. комбинационные узлы;

  1. накапливающие узлы.

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

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

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

Комбинационные узлы

.1. Дешифратор

Дешифратором называется комбинационная схема, имеющая n входов и 2n выходов и преобразующая двоичный код на своих входах в унитарный код на выходах. Унитарным называется двоичный код, содержащий одну и только одну единицу, например 00100000. Условно-графическое обозначение дешифратора на три входа приведено на рис. 1.1.

Рис. 1.1.  Условно-графическое обозначение трехвходового дешифратора

Номер разряда, в котором устанавливается "1" на выходе дешифратора, определяется кодом на его входах. Ниже приведена таблица истинности трехвходового дешифратора (таблица 1.1).

Таблица 1.1

Входы

Выходы

2

1

0

0

1

2

3

4

5

6

7

0

0

0

1

0

0

0

0

0

0

0

0

0

1

0

1

0

0

0

0

0

0

0

1

0

0

0

1

0

0

0

0

0

0

1

1

0

0

0

1

0

0

0

0

1

0

0

0

0

0

0

1

0

0

0

1

0

1

0

0

0

0

0

1

0

0

1

1

0

0

0

0

0

0

0

1

0

1

1

1

0

0

0

0

0

0

0

1

Реализация дешифратора в одноэлементном базисе "Штрих Шеффера" достаточно проста, так как таблица истинности для любого выхода имеет только одну единицу. На рис. 1.2представлена схема формирования сигнала на одном из выходовдешифратора (сигнал f5 на выходе 5):

Рис. 1.2.  Схема формирования сигнала на выходе 5 трехвходового дешифратора

Из представленной схемы видно, что фактически логику преобразования выполняет лишь элемент 2, в то время как элемент 1 служит для получения инверсии сигнала x1, а элемент 3 преобразует полученное на элементе 2 инверсное значение функции в прямое. Многие элементы хранения, например триггерные схемы, позволяют получать сигнал в парафазном коде, то есть имеют два выхода, на одном из которых сигнал имеет прямое, а на другом – инверсное значение. Это позволяет избавиться от элемента 1 в схеме. Если предположить, что значения выходных сигналов имеют инверсный вид по отношению к представленному в табл 1.1, то отпадает необходимость в элементе 3. В большинстве реальных интегральных микросхем реализованы именнодешифраторы с инверсными выходами. Обозначение такого дешифратора показано на рис. 1.3.

Рис. 1.3.  Условно-графическое обозначение дешифратора с инверсными выходами

На выходах такого дешифратора образуется унитарный код, содержащий один и только один ноль. Например, если входные сигналы имеют значение 1102=610, то выходы дешифратора, представленного на рис. 1.3, будут находиться в состоянии 10111111, то есть выход 6 будет иметь значение, отличное от остальных выходов.

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

1.2. Шифратор

Шифратор – схема, имеющая 2n входов и n выходов, функции которой во многом противоположны функции дешифратора (рис. 1.4). Этакомбинационная схема в соответствии с унитарным кодом на своих входах формирует позиционный код на выходе (таблица 1.2).

Рис. 1.4.  Условно-графическое обозначение шифратора на 4 входа

Таблица 1.2

Входы

Выходы

3

2

1

0

1

0

0

0

0

1

0

0

0

0

1

х

0

1

0

1

х

х

1

0

1

х

х

х

1

1

2. ОСНОВНЫЕ ФУНКЦИОНАЛЬНЫЕ ЭЛЕМЕНТЫ ЭВМ, ЧАСТЬ 2

1. УЗЛЫ ЭВМ

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

Узлы ЭВМ можно подразделить на два типа:

  • комбинационные;

  • накапливающие.

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

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

  1. Комбинационные узлы

Сумматор по модулю 2

Сумматор по модулю 2 вырабатывает на своем входе сигнал логической единицы, если количество его входов с сигналом логической единицы нечетное.

На рис. 1.3, а приведена схема сумматора по модулю 2 на два входа, а на рис. 1.3, б - его условное обозначение. На рис. 1.3, в приведен сумматор по моду­лю 2 с восьмью входами, построенный по принципу каскадирования из двух вхо­довых сумматоров по модулю 2.

Сигнал на выходе схемы (см. рис. 1.3, в) у7 определяется логическим выра­жением

Мультиплексор

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

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

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

Демультиплексор

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

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

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

2.1. Счетчик

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

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

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

Рис. 2.1.  Схема асинхронного трехразрядного счетчика

Рис. 2.2.  Условно-графическое обозначение трехразрядного суммирующего счетчика

Рис. 2.3.  Временная диаграмма работы счетчика

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

Рис. 2.4.  Оценка быстродействия асинхронного счетчика

По фронту 1-0 сигнала С(8) с задержкой сигнала, равной tT, на триггере Q0 (см. рис. 2.1) происходит изменение сигнала на выходеQ0. Это изменение, в свою очередь, приведет к переключению сигнала Q1 с соответствующей задержкой относительно переключения Q0. Вслед за этим с задержкой сигнала на следующем триггере переключится сигнал Q2. То есть общее время задержки переключения сигналов на выходе трехразрядного счетчика составит 3tT. Очевидно, что для n разрядного счетчика время задержки составит:

tCT = nxtT

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

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

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

2.2. Регистр хранения

Регистр – внутреннее запоминающее устройство процессора или внешнего устройства, предназначенное для временного хранения обрабатываемой или управляющей информации [3].Регистры представляют собой совокупность триггеров, количество которых равняется разрядности регистра, и вспомогательных схем, обеспечивающих выполнение некоторых элементарных операций. Набор этих операций, в зависимости от функционального назначения регистра, может включать в себя одновременную установку всех разрядов регистра в "0", параллельную или последовательную загрузку регистра, сдвиг содержимого регистра влево или вправо на требуемое число разрядов, управляемую выдачу информации из регистра (обычно используется при работе нескольких схем на общую шину данных) и т.д. Регистры хранения используются для приема, хранения и выдачи многоразрядного кода. Они представляют собой совокупность одноступенчатых триггеров (как правило, D-типа) с общим входом синхронизации. Иногда в регистре имеется также и общий вход асинхронной установки всех триггеров в "0". Схема четырехразрядного регистра хранения приведена на рис. 2.5, а его условно-графическое обозначение – нарис. 2.6.

Рис. 2.5.  Структура четырехразрядного регистра хранения с асинхронным входом установки в "0"

Рис. 2.6.  Условно-графическое обозначение четырехразрядного регистра хранения с асинхронным входом установки в "0"

2.3. Регистр сдвига

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

Регистры сдвига строятся на двухступенчатых триггерах. Схема четырехразрядного регистра, выполняющего сдвиг на один разряд от разряда 0 к разряду 3, показана на рис. 2.7, а его условно-графическое обозначение – нарис. 2.8. Ввод информации в данныйрегистр – последовательный через внешний вход D0. Регистр имеет вход асинхронной установки всех разрядов в "0". Для наглядности каждый двухступенчатый регистр представлен двумя одноступенчатыми с соответствующей организацией синхронизации первой и второй ступеней. Пунктиром обозначен реальный двухступенчатый триггер.

Рис. 2.7.  Структура регистра сдвига

Рис. 2.8.  Условно-графическое обозначение четырехразрядного регистра сдвига с асинхронным входом установки в "0"

Идеализированная временная диаграмма работы регистра сдвига, структура которого представлена на рис. 2.7, показана нарис. 2.9. Предполагаем, что начальное состояниерегистра следующее: Q0=0, Q1=1, Q2=1, Q3=0.

Рис. 2.9.  Временная диаграмма работы регистра сдвига

Работа регистра сдвига в каждом периоде сигнала синхронизации разбивается на две фазы: при высоком и при низком значении синхросигнала:

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

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

Поступление сигнала R = 0 вне зависимости от значения сигнала на входе синхронизации С и сигнала на входе D0 устанавливает все разряды регистра в нулевое состояние.

3. АРИФМЕТИКО- ЛОГИЧЕСКОЕ УСТРОЙСТВО

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

В современных ЭВМ арифметико-логическое устройство не является самостоятельным схемотехническим блоком. Оно входит в состав микропроцессора, на котором строится компьютер. Однако знание структуры и принципов работы АЛУ весьма важно для понимания работы компьютера в целом. Для лучшего понимания этих вопросов проведем синтез арифметического устройства, предназначенного для выполнения только одной операции – умножения чисел с фиксированной запятой, заданных в прямом коде, со старших разрядов множителя [13] . В ходе этого процесса также обратим внимание на особенности использования рассмотренных выше основных схемотехнических элементов ЭВМ.

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

Пусть операнды имеют вид:

[X]пк = x0x1x2…xn

[Y]пк = y0y1y2…yn

где x0, y0 – знаковые разряды.

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

Sign Z=Sign X + Sign Y

|Z|=

Sign Z= 0+1=1

Алгоритм вычислений представлен на рис. 3.1.

Рис. 3.1.  Алгоритм операции умножения чисел с фиксированной запятой, заданных в прямом коде, со старших разрядов множителя

Каждой переменной, представленной в алгоритме, в схеме должен соответствовать элемент хранения. Разрядность модуля произведения равна сумме разрядностей сомножителей. Умножение двоичного числа на 2-i обеспечивается сдвигом этого числа вправо на соответствующее количество разрядов. Переход к анализу очередного разряда множителя (i = i + 1) может быть обеспечен сдвигом регистра множителя на один разряд в сторону старших разрядов.

Исходя из этого, определим состав оборудования, необходимого для реализации АЛУ заданного типа для n = 4 (таблица 3.1).

Таблица 3.1

Схема

Разрядность

Функции

Управляющий сигнал

Регистр модуля множимого RGX

8

Загрузка. Сдвиг в сторону младших разрядов.

УС1 УС2

Регистр модуля множителя RGY

4

Загрузка. Сдвиг в сторону старших разрядов.

УС3 УС4

Регистр модуля результата RGZ

8

Загрузка. Установка в " 0 ".

УС5 УС6

Триггер знака множимого TX

Загрузка

УС7

Триггер знака множителя TY

8

Загрузка

УС8

Триггер знака результата TZ

Загрузка

УС9

АЛУ

8

Комбинационный сумматор

Комбинационные схемы

Получение на входе АЛУ сигналов "0" или RGX в зависимости от значения yi

Структурная схема устройства представлена на рис. 3.2.

Временная диаграмма управляющих сигналов, поступающих на арифметико-логическое устройство, показана на рис. 3.3.

Рис. 3.2.  Структурная схема арифметического устройства для выполнения операции умножения со старших разрядов множителя чисел, заданных в прямом коде

Рис. 3.3.  Временная диаграмма управляющих сигналов

3.1. Работа схемы

Такт 1. Загрузка модулей операндов в регистры RGX, RGY, а их знаков – в триггеры TX и TY. Сброс в "0" регистра результата RGZ.

Такт 2. Запись знака результата в триггер TZ.

Такт 3. Сдвиг регистра RGX на один разряд вправо. Через время, равное задержке на переключение регистров и комбинационных схем, на выходе комбинационного сумматора и, следовательно, на входе регистра RGZ устанавливается результат 0+y1• |X|•2-1.

Такт 4. Загрузка RGZ: |Z|=|Z|+y1 |X|•2-1.

Такт 5. Сдвиг RGX на 1 разряд вправо: |X| = |X|•2-1.

Сдвиг RGY на 1 разряд влево: i=i+1.

Устройство управления проверяет условие окончания операции: i > n.

Такты (6,7), (8,9), (10,11)... Повтор действий тактов (4,5) с анализом других значений yi. В такте 10 в регистре RGZ формируется модуль произведения. Такт 11 используется лишь для определения условия окончания операции умножения.

4. УСТРОЙСТВО УПРАВЛЕНИЯ

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

Любое действие, выполняемое в операционном блоке, описывается некоторой микропрограммой и реализуется за один или несколько тактов. Элементарная функциональная операция, выполняемая за один тактовый интервал и приводимая в действие управляющим сигналом, называется микрооперацией. Например, в спроектированном АЛУ для умножения чисел в первом такте выполняются следующие микрооперации: TX=0, TY=0, RGX=|X|, RGY=|Y|, RGZ=0. Совокупность микроопераций, выполняемых в одном такте, называется микрокомандой (МК). Если все такты должны иметь одну и ту же длину, а именно это имеет место при работе компьютера, то она устанавливается по самой продолжительной микрооперации. Микрокоманды, предназначенные для выполнения некоторой функционально законченной последовательности действий, образуют микропрограмму. Например, микропрограмму образует набор микрокоманд для выполнения команды умножения.

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

Устройства управления делятся на:

УУ с жесткой, или схемной логикой и УУ с программируемой логикой (микропрограммные УУ).

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

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

4.1. Схемное устройство управления

Устройство управления схемного типа (рис. 4.1) состоит из:

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

  • блока управления операциями, осуществляющего выработку управляющих сигналов, то есть коммутацию сигналов, поступающих с ДС, в соответствующем такте на нужную управляющую шину;

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

Рис. 4.1.  Функциональная схема схемного устройства управления

Рис. 4.2.  Временная диаграмма работы датчика сигналов

Датчик сигналов обычно реализуется на основе счетчика с дешифратором или на сдвиговом регистре.

4.2. Датчик сигналов на основе счетчика с дешифратором

Реализация датчика сигналов на основе счетчика с дешифратором представлена на рис. 4.3. По заднему фронту каждого тактового импульса, поступающего на устройство управления с системного генератора импульсов, счетчик увеличивает свое состояние; выходы счетчика соединены со входами дешифратора, выходы которого и являются выходами датчика сигналов (рис. 4.4).

Рис. 4.3.  Схема датчика сигналов на основе счетчика с дешифратором

Рис. 4.4.  Временная диаграмма работы датчика сигналов на основе счетчика с дешифратором

4.3. Датчик сигналов на сдвиговом регистре

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

Рис. 4.5.  Схема датчика сигналов на основе регистра сдвига

Временная диаграмма работы этой схемы приведена на рис. 4.6.

Рис. 4.6.  Временная диаграмма работы датчика сигналов на основе регистра сдвига

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

4.4. Структурная схема микропрограммного устройства управления

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

Рис. 4.7.  Функциональная схема микропрограммного устройства управления (УСi - управляющие сигналы, вырабатываемые устройством управления)

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

Таблица 4.1

Микропрограмма выполнения операции умножения

Адрес МК

УС1

УС2

УС3

УС4

УС5

УС6

Сигнал записи в РК

Адрес следующей МК

300

1

0

1

0

0

1

0

301

301

0

0

0

0

1

0

0

302

302

0

1

0

1

0

0

0

303

303

0

0

0

0

1

0

0

304

304

0

1

0

1

0

0

1

Х

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

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

5. ЗАПОМИНАЮЩИЕ УСТРОЙСТВА

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

Отдельные устройства, входящие в эту совокупность, называются запоминающими устройствами (ЗУ) того или иного типа.

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

Запоминающие устройства играют важную роль в общей структуре ЭВМ. По некоторым оценкам производительность компьютера на разных классах задач на 40-50% определяется характеристиками ЗУ различных типов, входящих в его состав.

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

Емкость памяти - это максимальное количество данных, которое в ней может храниться.

Емкость   запоминающего устройства измеряется количеством адресуемых элементов (ячеек) ЗУ и длиной ячейки в битах. В настоящее время практически все запоминающие устройства в качестве минимально адресуемого элемента используют 1 байт (1 байт = 8 двоичных разрядов (бит)). Поэтому емкость памяти обычно определяется в байтах, килобайтах (1Кбайт=210 байт), мегабайтах (1Мбайт = 220 байт), гигабайтах (1Гбайт = 230 байт) и т.д.

За одно обращение к запоминающему устройству производится считывание или запись некоторой единицы данных, называемой словом, различной для устройств разного типа. Это определяет разную организацию памяти. Например, память объемом 1 мегабайт может быть организована как 1М слов по 1 байту, или 512К слов по 2 байта каждое, или 256К слов по 4 байта и т.д.

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

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

tобр = max(tобр сч, tобр зп)

где tобр сч - быстродействие   ЗУ при считывании информации; tобр зп - быстродействие   ЗУ при записи.

5.1. Классификация запоминающих устройств

Запоминающие устройства можно классифицировать по целому ряду параметров и признаков. На рис.5.1представлена классификация по типу обращения и организации доступа к ячейкамЗУ.

Рис. 5.1.  Классификация запоминающих устройств

По типу обращения ЗУ делятся на устройства, допускающие как чтение, так и запись информации, и постоянные запоминающие устройства (ПЗУ), предназначенные только для чтения записанных в них данных (ROM - read only memory). ЗУ первого типа используются в процессе работы процессора для хранения выполняемых программ, исходных данных, промежуточных и окончательных результатов. В ПЗУ, как правило, хранятся системные программы, необходимые для запуска компьютера в работу, а также константы. В некоторых ЭВМ, предназначенных, например, для работы в системах управления по одним и тем же неизменяемым алгоритмам, все программное обеспечение может храниться в ПЗУ.

В ЗУ с произвольным доступом (RAM - random access memory ) время доступа не зависит от места расположения участка памяти (например, ОЗУ).

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

В ЗУ с последовательным доступом производится последовательный просмотр участков носителя информации, пока нужный участок не займет некоторое нужное положение напротив головок чтения/записи (например, магнитные ленты - МЛ).

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

Рис. 5.2.  Иерархическая организация памяти в современных ЭВМ

Иерархическая структура памяти позволяет экономически эффективно сочетать хранение больших объемов информации с быстрым доступом к информации в процессе ее обработки.

На нижнем уровне иерархии находится регистровая память - набор регистров, входящих непосредственно в состав микропроцессора (центрального процессора - CPU). Регистры CPU программно доступны и хранят информацию, наиболее часто используемую при выполнении программы: промежуточные результаты, составные части адресов, счетчики циклов и т.д. Регистровая память имеет относительно небольшой объем (до нескольких десятков машинных слов). РП работает на частоте процессора, поэтому время доступа к ней минимально. Например, при частоте работы процессора 2 ГГц время обращения к его регистрам составит всего 0,5 нс.

Оперативная память - устройство, которое служит для хранения информации (программ, исходных данных, промежуточных и конечных результатов обработки), непосредственно используемой в ходе выполнения программы в процессоре. В настоящее время объем ОП персональных компьютеров составляет несколько сотен мегабайт. Оперативная память работает на частоте системной шины и требует 6-8 циклов синхронизации шины для обращения к ней. Так, при частоте работы системной шины 100 МГц (при этом период равен 10 нс) время обращения к оперативной памяти составит несколько десятков наносекунд.

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

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

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

5.2. Построение ЗУ с заданной организацией

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

Рассмотрим варианты построения блока памяти необходимой организации при наличии заданных БИС памяти.

Построить ОЗУ с организацией 8К*8 разрядов на БИС с организацией 1К*8 разрядов (рис.5.3).

Рис. 5.3.  Условно-графические обозначения запоминающих устройств с различной организацией: а - 1К*8 разрядов; б - 8К*8 разрядов

В данном случае требуется построить модуль памяти, имеющий большее число слов, чем в составляющих его БИС. Модуль памяти будет состоять из восьми БИС. Для обращения к модулю памяти используется 13-разрядный адрес (А12-А0), поступающий по шине адреса (ША). Три старших разряда (А12-А10) определяют ту схему, которая в данный момент включается в работу, а каждая ячейка внутри любой БИС определяется 10-ю младшими разрядами адреса (А9-А0) (рис. 5.4).

Рис. 5.4.  Организация модуля памяти

При единичном значении сигнала на входе выбора кристалла БИС (CS=1) выходные разряды данных находятся в третьем состоянии, то есть как бы отключены от шины (DO=Z).Таким образом, при любом значении кода на шине адреса всегда в работе находится одна и только одна из восьми БИС (рис. 5.5).

Рис. 5.5.  Запоминающее устройство объемом 8К*8 разрядов на БИС с организацией 1К*8 разрядов

В реальных микросхемах шины данных записи и чтения (DI и DO) обычно представляют собой общую двунаправленную шину.

Сигналы на шине управления означают: MW - сигнал записи в память, MR - сигнал чтения из памяти.

Построить ОЗУ с организацией 1К*8 разрядов на БИС с организацией 1К*1 разряд (рис.5.6).

Рис. 5.6.  Условно-графическое обозначение БИС с организацией 1К*1 разряд

В данном случае требуется увеличить разрядность слова памяти. Так как все разряды одного слова должны записываться и считываться одновременно, то все БИС должны работать параллельно. Модуль памяти будет состоять из восьми БИС (рис. 5.7). Если разрабатываемый блок является частью модуля памяти, имеющего объем больше, чем 1К слов (например, 8К), то необходим специальный дешифратор, который будет дешифрировать старшие разряды адреса аналогично тому, как показано нарис. 5.5и включать в работу данный блок.

Рис. 5.7.  Запоминающее устройство объемом 1К*8 разрядов на БИС с организацией 1К*1 разряд

6. РЕЖИМЫ АДРЕСАЦИИ И ФОРМАТЫ КОМАНД 16-РАЗРЯДНОГО ПРОЦЕССОРА

Микропроцессор Intel-8086 (К1810ВМ80) имеет двухадресную систему команд [8,10]. Ее особенностью является отсутствие команд, использующих оба операнда из оперативной памяти. Исключение составляют лишькоманды пересылки и сравнения цепочек байт или слов, которые в данном пособии рассматриваться не будут. Таким образом, в командах допустимы следующие сочетания операндов: RR, RS, RI, SI. Здесь R обозначает операнд, находящийся в одном из регистров регистровой памяти микропроцессора, S - операнд, находящийся в оперативной памяти, адрес которого формируется по одному из допустимых способов адресации, I - непосредственный операнд, закодированный в адресном поле самой команды. Формат команды во многом определяется способом адресации операнда, находящего в оперативной памяти, длиной используемого непосредственного операнда, а также наличием и длиной смещения, используемого при относительных режимах адресации.

Микропроцессор имеет все режимы адресации, общая схема которых была рассмотрена выше. Естественно, они имеют определенные особенности, присущие данному процессору.

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

Механизмы адресации операндов, находящихся в регистровой памяти и в оперативной памяти, существенно различаются. К регистровой памяти допускается лишь прямая регистровая адресация. При этом в команде указывается номер регистра, содержащего операнд. 16-разрядный операнд может находиться в регистрах AX, BX, CX, DX, DI, SI, SP, BP, а 8-разрядный - в регистрах AL, AH, BL, BH, CL, CH, DL, DH.

Адресация оперативной памяти имеет свои особенности, связанные с ее разбиением на сегменты и использованием сегментной группы регистров для указания начального адреса сегмента. 16-разрядный адрес, получаемый в блоке формирования адреса операнда на основе указанного режима адресации, называется эффективным адресом (ЭА). Иногда эффективный адрес обозначается как ЕА (effective address). 20-разрядный адрес, который получается сложением эффективного адреса и увеличенного в 16 раз значения соответствующего сегментного регистра, называется физическим адресом (ФА).

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

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

При регистровой косвенной адресации эффективный адрес операнда находится в базовом регистре BX или одном из индексных регистров DI либо SI:

Обозначение имени регистра в квадратных скобках указывает на содержимое соответствующего регистра. Фигурные скобки - символ выбора одной из нескольких возможных альтернатив.

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

Обозначения disp8 и disp16 здесь и далее указывают на 8- или 16-разрядное смещение соответственно.

Эффективный адрес при базово-индексной адресации равен сумме содержимого базового и индексного регистров, определяемых командой:

Наиболее сложен механизм относительной базово-индексной адресации. Эффективный адрес в этом случае равен сумме 8- или 16-разрядного смещения и базово-индексного адреса:

Форматы двухоперандных команд представлены на рис.6.1. Пунктиром показаны поля, которые в зависимости от режима адресации могут отсутствовать в команде.

Рис. 6.1.  Форматы двухоперандных команд микропроцессора I8086

Поле КОП содержит код выполняемой операции. Признак w указывает на длину операндов. При w = 1 операция проводится над словами, а при w = 0 - над байтами. Признак d указывает положение приемника результата. Признак d = 1, если результат записывается на место операнда, закодированного в поле reg, и d = 0, если результат записывается по адресу, закодированному полями (md, r/m).

Второй байт команды, называемый постбайтом, определяет операнды, участвующие в операции. Поле reg указывает регистр регистровой памяти согласно табл. 6.1

Таблица 6.1

Регистр

reg

w=1

w=0

000

AX

AL

001

CX

CL

010

DX

DL

011

BX

BL

100

SP

AH

101

BP

CH

110

SI

DH

111

DI

BH

Поля md и r/m задают режим адресации второго операнда согласно табл. 6.2.

Таблица 6.2

r/m

md

00

01

10

11

w=1

w=0

000

(BX)+(SI)

(DS)

(BX)+(SI)+disp 8

(DS)

(BX)+(SI)+disp 16

(DS)

AX

AL

001

(BX)+(DI)

(DS)

(BX)+(DI)+disp 8

(DS)

(BX)+(DI)+disp 16

(DS)

CX

CL

010

(BP)+(SI)

(SS)

(BP)+(SI)+disp 8

(SS)

(BP)+(SI)+disp 16

(SS)

DX

DL

011

(BP)+(DI)

(SS)

(BP)+(DI)+disp 8

(SS)

(BP)+(DI)+disp 16

(SS)

BX

BL

100

(SI)

(DS)

(SI)+disp 8

(DS)

(SI)+disp 16

(DS)

SP

AH

101

(DI)

(DS)

(DI)+disp 8

(DS)

(DI)+disp 16

(DS)

BP

CH

110

disp16

(DS)

(BP)+disp 8

(SS)

(BP)+disp 16

(SS)

SI

DH

111

(BX)

(DS)

(BX)+disp 8

(DS)

(BX)+disp 16

(DS)

DI

BH

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

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

Таблица 6.3

w

s

Операция

Непосредственный операнд

0

0

8-разрядная

8-разрядный

0

1

не используется

1

0

16-разрядная

16-разрядный

1

1

8-разрядный, расширяемый знаком до 16-ти разрядов при выполнении операции

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

Классификация команд переходов в персональной ЭВМ представлена на рис. 6.2.

Рис. 6.2.  Классификация команд переходов IBM PC

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

Команды безусловных переходов производят модификацию регистра IP или регистров IP и CS без предварительного анализа каких-либо условий. Существует пять команд безусловных переходов. Все они имеют одинаковую мнемонику JMP и содержат один операнд. Конкретный формат команды определяется соответствующим префиксом и приведен в общей таблице машинного представления команд (табл. 6.4).

Таблица 6.4

Машинные коды некоторых команд

Команда

Байты кода команды

Схема операции

байт 1

байт 2

байты 3…6

ADD

000000dw

md reg r/m

(disp8/16)

r(r/m) = r + r/m

100000sw

md 000 r/m

(disp8/disp16)d8/16

r/m = r/m + d8/16

0000010w

data L

(data H)

ac = ac + d8/16

Продолжение таблицы 6.4

SUB

001010dw

md reg r/m

(disp8/16)

r(r/m)=r(r/m)-(r/m)r

100000sw

md 101 r/m

(disp8/16)d8/16

r/m = r/m - d8/16

0010110w

data L

(data H)

ac = ac - d8/16

AND

001000dw

md reg r/m

(disp8/16)

r(r/m) = r & r/m

100000sw

md 100 r/m

(disp8/16)d8/16

r/m = r/m & d8/16

0010010w

data L

(data H)

ac = ac & d8/16

OR

000010dw

md reg r/m

(disp8/16)

r(r/m) = r V r/m

100000sw

md 001 r/m

(disp8/16)d8/16

r/m = r/m V d8/16

0000110w

data L

(data H)

ac = ac V d8/16

XOR

001100dw

md reg r/m

(disp8/16)

r(r/m) = r + r/m

100000sw

md 110 r/m

(disp8/16)d8/16

r/m = r/m + d8/16

0011010w

data L

(data H)

ac = ac + d8/16

MOV

100010dw

md reg r/m

(disp8/16)

r = r/m, r/m = r

1100011w

md 000 r/m

(disp8/16)d8/16

r/m = d8/16

1011wreg

data L

(data H)

reg = d8/16

1010000w

disp L

disp H

ac=m; прямой адрес

1010001w

disp L

disp H

m=ac; прямой адрес

CMP

0011101w

md reg r/m

(disp8/16)

r - r/m

0011100w

md reg r/m

(disp8/16)

r/m - r

100000sw

md 111 r/m

(disp8/16)d8/16

r/m - d8/16

0011110w

data L

(data H)

ac - d8/16

INC

1111111w

md 000 r/m

(disp8/16)

r/m = r/m+1

Продолжение таблицы 6.4

01000reg

reg = reg+1

DEC

1111111w

md 001 r/m

(disp8/16)

r/m = r/m-1

01001reg

reg = reg-1

TEST

1000010w

md reg r/m

(disp8/16)

r & r/m

1111011w

md 000 r/m

(disp8/16)d8/16

r/m & d8/16

1010100w

data L

(data H)

ac & d8/16

XCHG

10010reg

reg↔AX

1000011w

md reg r/m

(disp8/16)

reg↔r/m

JMP short

11101011

disp L

IP=IP+dispL

near ptr

11101001

disp L

disp H

IP=IP+dispH,L

word ptr

11111111

md 100 r/m

(disp8/16)

IP=(EA)

far ptr

11101010

IP-L

IP-H,CS-L,CS-H

IP=IPH,L, CS=CSH,L

dword ptr

11111111

md 101 r/m

(disp8/16)

IP=(EA), CS=(EA+2)

Условный переход

IP=IP+dispL, если условие выполнено, иначе к след. команде

JZ (JE)

01110100

disp L

ноль (равно)

JNZ (JNE)

01110101

disp L

не ноль (не равно)

JS

01111000

disp L

минус

JNS

01111001

disp L

плюс

JO

01110000

disp L

переполнение

JNO

01110001

disp L

нет переполнения

JL (JNGE)

01111100

disp L

меньше для чисел

JNL (JGE)

01111101

disp L

не меньше для чисел

JG (JNLE)

01111100

disp L

больше для чисел

JNG (JLE)

01111101

disp L

не больше для чисел

JB (JNAE,JC)

01110010

disp L

меньше для кодов

JNB (JAE, JNC)

01110011

disp L

не меньше для кодов

Окончание таблицы 6.4

JA (JNBE)

01110010

disp L

больше для кодов

JNA (JBE)

01110011

disp L

не больше для кодов

JP (JPE)

01111010

disp L

четное число "1"

JNP (JPO)

01111011

disp L

нечетное число "1"

Примечание: в столбце "Схема операции" ac означает регистр-аккумулятор, в качестве которого используется регистр AX при w=1 и регистр AL при w=0.

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

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

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

Ниже приведены примеры команд переходов различных типов.

1) Команды условного перехода:

формат:

IP = IP + 2, если условие не выполнено;

IP = IP +2 + disp L, если условие выполнено;

пример:

JZ MARK; переход на метку MARK, если ZF = 1.

2) Команды прямого внутрисегментного перехода:

формат:

IP=IP+∆+disp, где ∆ - длина команды перехода (2 или 3 в зависимости от длины смещения);

примеры:

JMP short ptr MARK; переход на метку MARK, с использованием 8-разрядного смещения;

JMP near ptr MARK; переход на метку MARK, с использованием 16-разрядного смещения.

3) Команды прямого межсегментного перехода

формат:

IP = IP_H, IP_L,

CS = CS_H, CS_L;

пример:

JMP far ptr MARK; переход на метку MARK к команде, находящейся в другом сегменте.

4) Команды косвенного внутрисегментного перехода:

формат:

IP = [EA + 1, EA]; или

IP = <регистр>, если в постбайте задано обращение к регистровой памяти;

пример:

JMP word ptr [BX + SI]; новое значение IP берется из двух последовательных байт памяти, эффективный адрес первого из которых определяется суммой регистров BX и SI.

5) Команды косвенного межсегментного перехода:

формат:

IP = [EA + 1, EA],

CS = [EA + 3, EA + 2];

пример:

JMP dword ptr [BX + SI]; сумма регистров BX и SI определяет эффективный адрес области памяти, первые два байта которой содержат новое значение IP, а следующие два байта - новое значение CS.

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

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

Рис. 6.3.  Структура счетного цикла с постпроверкой

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

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

Описание команд цикла сведено в табл. 6.5. За исключением команды JCXZ, которая не изменяет значения регистра CX, при выполнениикоманд циклов производятся следующие действия: CX=(CX)-1. Затем, если проверяемое условие выполнено, то IP=(IP)+disp8 с расширением смещения знаком до 16 разрядов, в противном случае IP не изменяется, и программа продолжает выполнение в естественном порядке.

Таблица 6.5

Команды циклов

Название

Мнемоника

Альтернативная мнемоника

КОП

Проверяемое условие

Зациклить

LOOP

11100010

(CX)=0

Зациклить пока ноль (равно)

LOOPZ

LOOPE

11100001

(ZF=1)&(CX)=0)

Зациклить пока не ноль (неравно)

LOOPNZ

LOOPNE

11100000

(ZF=0)&((CX)=0)

Перейти по (CX)

JCXZ

11100011

(CX)=0

7. КОДИРОВАНИЕ КОМАНД (ЧАСТЬ 1)

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

Рассмотрим это на примере операции сложения. Так как в системе команд ЭВМ, базирующихся на микропроцессорах фирмы Intel, результат операции записывается на место первого операнда, то данная операция будет иметь вид: a=a+b.

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

[Метка]: Мнемоника операции, Операнд, Операнд [Комментарий]

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

Во всех командах необходимо наличие мнемоники, обозначающей выполняемую команду.

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

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

7.1. Кодирование линейных команд

Пример 1.

Оба операнда находятся в регистрах общего назначения: (AX)=a; (CX)=b. Для обращения к операндам используется прямая регистровая адресация.

Символическая запись команды:

ADD AX,CX

Согласно табл. 6.2машинное представление этой команды имеет вид:

000000dw md reg r/m

По условию операнды занимают полноразрядные регистры длиной 1 слово, следовательно, необходимо установить w=1.

Так как оба операнда располагаются в регистрах общего назначения, то любой из них можно закодировать в поле reg. Поэтому команда может иметь два различных представления в машинном коде. При этом, если в поле reg закодирован номер регистра AX, то бит приемника результата d=1. Если в поле reg закодирован номер регистра CX, то бит приемника результата d=0.

или

Здесь и далее в записи команд b означает двоичное представление, h - 16-е.

После выполнения команды в AX будет записана сумма содержимого регистров AX и CX, а указатель команды IP увеличится на длину выполненной команды (2 байта) и будет указывать на первый байт следующей команды.

Здесь и далее представление информации будем давать в 16-м виде, если другое не оговорено особо.

Если перед началом выполнения команды (AX)=0C34, (CX)=1020, (IP)=0012, то после ее выполнения (AX)=1C54, (CX)=1020, (IP)=0014.

Пример 2.

Операнд a находится в регистре AX, b - непосредственный операнд, равный 56B3h.

Символическая запись команды:

ADD AX,56B3h

Машинное представление:

Если непосредственный операнд имеет величину, которая может быть закодирована в одном байте, например, 77 (в десятичной системе счисления), что при представлении в дополнительном коде дает 0100 1101b = 4Dh, то за счет использования признака s удается сократить длину команды:

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

для операнда 56B3h.

Возможность использования признака s в этом формате отсутствует.

Пусть перед началом выполнения команды (AX)=03A4, (IP)=0012.

Тогда результатом выполнения команды ADD AX,56B3h будет: (AX)=5A57, (IP)=0016, а результатом выполнения команды ADD AL,B3h будет: (AX)=0357, (IP)=0015, если команда закодирована по общей схеме, и (IP)=0014 - если по схеме суммирования с аккумулятором.

Отметим, что в последнем случае действие выполняется лишь с младшим байтом регистра AX, то есть с регистром AL, и его результат не влияет на содержимое AH.

Пример 3.

Операнд a находится в AX, операнд b - в оперативной памяти по прямому адресу 3474h.

Символическая запись команды:

ADD AX,[3474h]

Ее машинное представление:

Пусть перед выполнением команды (AX)=1234, [3474h]=1A, [3475h]=25, (IP)=0012. Напомним, что адрес слова в оперативной памяти - это адрес его младшего байта. Тогда после выполнения команды: (AX)=374E, (IP)=0016.

Пример 4.

Если операнд a находится в оперативной памяти по прямому адресу 3474h, а операнд b представляет собой непосредственный операнд, равный 56B3h, то символическая запись команды имеет вид:

ADD [3474h],56B3h.

А ее машинное представление:

При тех же исходных данных, что и в примере 3, результатом операции будет: [3474]=CD, [3475]=7B, (IP)=0018.

Пример 5.

Операнд a находится в слове оперативной памяти, адрес которого хранится в регистре BX, а операнд b - в регистре AX. В этом случае адресация операнда a - регистровая косвенная.

Символическая запись команды:

ADD [BX],AX

Машинное представление:

Если перед выполнением команды (AX)=1234, (BX)=3474, [3474]=D7, [3475]=11, (IP)=0012, то в результате выполнения команды произойдут следующие изменения: [3474]=0B, [3475]=24, (IP)=0014.

Пример 6.

Операнд a находится в AX. Операнд b является элементом массива, первый элемент которого помечен меткой MAS, а положение операнда b в массиве определяется содержимым регистра BX (рис. 7.1).

Рис. 7.1.  Организация доступа к операнду при регистровой относительной адресации

Символическая запись команды:

ADD AX,MAS[BX]

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

Пусть начало массива MAS имеет смещение в 3000h байтов от начала сегмента DS. Тогда машинный код команды будет иметь вид:

Если перед выполнением команды (AX)=1234, (BX)=0074, [3474]=E6, [3475]=64, (IP)=0102, то результатом будет: (AX)=771A, (IP)=0106.

Если начало массива располагается со смещением 70h байтов от начала сегмента DS, то программа Ассемблера сформирует более короткий машинный код команды:

Если исходное состояние элементов хранения совпадает с предыдущим, за исключением (BX)=3004, то и результат будет таким же, за исключением (IP)=0105.

Пример 7.

Операнд a находится в регистре AL. Операнд b является элементом массива, начальный адрес которого находится в регистре BX. Положение элемента в массиве определяется регистром DI (рис. 7.2). В этом случае обращение к операндуb происходит посредством базово-индексной адресации.

Рис. 7.2.  Расположение операнда при базово-индексной адресации

Символическая запись команды имеет вид:

ADD AL,[BX+DI]

Так как первый операнд находится в регистре AL, то он имеет длину 1 байт. Поэтому в машинном представлении команды w=0, и она выглядит следующим образом:

Если до начала выполнения команды (AX)=25B7, (BX)=3000, (DI)=0474, [3474]=77, (IP)=2519, то после ее выполнения произойдут следующие изменения: (AX)=252E, (IP)=251B. Обратим внимание на то, что содержимое регистра AL представляет собой младший байт регистра AX. Так как операция проводится над байтами, то перенос в старший байт регистра AX блокируется.

Пример 8.

Операнд a находится в регистре AH. Операнд b является элементом двумерного массива, первый элемент которого помечен меткой MAS. Длина (в байтах) от начала массива до начала строки, в которой расположен операнд, хранится в регистре BX, а в регистре DI хранится количество байт от начала текущей строки до операнда b (рис. 7.3).

Рис. 7.3.  Расположение операнда при относительной базово-индексной адресации

Символическая запись команды:

ADD AH,MAS[BX+DI]

Машинный код команды будет зависеть от того, как далеко относительно начала сегмента располагается начало массива (см. пример 6). Если это смещение занимает 2 байта и, например, равно 1D25, то машинный код команды имеет вид:

Если смещение более короткое и может быть записано в одном байте, например, 2D, то машинное представление команды следующее:

При (AX)=84A3, [(BX)+(DI)+disp8]=3474, [3474]=77, (IP)=0110 результат будет (AX)=FBA3, (IP)=0114 в первом случае и (IP)=0113 во втором.

Пример 9.

Операнд a находится в оперативной памяти по прямому адресу 3474. Адрес операнда b, также находящегося в оперативной памяти, содержится в регистре SI.

Сложение этих операндов невозможно выполнить, используя только одну команду, так как система команд не предусматривает сложения операндов формата "память-память". Поэтому одним из возможных вариантов решения этого примера может быть:

MOV AX, [SI]; AX=b

ADD [3474h], AX; a=a+b

Кодирование каждой из этих команд проводится по рассмотренным выше правилам

8. КОДИРОВАНИЕ КОМАНД (ЧАСТЬ 2)

8.1. Кодирование команд переходов

Кодирование команд переходов и циклов имеет определенную специфику. Рассмотрим машинное представление этих команд подробнее.

При безусловном внутрисегментном прямом переходе новое значение IP равно сумме 8- или 16-разрядного смещения и текущего значения IP. В качестве текущего значения IP используется адрес команды, записанной вслед за командой перехода. Схема выполнения операции представлена на рис. 8.1, где предполагается, что перед вычислением адреса перехода содержимое IP уже указывает на команду, следующую за командой перехода.

Команда, имеющая 8-разрядное смещение, называется командой короткого перехода и имеет в символической записи после мнемоники команды префикс short. Смещение записывается в дополнительном коде, который перед сложением с текущим значением IP расширяется знаком до 16 разрядов. Таким образом, диапазон адресов переходов для команды короткого перехода составляет -128...+127 байтов относительно текущего значения IP.

Рис. 8.1.  Схема внутрисегментного прямого перехода

Пример 1.

Команда JMP short L осуществляет передачу управления команде, помеченной меткой L.

Пусть эта команда перехода записана по адресу 010A. Тогда если метке L соответствует, например, адрес 011A, то смещение в команде перехода будет равно:

011A - (010A+2)=011A-010C=011A+FEF4=0E

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

Машинное представление команды следующее:

Обратим внимание на то, что в качестве текущего значения IP взят адрес команды перехода, увеличенный на 2, так как длина самой команды перехода равна 2 байтам.

Если команда, помеченная меткой L, располагается по адресу 00C1, то смещение будет равно:

00C1-010C=00C1+FEF4=FFB5

Полученное смещение имеет длину 2 байта, что недопустимо для данного формата команды. Но так как старший байт представляет собой знаковое расширение младшего байта (FFB5h = 11111111 10110101b ), то это смещение можно закодировать в 1 байте, и команда будет иметь машинное представление: EBB5h.

Если метке L соответствует адрес 0224, то необходимая величина смещения, равная 0224-010C=0118, не может быть записана в 8-разрядном формате. Следовательно, с помощью команды короткого перехода осуществить переход на указанный адрес невозможно.

Пример 2.

По машинному представлению команды перехода можно определить, на какой адрес в сегменте команд будет передано управление. Так команда, имеющая машинный код EB4Ch и расположенная по адресу 0100h, осуществляет передачу управления на команду с адресом: (0100+2)+004C=014E, а команда с кодом EBC4h, расположенная по тому же адресу, осуществляет передачу управления по адресу (0100+2)+FFC4=00C6.

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

Рассмотрим это положение на следующем примере.

Пример 3.

Пусть команда JMP near L имеет машинное представление E964A6h. Тогда если она расположена по адресу 310A, то управление будет передано на команду с адресом:

(310A+3)+A664=D771

Если команда перехода находится по адресу C224, то управление будет передано на команду с адресом 688B (C224+3)+A664 с учетом игнорирования переноса за пределы 16-разрядной сетки).

В первом случае переход произошел в сторону больших, а во втором - в сторону меньших адресов.

Отметим, что здесь текущее значение IP на 3 больше адреса команды близкого прямого перехода, так как сама эта команда имеет длину 3 байта.

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

При внутрисегментном косвенном переходе содержимое IP заменяется значением 16-разрядного регистра или слова памяти, которые адресуются полями md и r/m постбайта с помощью любого режима адресации, кроме непосредственного. Схема этого действия представлена на рис. 8.2.

Рис. 8.2.  Схема внутрисегментного косвенного перехода

Пример 4.

Команда JMP BX осуществляет переход к ячейке памяти, адрес которой равен содержимому регистра BX.

Машинное представление этой команды:

Если в BX записано число 2976, то вне зависимости от текущего значения IP управление будет передано на команду, записанную, начиная с адреса 2976.

Пример 5.

Команда JMP [BX]+A4h имеет машинное представление:

Если содержимое регистра BX равно 2976, то адрес перехода будет взят из слова оперативной памяти, содержащегося в сегменте данных по адресу: 2976+A4=2A1A.

Команды межсегментных переходов меняют как содержимое IP, так и содержимое CS.

Команда межсегментного прямого перехода имеет в символической записи префикс far и заносит в IP и CS новые значения, заданные в самой команде.

Пример 6.

Пусть необходимо осуществить передачу управления на команду, помеченную меткой L и располагающуюся в другом программном сегменте со следующими координатами: (CS)=AA66, (IP)=11C2. Символическая запись такой команды перехода будет следующей:

JMP far L.

Ее машинное представление:

При межсегментном косвенном переходе новые значения IP и CS содержатся не в самой команде, а в двух смежных словах оперативной памяти. Адрес этой области памяти определяется постбайтом команды перехода в любом режиме адресации, кроме непосредственного и прямого регистрового. Схема выполнения команды представлена на рис. 8.3.

Рис. 8.3.  Схема межсегментного косвенного перехода

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

В сомнительных случаях тип перехода может задаваться явным образом с помощью префиксов word ptr и dword ptr соответственно для внутрисегментного и межсегментного переходов.

Пример 7.

Пусть (BX)=24A4, [24A4]=11, [24A5]=12, [24A6]=13, [24A7]=5A.

Тогда команда JMP dword ptr [BX] имеет машинное представление:

и передает управление команде, расположенной в кодовом сегменте (CS)=5A13 со смещением (IP)=1211.

Команда JMP word ptr [BX] имеет машинное представление:

и передает управление команде, расположенной в том же кодовом сегменте со смещением (IP)=1211.

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

Пример 8.

Пусть команда JZ L расположена по адресу 2010h, а метка L соответствует адресу 2072h. Получим машинное представление этой команды.

Смещение будет равно:

2072 - (2010+2)=2072+DFEE=0060

Это число со знаком может быть закодировано в 1 байте, следовательно, такой переход возможен. Используя код команды из табл. 6.4, получим машинное представление этой команды: 7460 h.

Рассматриваемая команда передаст управление по адресу 2072, если к моменту ее выполнения ZF=1. При состоянии признака ZF регистра флагов, равном нулю, управление будет передано следующей команде, то есть по адресу 2012.

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

Необходимо сложить l слов a[i], расположенных последовательно в оперативной памяти, начиная с адреса [31A6h], а результат записать по адресу [3000h].

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

Таблица 8.1

Символическая запись

Комментарий

IP

Машинное представление

2-й код

16-й код

MOV CX,[31A4h]

CX = l

0100

10001011

00001110

10100100

00110001

8B

0E

A4

31

SUB AX,AX

S = 0

0104

00101001

11000000

29

C0

MOV SI,AX

i = 0

0106

10001011

11110000

8B

F0

CYC: ADD AX,[SI+31A6h]

S = S+a[i]

0108

00000011

03

10000100

10100110

00110001

84

A6

31

ADD SI,2

i = i+1

010C

10000011

11000110

00000010

83

C6

02

Окончание таблицы 8.1

DEC CX

010F

01001001

49

JNZ CYC

перейти, если

≠0

0110

01110101

11110110

75

F6

MOV [3000h],AX

SUM = S

0112

10100001

00000000

00110000

A1

00

30

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

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

Восстановление символической записи команды по ее машинному представлению

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

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

Пример 9.

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

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

По таблице машинного представления команд (см. табл. 6.4) определим, что КОП= 000000 b соответствует общему формату операции сложения ADD. Тогда два младших бита первого байта кодируют признаки d и w, а второй байт является постбайтом, определяющим режимы адресации операндов, участвующих в операции. Значение полей в постбайте позволяет определить, что операндами будут регистр AL (reg=000, w=0) (см. табл. 6.1) и байт памяти, адресуемый с помощью базово-индексной адресации через регистры BX и SI (md=00, r/m=000) (см. табл. 6.2). Значение d=0 указывает, что регистр AL является операндом-источником.

Следовательно, символическая запись команды имеет вид:

ADD [BX+SI],AL

Пример 10.

Представить символическую запись команды, имеющей следующую машинную форму: 81475D398B h.

Переходим к двоичному представлению команды:

Первый байт, согласно таблице машинного представления команд, соответствует команде сложения с непосредственным операндом. Постбайт в этом случае кодирует местоположение лишь одного операнда, которое определяется полями md и r/m: (BX)+disp8 (см. табл. 6.2), а среднее поле постбайта является расширением кода операции.

Адресация операнда требует указания в команде 8-разрядного смещения. Оно помещается сразу же за постбайтом. Последние байты команды кодируют непосредственный операнд. Значение sw=01 в первом байте команды указывает на то, что непосредственный операнд - 16-разрядный. Учитывая, что при кодировании в команде двухбайтовых величин сначала записывается их младший байт, получим следующую символическую запись команды:

ADD [BX+5D],8B39h

Пример 11.

Пусть машинная форма представления команды следующая: 0445h. Тогда ее двоичный вид:

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

Так как w=0, то непосредственный операнд имеет длину 1 байт, а в качестве аккумулятора используется регистр AL. При этом команда имеет следующий вид:

ADD AL,45h

9. КОДИРОВАНИЕ КОМАНД (ЧАСТЬ 3)

9.2. Оценка влияния структуры программы на время ее выполнения

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

Базовые времена выполнения некоторых команд приведены в табл. 9.1. Время вычисленияэффективного адреса (ЕА) зависит от режима адресации (табл. 9.2). Последний столбец втабл. 9.1показывает число обращений к памяти, необходимых для выполнения команды. Чтобы определитьвремя выполнения команды, следует учесть выравнивание операнда, то есть его расположение в оперативной памяти. Обращение к однобайтному операнду не требует дополнительных тактов синхронизации. Время обращения к слову памяти зависит от его адреса. Если слово имеет нечетный адрес, то его передача из оперативной памяти занимает 2 цикла шины, длящихся по 4 такта синхронизации каждый. Следовательно, каждое обращение к слову с нечетным адресом требует четырех дополнительных тактов синхронизации.

Таблица 9.1

Команды

Адресация

Число тактов

Число обращений к памяти

ADD, SUB, AND, OR

RR

RS

3

9+EA

0

1

SR

RI, AI

SI

16+EA

4

16+EA

2

0

2

MOV

SA, AS

RR

RS

SR

RI

SI

10

2

8+EA

9+EA

4

10+EA

1

0

1

1

0

1

MUL

множитель 8 бит - R

70…77

0

Окончание таблицы 9.1

множитель 16 бит - R

множитель 8 бит - S

множитель 16 бит - S

118…133

(76…83)+EA

(124…139)+EA

0

1

1

CMP

RR

RS, SR

RI, AI

SI

3

9+EA

4

10+EA

0

1

0

1

INC, DEC

16 бит - R

8 бит - R

S

2

3

15+EA

0

0

2

Условные переходы, кроме JCXZ

нет перехода

есть переход

4

16

0

0

LOOP

нет перехода

есть переход

5

17

0

0

JMP

короткий

внутрисегментный

прямой

косвенный

регистровый

межсегментный

прямой

косвенный

15

-

15

18+EA

11

-

15

24+EA

0

-

0

1

0

-

0

2

Примечание: R - адресация к регистру; A - к аккумулятору; S - к памяти; I - непосредственная адресация

Таблица 9.2

Режим адресации

Число тактов синхронизации для вычисления эффективного адреса

Прямой

6

Косвенный

5

Относительный

9

Базово-индексный

(BP)+(DI) или (BX)+(SI)

(BP)+(SI) или (BX)+(DI)

-

7

8

Относительный базово-индексный

(BP)+(DI)+disp или (BX)+(SI)+disp

(BP)+(SI)+disp или (BX)+(DI)+disp

-

11

12

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

Базовое время выполнения некоторых команд зависит также от значения операндов. Типичными примерами этого служат команды умножения и деления (см. табл. 9.1). Так,время выполнения команды умножения, реализованной по алгоритму умножения дополнительных кодов с пропуском такта суммирования, определяется количеством пар соседних несовпадающих разрядов (01 или 10), так как при комбинациях 00 или 11 такт суммирования с нулевым слагаемым отсутствует. Поэтому, например, для 8-разрядных операндов максимальное время умножения будет при значении множителя 01010101, а минимальное - при ненулевом множителе 10000000 (напомним, что числа в персональной ЭВМ представляются в дополнительном коде, поэтому указанный код соответствует числу -128). То есть в первом случае команда умножения будет выполняться на 7 тактов суммирования дольше, что соответствует значениям, приведенным в табл. 9.1.

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

Проиллюстрируем сказанное несколькими примерами. Для всех примеров будем полагать для простоты расчетов, что частота синхронизации равна 100 МГц (длительность такта 10 нс).

Пример 1.

ADD ES:[BX],DX

Команда формата "память-регистр".

Базовое время: 16+EA.

Время вычисления EA (регистровая косвенная адресация): 5 тактов.

Обозначение "ES:" в символической записи команды показывает, что в процессе формирования физического адреса операнда происходит замена сегментного регистра. Вместо используемого по умолчанию при данном режиме адресации сегментного регистра DS используется регистр ES. Эта операция требует 2 тактов синхронизации.

Команда обрабатывает слово. Если слово имеет нечетный адрес, то

Т=16+5+2+2*4=31 (такт)=310 (нс)

Если слово имеет четный адрес, то

Т=16+5+2=23 (такта)=230 (нс)

Пример 2.

MUL [BX]

Умножение без знака содержимого AL на операнд, адрес которого задан в команде. Операнд находится в памяти.

Базовое время: (76...83)+EA.

Время вычисления EA (регистровая косвенная адресация): 5 тактов.

Т=(76...83)+5 = (81...88) тактов = (810...880) нс

Пример 3.

JZ MET; перейти на MET, если "ноль"

Базовое время: 4 такта, если нет перехода, и 16 тактов, если переход выполняется.

Других затрат времени нет.

Т=4 такта=40 нс перехода нет.

Т=16 тактов=160 нс переход выполняется.

Пример 4.

JMP dword ptr [SI+15]; межсегментный косвенный переход.

Базовое время: 24+EA.

Время вычисления EA (регистровая относительная адресация): 9 тактов.

Имеются 2 обращения к памяти за новыми значениями IP и CS.

Если адрес слова четный, то

Т=24+9=33 (такта)=330 (нс).

Если адрес слова нечетный, то

Т=24+9+2*4=41 (такт)=410 (нс).

Время выполнения линейного участка программы равно сумме времен выполнения всех команд этого участка.

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

Ниже представлен текст соответствующей программы в предположении, что A, B и y - переменные длиной 1 байт, имеющие идентификаторы MA, MB и MY соответственно. Здесь и далее полагаем, что используемые адреса в сегменте данных - четные. Рядом с каждой командой указано количество тактов синхронизации, необходимое для ее выполнения (идентификаторы соответствуют прямому режиму адресации):

MOV BL, 5; 4

MOV AL, MA; 10

CMP AL, MB; 15

JG OUT; 4/16

INC BL; 3

OUT: MOV MY, BL; 15

Таким образом, если A>B, то программа выполняется за 60 тактов, в противном случае - за 51 такт.

Если оба случая равновероятны, то

Тср = (Т1+Т2)/2 = 55.5 (такта).

В общем случае для данной программы

Тср = 4+10+15+16*p1+(4+3)*p2+15=44+16*p1+7*p2.

где p1 и p2 - вероятности перехода в команде JG в случае выполнения и невыполнения условия соответственно (p1+p2=1 ).

Если известна количественная или хотя бы качественная оценка соотношения p1 и p2, то можно минимизировать среднее время выполнения данного фрагмента программы.

Пусть известно, что A>B при 90% различных исходных данных. Тогда для рассмотренной программы:

Тср = 44+0.9*16+0.1*7=59.1 (такта).

При обратном соотношении, то есть при p1=0.1:

Тср = 44+0.1*16+0.9*7=51.9 (такта).

Следовательно, при p1=0.1 быстрее будет выполняться программа, меняющая условие перехода:

MOV BL, 6; 4

MOV AL, MA; 10

CMP AL, MB; 15

JNG OUT; 4/16

DEC BL; 3

OUT: MOV MY, BL; 15

Она дает то же самое среднее время выполнения программы при p1=p2, но выигрыш при p1>p2 и проигрыш при p1<p2.

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

Рассмотрим это положение на следующем примере. Пусть необходимо вычислить произведение двух целых положительных чисел длиной в слово (S=M*N), не используя команду умножения. Предполагаем, что операнды располагаются в памяти по эффективным адресам, вычисляемым как [SI+2A] и [1148h], а результат также не превышает одного слова и должен быть записан в память по адресу [BX+SI]. Предполагаем также, что все адреса в сегменте данных четные.

Решать задачу будем по следующей схеме:

Рассмотрим несколько возможных вариантов решения.

Вариант 1.

MOV [BX+SI], 0; 17

MOV AX, [1148h]; 10

CYCLE: ADD [BX+SI], AX; 23

DEC [SI+2A]; 24

JNZ CYCLE; 4/16

Вариант 2.

MOV AX, [1148h]; 10

MOV CX, [SI+2A]; 17

SUB DX, DX; 3

CYCLE: ADD DX, AX; 3

DEC CX; 2

JNZ CYCLE; 4/16

MOV [BX+SI], DX; 16

Вариант 3.

MOV AX, [1148h]; 10

MOV CX, [SI+2A]; 17

SUB DX, DX; 3

CYCLE: ADD DX, AX; 3

LOOP CYCLE; 15/17

MOV [BX+SI], DX; 16

Вариант 1 использует минимальное общее количество команд. В варианте 2 обработка идет в регистрах общего назначения, но не используется специальная команда цикла, которая использована в варианте 3.

Сравнительные характеристики этих вариантов представлены в табл. 9.3

Таблица 9.3

Вариант

Количество команд

Длина программы, (байт)

Время выполнения, (такт)

1

5

14

63N+15

2

7

15

21N+34

3

6

14

20N+34

Таким образом, даже несмотря на некоторое увеличение длины, программа, реализованная в вариантах 2 и 3, при достаточно больших N выполняется почти втрое быстрее, чем реализованная в варианте 1.

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

10. Взаимодействие основных узлов и устройств персонального компьютера при автоматическом выполнении команды. Архитектура 32-разрядного микропроцессора

10.1. Взаимодействие основных узлов и устройств персонального компьютера при автоматическом выполнении команды

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

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

  • регистровая память;

  • блок формирования адреса операнда (БФАО);

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

Рис. 10.1.  Структурная схема базовой модели персональной ЭВМ

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

На блок формирования адреса операнда поступают:

  1. сигналы от тактового генератора микропроцессора;

  2. коды полей второго байта выполняемой команды, находящейся в РК; эти коды определяют режимы адресации первого (поля md и r/m) и второго (поле reg) операндов;

  3. коды двух младших разрядов первого байта команды (d и w), которые определяют, соответственно, операнд, на место которого записывается результат операции, и разрядность операндов.

БФАО вырабатывает следующие выходные сигналы:

  • коды номера выбираемых регистров;

  • сигналы считывания кодов с выбранных регистров;

  • сигналы считывания смещений (disp L и disp H);

  • сигналы считывания непосредственных операндов (data L и data H).

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

Суть этапов выполнения команды остается без изменения по сравнению с классической ЭВМ:

  • первый - выбор кода команды;

  • второй и третий - выбор операндов;

  • четвертый - выполнение операции в АЛУ;

  • пятый - запись результата в оперативную или регистровую память;

  • шестой - формирование адреса следующей выполняемой команды.

Но содержание этих этапов изменилось.

Рассмотрим выполнение вышеуказанных этапов на примере следующей команды:

ADD AL,[BX+disp8]

Допустим, что ее первый байт находится в ячейке ОЗУ с адресом i + 24*[CS], то есть [IP] = i.

Первый этап. Код IP, то есть [IP] = i, передаётся на сумматор . На этот же сумматор поступает кодсегментного регистра команд [CS] из РП, умноженный на 16. На выходе сформируется кодфизического адреса ОЗУ, по которому находится первый байт команды. Код с выхода поступает нарегистр адреса ОЗУ. Из ОЗУ выбирается первый байт команды и посылается в регистр команд (для некоторого упрощения предполагаем, что обмен информацией между микропроцессором и ОЗУ происходит байтами). И в завершении этого этапа к IP добавляется 1.

Все указанные взаимодействия отметим на схеме знаком 11. Эта последовательность действий будет повторена еще два раза для выбора второго и третьего байтов выполняемой команды. Это отмечено на схеме знаками 12 и 13.

Второй этап. В начале второго этапа с помощью ДшКОп расшифровывается код операции выполняемой команды. Если выполняемая команда не нарушает естественного порядка выполняемой программы, то осуществляется формирование адреса первого операнда и выборка этого операнда из РП или ОЗУ ЭВМ.

В данной команде для первого операнда используется регистровый относительный режим адресации. Соответственно, эффективный адрес определяется так: EA = [BX] + disp8. В этом случае коды полей md и r/m второго байта из регистра команд поступают в БФАО и таким образом коммутируют оборудование БФАО, что на его выходе появляются сигналы, обеспечивающие считывание:

  • кода регистра BX;

  • кода disp L;

  • кода сегментного регистра DS.

Все указанные коды поступают на сумматор физического адреса данных . При этом обеспечивается передача значения DS со сдвигом на 4 разряда влево (умножение на 16). Сформированный накод поступает на РА ОЗУ. Происходит выборка байта данных, который направляется в АЛУ. Выполнение второгоэтапа завершено. Все указанные взаимодействия устройств отметим на схеме цифрой 2.

Третий этап. Выбор второго операнда. В данном случае БФАО под воздействием сигнала с разряда w и поля reg регистра команд выдает сигнал обращения к регистру AL, код которого подается в АЛУ. Все взаимодействия на этом этапе отметим цифрой 3.

Четвертый этап. Выполнение операции сложения в АЛУ. Здесь блок управления операциями выдает те сигналы в АЛУ, которые необходимы для выполнения операции. Линии взаимодействия отметим цифрой 4.

Пятый этап. Код выполненной операции из АЛУ направляется в регистр AL (d = 1) регистровой памяти. Взаимодействие отмечается цифрой 5.

Команда выполнена. В IP находится основная составляющая адреса следующей команды программы: (IP) = i + 3. Здесь шестой этап как отдельный (автономный) этап исключен. Формирование основной составляющей адреса следующей выполняемой команды (указателя команд) было реализовано на первом этапе. Значение сегментного регистра команд в арифметических командах не меняется.

ЭВМ готова к выполнению следующих команд программы.

10.2. Архитектура 32-разрядного микропроцессора

В 1985 году фирма Intel выпустила 32-разрядный микропроцессор, ставший родоначальником семейства IA-32. Развитие этого семейства прошло ряд этапов, среди которых можно выделить следующие: реализация блока обработки чисел с плавающей запятой непосредственно на кристалле МП (микропроцессор I486), введение MMX -технологии обработки данных с фиксированной точкой по принципу SIMD - single instruction multi data (один поток команд - множество потоков данных) в микропроцессоре Pentium MMX и развитие этой технологии на числа с плавающей запятой (SSE - streaming SIMD Extention ), появившееся впервые в МП Pentium III [[4], [9]]. Однако основные черты этой архитектуры вплоть до настоящего времени остаются неизменными.

Архитектура 32-разрядного микропроцессора (рис. 10.2) существенно отличается от архитектуры 16-разрядного. Некоторые из этих отличий чисто количественные, другие носят принципиальный характер.

Рис. 10.2.  Структура 32-разрядного микропроцессора

Главное внешнее отличие - увеличение разрядности шины данных и шины адреса до 32 бит. Это, в свою очередь, связано с изменениями в разрядности внутренних элементов микропроцессора и в механизме выполнения некоторых процессов, например, формирования физического адреса.

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

В блоке сегментных регистров произошли как количественные, так и качественные изменения. К используемым в реальном режиме четырем регистрам CS, DS, SS и ES добавлены еще два: FS и GS. Хотя разрядность регистров этого блока осталась прежней (каждый по 16 бит), в формировании физического адреса оперативной памяти они используются по-другому. При работе микропроцессора в так называемом защищенном режиме они предназначаются для поиска дескриптора (описателя) сегмента в соответствующих системных таблицах, а уже в дескрипторе хранится базовый адрес и атрибуты сегмента. Формирование адреса в этом случае выполняет блок сегментации диспетчера памяти.

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

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

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

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

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

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

ЭА = (base) + (index) x scale + disp,

где (base) - значение базового регистра; (index) - значение индексного регистра; scale - величина масштабного множителя (scale = 1,2,3,4); disp - значение смещения, закодированного в самой команде.

Отметим, что в 32-разрядной архитектуре эффективный адрес обычно называют смещением (offset), в то же время отличая его от смещения, кодируемого в самой команде (displacement).

11. КОНВЕЙЕРНАЯ ОРГАНИЗАЦИЯ РАБОТЫ ПРОЦЕССОРА

11.1. Оценка производительности идеального конвейера

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

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

  1. IF (Instruction Fetch) - считывание команды в процессор;

  2. ID (Instruction Decoding) - декодирование команды;

  3. OR (Operand Reading) - считывание операндов;

  4. EX (Executing) - выполнение команды;

  5. WB (Write Back) - запись результата.

Выполнение команд в таком конвейере представлено в табл. 11.1.

Так как в каждом такте могут выполняться различные стадии обработки команд, то длительность такта выбирается исходя из максимального времени выполнения всех стадий. Кроме того, следует учитывать, что для передачи команды с одной стадии на другую требуется определенное дополнительное время (∆t), связанное с записью промежуточных результатов обработки в буферные регистры.

Таблица 11.1

Команда

Такт

11

2

3

4

5

6

7

8

9

i

IF

ID

OR

EX

WB

i+1

IF

ID

OR

EX

WB

i+2

IF

ID

OR

EX

WB

i+3

IF

ID

OR

EX

WB

i+4

IF

ID

OR

EX

WB

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

TIF = 20, TID = 15, TOR = 20, TEX = 25, TWB = 20.

Тогда, предполагая, что дополнительные расходы времени составляют dt = 5 единиц, получим время такта:

.

Оценим время выполнения одной команды и некоторой группы команд при последовательной и конвейерной обработке.

При последовательной обработке время выполнения N команд составит:

Tпосл = N*(TIF + TID + TOR + TEX + TWB) = 100N.

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

Tконв = 5T + (N-1) * T.

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

Таблица 11.2

Количество команд

Время

при последовательном выполнении

при конвейерном выполнении

1

100

150

2

200

240

10

1000

420

100

10000

3120

Очевидно, что при достаточно длительной работе конвейера его быстродействие будет существенно превышать быстродействие, достигаемое при последовательной обработке команд. Это увеличение будет тем больше, чем меньше длительность такта конвейера и чем больше количество выполненных команд. Сокращение длительности такта достигается, в частности, разбиением выполнения команды на большое число этапов, каждый из которых включает в себя относительно простые операции и поэтому может выполняться за короткий промежуток времени. Так, если в микропроцессоре Pentium длина конвейера составляла 5 ступеней (при максимальной тактовой частоте 200 МГц), то в Pentium-4 - уже 20 ступеней (при максимальной тактовой частоте на сегодняшний день 3,4 ГГц).