IX. СТРУКТУРА И ФУНКЦИОНИРОВАНИЕ CPU

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

Так, например, обработка вещественных чисел осуществляется в специальном дополнительном арифметическом сопроцессоре (Numeric Coprocessor), или FPU (Floating-point Unit). Он позволяет осуществлять операции с вещественными числами на два порядка быстрее, чем это может сделать CPU программным путем. (CPU, как правило, реализует только целочисленную арифметику). Другим примером может служить видеопроцессор, который позволяет разгрузить CPU от несвойственных ему функций по регенерации изображения на экране дисплея, преобразования координат и других операций в мультимедийных приложениях. Третьим примером могут служить процессоры ввода/вывода, часто называемые контроллерами, которые разгружают CPU от конкретных операций по вводу/выводу информации.

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

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

- Миниатюрные размеры элементов на кристалле полупроводника (обычно кремния) у интегральных схем выпускаемых на рынок, а также расстояний между проводниками на ней. Так, начиная с 2011 года, корпорация Intel начала массовый выпуск микросхем по технологическому процессу с разрешающей способностью всего 22 нм. Уменьшение же размеров элементов, в результате улучшения технологии, ведет к возможности размещения в одной микросхеме более сложных CPU, с кэш-памятью 1,2 и даже 3 уровня, а также увеличения тактовой частоты, при том же энергопотреблении. В конечном счете, все это ведет к увеличению производительности процессора.

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

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

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

Первый микропроцессор, на основе которого началось массовое производство компьютеров IBM PC типа i8086/88, был выпущен фирмой Intel в 1978 г. Он явился родоначальником знаменитого семейства процессоров i80Х86. Тактовая частота процессора i8086 была всего 5 МГц, и изготовлен он был по технологическому процессу с разрешением 5 мкм (имел на подложке 29 тысяч транзисторов). Последние же процессоры этого семейства имели тактовую частоту до 4 ГГц и содержат на подложке несколько сот миллионов транзисторов.

(Заметим, что самые последние разработки микропроцессоров корпорации Intel, с новой микроархитектурой Sandy Bridge, использующие систему команд процессоров семейства i80X86, включают в себя уже более миллиарда транзисторов).

Второй, и главной конкурирующей с корпорацией Intel, фирмой по выпуску микропроцессоров является фирма AMD (Advanced Micro Devices). Начала она с копирования микропроцессоров i80386, купив лицензию у фирмы Intel. Затем их пути разошлись и сейчас фирма AMD выпускает на рынок свои собственные процессоры типа Athlon, Athlon XP, и Phenom, хотя они во многом продолжают линию семейства Х86 и используют ту же систему команд. В настоящее время и фирма Intel и фирма AMD разработали и выпустили на рынок полностью 64 разрядные микропроцессоры. У Intel – это МП семейства Itanium, а у AMD - Athlon 64. Однако они большей частью используются в серверах.

Можно упомянуть также 64 разрядные микропроцессоры Power PC фирмы IBM и микропроцессоры Alpha фирмы DEC (Digital Equipment Corporation), которые также используются, как правило, в серверах, мейнфреймах и суперкомпьютерах.

Вы чаще всего будете сталкиваться с персональными компьютерами, в которых в основном используются МП семейства Х86 и совместимыми с ними. Поэтому, мы в качестве примера процессора, рассмотрим структуру и функционирование микропроцессора i8086, работа которого моделируется в реальном режиме функционирования и во всех более поздних разработках микропроцессоров семейств i80Х86, Pentium и Intel Core 2, 3, 5 и 7.

Структурная схема МП i8086 приведена на рис.IX.3. Ее удобно представлять в виде трех основных блоков:

- блока формирования адресов и очереди команд;

- блока обработки;

- блока управления и синхронизации.

 

1. Блок формирования адресов и очереди команд.

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

Адресное пространство, т.е. максимально возможный объем оперативной памяти, с которой может работать (может адресовать) процессор i8086 равно 1 Мбайт. Однако, по умолчанию, программа может обращаться только к четырем областям (сегментам) оперативной памяти, каждая объемом по 64 Кбайт. Они называются текущими сегментами памяти (см. рисунок IX.1). Эти четыре сегмента носят название:

- кодовый сегмент (Code Segment);

- сегмент данных (Data Segment);

- сегмент стека (Stack Segment);

- экстра сегмент (Extra Segment).

Рис.IX.1 Схема размещения текущих сегментов памяти в адресном

пространстве процессора.

 

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

Заметим, что при дальнейшем развитии микропроцессоров семейства X86, начиная с процессора i80386, определены еще два дополнительных сегмента данных – FSи GS, которые удобно использовать для размещения дополнительных данных в целом ряде случаев.

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

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

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

а) программы могут быть размещены только в кодовом сегменте CS;

б) стековые данные располагаются только в сегменте стека SS;

в) данные могут размещаться в любом сегменте, однако, если тип

сегмента в команде не указан, то по умолчанию, данные

выбираются из сегмента основного сегмента данных DS;

г) при выполнении строковых команд одна из строк всегдаразмещается в

дополнительном сегменте данных (ES), а именно:

- строка назначения при пересылке строк (команда MOVS);

- строка сканирования (при исполнении команды SCAS);

- строка сохранения (при исполнении команды STOS);

- одна из строк сравнения (при исполнении команды CMPS).

При этом кодом смещения в кодовом сегменте, при формировании адреса очередной выполняемой команды, является содержимое регистра (указателя) команд IP (Instruction Pointer). Кодами (адресами) смещения при реализации операций с цепочками (строками) являются: содержимое регистра SI, для адреса цепочки-источника, и регистра DI, для адреса цепочки назначения (или сканирования). Кодом смещения в сегменте стека, при обращении к стеку, фактически является содержимое регистра указателя стека SP (Stack Pointer). А кодом смещения в сегментах данных, основного и дополнительного, является так называемый эффективный адрес EA(Effective Address). Эффективный адрес EA, в общем случае, формируется как сумма трех составляющих: содержимого базового регистра общего назначения BX (Base Register) или BP (Base Pointer), содержимого одного из индексных регистров SI (Source Index) или DI(Destination Index), а также некоторой константы, которую называют смещением в команде. Причем, некоторые из этих составляющих, могут отсутствовать. Следует при этом отметить, что если при формировании эффективного адреса вместо базового регистра BX использовать базовый регистр BP, то автоматически этот эффективный адрес используется как смещение в стековом сегменте SS, а не в сегменте данных DS. Следовательно, в этом случае, принцип стека LIFO (Last In, First Out – последним пришел, первым вышел) игнорируется, и стековый сегмент рассматривается как ОЗУ с произвольной выборкой.

Формирование же физического адреса,который выдается процессором на адресную шину, и который для возможности адресации 1 Мбайт оперативной памяти должен быть 20 разрядным, осуществляется путем специального суммирования кода сегментного регистра, сдвинутого на 4 двоичных разряда влево, с соответствующим кодом смещения. Следовательно, сегменты могут быть размещены в адресном пространстве с дискретностью в 16 байт. (Заметим, что данный физический адрес называется линейным, поскольку имеется линейная зависимость между адресным кодом и месторасположением адресуемой ячейки памяти).

Принцип формирования линейного физического адреса из логического, для процессоров семейства Х86, иллюстрирован на рис.IX. 2.

Рис IX.2 Формирование физического адреса из логического в

процессоре i8086, а также в реальном режиме работы всех

более старших моделей процессоров семейства Х86.

 

Использование принципа сегментации адресного пространства дает возможность обращаться к любой ячейке адресного пространства размером 1 Мбайт, используя внутри процессора только 16 разрядные операнды. Реализация формирования линейного физического адреса, т.е. адреса, выдаваемого на адресную шину процессора, осуществляется адресным сумматором ∑, выход которого связан с объединенной шиной адреса/данных (AD19…AD0).

 

Рис.IX.3 Структурная схема микропроцессора i8086

 

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

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

Выбранные из оперативной памяти и подлежащие выполнению команды программы, вводятся через объединенную шину адреса/данных и побайтно записываются в регистры очереди команд. Совокупность регистров очереди команд является некоторой буферной памятью между ОЗУ и процессором. Длина очереди команд составляет 6 байт, что соответствует максимально длинному формату команды. Шинный интерфейс инициирует выборку последующих байт команды автоматически, как только в очереди освободятся два байта. Осуществляется это в то время, когда в блоке обработки осуществляется внутренний процесс обработки данных.

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

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

- шины адреса (ША или AB – Address Bus);

- шины данных (ШД или DB – Data Bus);

- шины управления (ШУ или CB – Control Bus).

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

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

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

В рассматриваемом процессоре i8086 шина адресов и шина данных является совмещенной (мультиплексированной). Демультиплексирование, т.е. разделение адресов и данных вне процессора осуществляется следующим образом (см. рис.IX.4).

При выдаче 20 разрядного физического (линейного) адреса на адресную шину процессора, он поступает на внешний 21 разрядный регистр RG, на 21-й вход которого поступает специальный бит разрешения старшего байта BHE (Byte High Enable).

 

Рис.IX.4 Схема демультиплексирования шины адресов и данных

микропроцессора i8086

 

Для уяснения назначения бита (сигнала) BHE рассмотрим принцип адресации и обмена данными процессора с основной памятью компьютера. Обмен информацией между процессором и памятью может осуществляться байтами, словами а, в старших моделях процессоров семейства Х86, двойными словами и даже квадрословами (словами размером 8 байт). Выборка всех этих единиц информации осуществляется всегда адресацией их младших байтов с указанием размерности выбираемой единицы. В процессорах i8086 обмен информацией предусмотрен только байтами или словами. В то же время сама основная память организована таким образом, что логически представляет собой линейную последовательность байт (см. рис.IX.5а). Два соседних байта образует слово, причем младший байт слова имеет меньший адрес, а старший байт – больший. Адресом слова считается адрес его младшего байта. Таким образом, 20 – битовый адрес может рассматриваться и как адрес байта и как адрес слова.

Рис. IX.5 Организация памяти в системе с микропроцессором i8086

 

Физически же при использовании МП i8086 память компьютера организуется в виде последовательности слов (рис.IX.5б). При этом, при выборке, ненужные байты блокируются сигналами BHE# и A0.

Полная информация, необходимая для формирования физического адреса, как это было уже сказано выше, содержится в 4 байтном адресном объекте «сегмент:смещение», который называется логическим или виртуальным адресом, и содержит двухбайтный код, содержащийся в сегментном регистре, и двухбайтный код внутрисегментного смещения. Таким образом, для запоминания полного адреса требуется два слова памяти, причем слово с меньшим адресом всегда содержит смещение в сегменте, а слово с большим адресом – код, содержащийся в сегментном регистре.

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

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

Заметим, что в старших моделях МП семейства Х86, где используется 32 разрядная адресация, для возможности и удобства обращения к любому байту, адресуемого 4 байтного слова, младшие разряды адреса A1 и A0 декодируются в самом процессоре. Поэтому, в этом случае, на адресную шину выдаются 30 старших разрядов адреса A31…A2 и четыре управляющих сигнала, получаемых после декодирования адресных битов A1 и A0, а именно: BE0#, BE1# , BE2# и BE3#. При этом:

BE0# - адресует байт D7…D0;

BE1# - адресует байт D15…D8;

BE2# - адресует байт D23…D16;

BE3# - адресует байт D31…D24.

При использовании процессоров i8086, 20 разрядов адресного кода и сигнал BHE записываются в регистр RG по положительному фронту сигнала ALE (Address Latch Enable) и хранятся там на все время машинного цикла обмена информации с оперативной памятью (см. рис.IX.4). Выходы регистра RG соединены с системной шиной адреса, к которой подключены адресные входы ОЗУ и периферийных устройств.

Параллельно, младшие 16 разрядов подаются на входы шинного формирователя BD (Bus Driver). Но, во время выдачи адресного кода входы шинного формирователя закрыты высоким уровнем (единичным состоянием) сигнала DEN (Date Enable), вследствие чего адресный код на шину данных не проходит.

После выдачи кода адреса и фиксирования его в регистре адреса RG, на объединенную шину адреса/данных процессор выдает 16 разрядное слово данных. Это слово передается на системную шину данных через шинный формирователь (двусторонний усилитель мощности) BD по низкому уровню сигнала DEN. При этом, данные могут передаваться не только от процессора к ОЗУ, но и приниматься процессором от ОЗУ. Поэтому процессор, в зависимости от того происходит ли цикл записи информации в память, или цикл ее считывания из памяти, меняет направление передачи информации в BD путем генерирования управляющего сигнала DT/R# (Data Transmit/Receive). Во все время передачи данных входы регистра адреса RG закрыты.

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

1. Выборка очередной команды из оперативной памяти, где она размещена, и передача ее в регистры очереди команд.

2. Декодирование команды, т.е. определение того, какие действия должен осуществить процессор для ее выполнения.

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

4. Осуществить требуемую операцию.

5. Переслать результат операции по адресу первого операнда для дальнейшего хранения.

 

2. Блок обработки данных.

Сама обработка данных по алгоритмам пользователя или ОС осуществляется в блоке обработки данных, который состоит из арифметико-логического устройства ALU (Arithmetic-Logic Unit), регистра флагов Flags, 7 регистров общего назначения (AX, BX, CX, DX, BP, SI, DI) и регистра временного хранения информации, куда передается один из операндов обработки. Из них регистры AX, BX, CX, DX могут адресоваться не только как 16 разрядные регистры, но и раздельно, т.е. как 8 разрядные регистры AH и AL, BH и BL, CH и CL, DH и DL. При этом регистры H (High) образуют старшие байты соответствующих 16 разрядных регистров, а регистры L (Low) – их младшие байты. Однако каждый регистр общего назначения, кроме их использования в большинстве операций записи и считывания, имеют и ряд специфических применений, в которых использоваться могут только они.

Так, по умолчанию, множимое, при операциях умножения, и делимое, при операциях деления, размещаются только в регистре AX (или AL, при однобайтовом умножении и делении). Результат умножения автоматически фиксируется в регистре AX (при однобайтовом умножении), либо в регистрах DX (старшие байты) и AX (младшие байты) при двухбайтном умножении. При операции деления частное размещается в регистре AL, а остаток в регистре AH (при байтовом делении) и, соответственно, в регистрах AX и DX при двухбайтовом делении. (Напомним, что в центральном процессоре реализуется только целочисленное умножение и деление). Кроме того, регистр AX(AL) всегда является источником или получателем данных при операциях обмена информацией с периферийными устройствами, а также при операциях загрузки (сохранения) или сканирования элементов цепочечных (строковых) данных.

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

Регистр-счетчик CX (Counter register) используется по умолчанию при выполнении целого ряда команд:

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

- при операциях со строками (цепочками), в него заносится число элементов строки, т.е. длина строки;

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

Регистр DX (Data register) кроме своего участия в описанных выше операциях умножения и деления, используется для косвенной адресации периферийных устройств, если их число превышает 256.

Регистр BP (Base Pointer), используемый как базовый при формировании эффективного адреса, позволяет адресовать ячейки памяти стековой области как обычной области данных, а не последовательно через указатель стека, используя принцип LIFO (Last In, First Out).

Регистры SI (Source Index) и DI (Destination Index) используются для косвенной адресации при исполнении таких строковых команд, как LOADS (Load String) – загрузить строку, SCAS (Scaning String) – сканировать строку, STOS (Storage String) – сохранить строку, MOVS (Move String) – переслать строку, CMPS (Compare String) – сравнить строки. При выполнении этих строковых операций, регистры SI и DI автоматически инкрементируются (при флаге DF=0) или декрементируются (при флаге DF=1). Это позволяет, при использовании префиксов типа REP, выполнять соответствующую строковую команду до тех пор, пока заданное заранее содержимое счетчика CX не сравняется с нулем или не выполнится некоторое заданное условие. Кроме того, эти регистры используются для организации так называемой базово-индексной адресации, когда эффективный адрес EA формируется как сумма содержимого индексного (SI или DI) регистра с содержимым базового регистра (BX или BP) с добавлением в ряде случаев некоторой константы – смещения в команде. Заметим, что в старших моделях МП семейства Х86, которые используются в современных персональных компьютерах, при формировании эффективных адресов, как в качестве базовых, так и в качестве индексных могут быть использованы практически все регистры общего назначения.

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

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

Рассмотрим назначение отдельных флагов регистра Flags подробнее.

 

Флаги состояния.

CF(Carry Flag) – флаг переноса. Устанавливается аппаратно при возникновении переноса из старшего разряда ALU при осуществлении арифметических и сдвиговых операций. Кроме того, флаг CF может устанавливаться и сбрасываться программно. Состояние флага CF используется процессором при осуществлении арифметических операций для определения переполнения разрядной сетки, при действиях с целыми беззнаковыми числами, или переноса и заема, при операциях с многоразрядными числами, разрядность которых превышает разрядную сетку сумматора ALU. Кроме того, флаг CF используется при выполнении сдвиговых операций, а также при выполнении операций условного перехода.

PF (Parity Flag) – флаг паритета. Устанавливается аппаратно при четном числе единиц в коде младшего байта результата операции. Процессором флаг PF используется:

- при проверке работоспособности памяти компьютера с помощью диагностических тестов;

- для определения ошибок при передаче данных;

- при выполнении операций условного перехода.

AX(Auxiliary Flag) – флаг дополнительного переноса. Устанавливается аппаратно при наличии переноса из третьего в четвертый бит младшего байта результата, при осуществлении арифметических операций (т.е. при переносе из первой во вторую тетраду этого байта). Процессором этот флаг используется при осуществлении арифметических операций над двоично-десятичными числами, как признак необходимости коррекции результата.

ZF (Zero Flag) – флаг нулевого результата. Устанавливается аппаратно при равенстве нулю результата выполнения операции. Процессором используется при исполнении команд условных переходов.

SF(Sign Flag) – флаг знака. Устанавливается аппаратно при появлении 1 в старшем разряде результата выполнения операции и, следовательно, характеризует знак результата при арифметических операциях с целыми числами со знаком и, что результат, при этом, представлен в дополнительном коде. Используется процессором при исполнении команд условных переходов по знаку результата.

OF (Overflow Flag) – флаг переполнения. Устанавливается в случае переполнения разрядной сетки при осуществлении арифметических операций над числами со знаком, поскольку, в этом случае, установление в 1 флага CF не может служить признаком переполнения разрядной сетки. Кроме этого, он устанавливается при переполнении в случаях операций умножения. Флаг переполнения OF устанавливается аппаратно и является логической функцией неравнозначности двух переносов: переноса встарший разряд результата (разряд знака), и переноса из знакового разряда. Процессором этот флаг используется обычно для вызова процедур обработки прерывания по переполнению с помощью команды INTO (Interrupt on Overflow).

 

Флаги управления.

IF (Interrupt Flag) – флаг разрешения прерывания. Флаг IF устанавливается и сбрасывается программно самим пользователем. Установкой этого флага (IF=1) пользователь разрешает процессору реагировать на поступление запросов маскируемых прерываний, поступающих от внешних источников по входу INTR. На другие типы прерываний состояние этого флага не влияет. Установка этого флага осуществляется командой STI (Set Interrupt), а сброс – командой CLI (Clear Interrupt).

DF (Direction Flag) – флаг направления. Применяется этот флаг при использовании команд обработки строк, элементы которых адресуются с помощью индексных регистров SI и DI. При DF=0 индексные регистры инкрементируются после каждого выполнения строковой команды, и обработка строк происходит по элементам (байтам или словам) от младших адресов к старшим. При DF=1 индексные регистры после каждого выполнения строковой команды декрементируются, и обработка строк происходит от старших адресов к младшим. Флаг DF устанавливается и сбрасывается программно с помощью команд STD (Set Direction) и CLD (Clear Direction), соответственно. Автоматическое инкрементирование и декрементирование содержимого регистров SI и DI при выполнении строковых команд позволяет существенно увеличить быстродействие этих операций и, следовательно, и производительность работы процессора при их использовании.

TF (Trace Flag) – флаг трассировки. При TF =1 процессор переходит в покомандный (пошаговый) режим работы, применяемый при отладке программ. После выполнения каждой команды автоматически генерируется сигнал внутреннего прерывания, процедура обработки которого обычно обеспечивает индикацию содержимого всех внутренних регистров процессора. Управление этим флагом осуществляется опосредованно, путем пересылки содержимого регистра флагов через стек в какой-либо регистр общего назначения, установки требуемого значения восьмого бита и обратной пересылки сформированного кода в регистр флагов.

Отметим, что при дальнейшем развитии МП семейства Х86, в более старших моделях, например, процессорах Pentium, число используемых флагов, в регистре Flags увеличивалось, и в последних моделях достигало 18.

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

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

 

3. Блок управления и синхронизации.

Блок управления и синхронизации (БУС) генерирует управляющие сигналы, которые определяют работу, как самого процессора, так и всего компьютера в целом. Эти управляющие сигналы представляют две группы сигналов: внутренние (УС), поступающие на элементы и узлы самого процессора с микропрограммного устройства управления БУС, и внешние, выдаваемые на внешние, по отношению к процессору, устройства (BHE, ALE, DEN#, DT/R#, WR#, RD, HLDA, INTA#). Напоминаем, что символ # обозначает низкий активный уровень данного сигнала (лог.0). Внешние выходные сигналы служат для управления шинами, устройствами ввода/вывода, оперативной и внешней памятью, коммутационными устройствами и т.п.

Управляющие выходные сигналы БУС вырабатывает под воздействием целого ряда входных сигналов, таких как:

- кода операции, поступающего на него из текущей команды;

- состояния битов регистра флагов после выполнения предыдущей

команды;

- внешних входных сигналов (RESET, CLK, READY, TEST#, HOLD,

INTR).

Внешние входные сигналы процессора имеют следующее назначение:

CLK (Clock) – вход сигналов синхронизации, которые определяют тактовую частоту процессора;

RESET – сигнал установки процессора в исходное состояние (сброс), активный уровень сигнала соответствует уровню лог.1;

TEST# - сигнал с активным уровнем лог.0, разрешающий выполнение программы, остановленной командой WAIT;

READY – сигнал с активным уровнем лог.1, подтверждающий завершение обмена данными с адресуемой ячейкой памяти или портом ввода/вывода (сигнал готовности). Низкий уровень сигнала (лог.0) вызывает появление тактов ожидания (Wait States) процессора;

INTR (Interrupt)- сигнал с активным уровнем лог.1, являющийся маскируемым запросом прерывания от любого периферийного устройства;

NMI (Non masked Interrupt) – сигнал с активным уровнем лог.1, являющийся немаскируемым запросом прерывания от внешних устройств;

HOLD - сигнал с активным уровнем лог.1, являющийся запросом прямого доступа к оперативной памяти;

Внешние выходные сигналы имеют следующее назначение:

RD# (Read) – сигнал с активным уровнем лог.0, характеризующий цикл чтения информации из ОЗУ или периферийных устройств;

WR# (Write) – сигнал с активным уровнем лог.0, характеризующий цикл записи информации в ОЗУ или периферийные устройства;

ALE (Address Latch Enable) –сигнал с активным положительным фронтом, определяющий момент записи кода адреса во внешний буферный регистр, связанный по выходу с системной адресной шиной компьютера;

BHE# (Byte High Enable) – сигнал с активным уровнем лог.0, разрешающий передачу данных по старшей половине канала данных D15…D8;

M/IO# (Memory/Input-Output) – сигнал, определяющий тип внешнего устройства при обмене данными с процессором (лог.0 – периферийное устройство, лог.1 – оперативная память);

DEN (Data Enable) – сигнал с активным уровнем лог.1, отпирающий усилитель (шинный формирователь), связывающий процессор с системной шиной данных компьютера;

DT/R# (Data Transmit/Receive) –сигнал, определяющий направление передачи данных в системе. (Лог.0 – прием, т.е. данные передаются из системной шины данных в процессор; лог.1 – передача, т.е. данные передаются от процессора в системную шину данных);

INTA# (Interrupt Acknowledge) – сигнал с активным уровнем лог.0, подтверждающий прием запроса на прерывание и готовность принять код типа прерывания от контроллера прерывания;

HLDA (Hold Acknowledge) – сигнал с активным уровнем лог.1, подтверждающий прием запроса на прямой доступ к оперативной памяти и разрешающий его реализацию.