Последовательность работы ПК при выполнении программы
Программа решения задачи состоит из последовательности команд, которые выполняются друг за другом. Исключения составляют команды передачи управления, изменяющие естественный ход выполнения программы путем передачи управления по указанному в них явному или неявному адресу.
Каждая команда программы начинает исполняться сразу, как только ее адрес (смещение) поступит в регистр микропроцессора Instruction Pointer (IP). Для выполнения любой, даже самой короткой команды в МП типа CISC требуется несколько тактов.
1. Первый такт у всех команд одинаковый — по адресу, поступившему в IP, выполняется считывание кода команды и передача этого кода в блок регистра команд (БРК) микропроцессора. Более подробно последовательность работы машины на этом такте можно описать следующим образом (здесь и далее указываются только основные управляющие сигналы):
l в регистр IP поступает сигнал считывания информации, и считанный код адреса смещения команды (Асмещ) поступит на вход узла формирования адреса в УУ;
l на второй вход этого устройства из МПП поступит считанный из регистра сегмента кода (CS) начальный адрес кодового сегмента;
l в УФА эти коды сложатся и сформируется абсолютный адрес команды по формуле
Аабс = А'сегм · 16 + Асмещ;
l абсолютный адрес по кодовым шинам адреса (КША) поступит в регистр адреса оперативного запоминающего устройства (ОЗУ), и будет подготовлена соответствующая этому адресу ячейка памяти для считывания информации;
l в ОЗУ поступит управляющий импульс считывания, и код команды из ячеек памяти будет передан на кодовые шины данных (КШД). Количество считанных ячеек зависит от длины кода считываемой команды;
l по КШД код команды пройдет на регистр данных ОЗУ и будет записан обратно в ячейки памяти, из которых он считывался (будет регенерирован);
l одновременно по тем же КШД код команды пройдет в УУ и будет записан в БРК.
Второй и последующие такты команды зависят от кода этой команды, и в первую очередь, от кода операции (КОП). Рассмотрим дальнейшую работу ПК применительно к выполнению ассемблерной команды ADD AX, Pole.
2. В соответствии с данной командой на втором такте должен быть расшифрован код операции команды для определения набора управляющих сигналов, необходимых для выполнения команды, из регистра АХ считано первое число, участвующее в операции, и это число помещено в регистр Рег1 АЛУ. Для этого:
l в начале второго такта выполнения команды код операции, соответствующий мнемонике ADD, поступит из БРК на вход дешифратора операций (ДШО) устройства управления, в котором по данному коду будет выбрана одна из шин;
l эта шина является адресной шиной ПЗУ микропрограмм, инициирующей группу ячеек памяти, содержащих сигналы, необходимые для управления выполнением операции сложения. Под действием этих управляющих сигналов в этом же втором такте из БРК будет считан адрес первого числа — АХ, код которого пройдет транзитом через УФА и по КША поступит в МПП;
l в МПП будет подготовлен для работы регистр АХ и из этого регистра будет считано первое число, которое по КШД пройдет в Рег1 АЛУ.
3. На третьем такте выполнения команды ADD AX, Pole из инициированных ячеек ПЗУ микропрограмм будут считаны сигналы, которые выполнят следующие действия:
l считают второй адрес из команды, находящейся в БРК. Символическое имя этого адреса Pole, но в коде машинной команды будет находиться уже двоичный код адреса Асмещ, взятый из таблицы адресов именованных полей памяти (эту таблицу можно видеть в конце листинга программы);
l передадут этот адрес на вход УФА. На второй вход УФА поступит начальный адрес сегмента данных Асегм из регистра DS. В УФА будет сформирован абсолютный адрес второго числа:
Аабс = А'сегм · 16 + Асмещ
(составляющие Абаз и Аинд в команде не использованы);
l адрес Аабс по КША пройдет в ОЗУ, где по этому адресу будет считано второе число;
l по КШД считанное число поступит в Рег2 АЛУ и обратно в ОЗУ для регенерации.
4. На четвертом такте все управляющие сигналы поступят в АЛУ, где:
l число из Рег1 будет передано на один вход сумматора;
l число из Рег2 будет передано на второй вход сумматора;
l в сумматоре числа сложатся и сумма поступит в Рег1 АЛУ.
5. В пятом последнем такте выполнения команды ADD AX, Pole сумма чисел из АЛУ должна быть передана и записана в регистр АХ МПП, а в регистре IP — сформирован адрес смещения следующей команды программы. Для этого:
l из кода команды в БРК будет считан первый адрес — АХ, который транзитом через УФА пройдет по КША в МПП, где инициирует для приема информации регистр АХ;
l из Рег1 АЛУ будет считана сумма чисел, которая по КШД пройдет на вход МПП и будет записана в регистр АХ;
l в регистр IP будет добавлено число 6, равное длине выполненной команды (в нашем случае команда ADD AX, Pole имеет длину 6 байтов);
Поскольку в регистре IP сменился код адреса смещения, ПК приступит к выполнению следующей команды программы.
В случае выполнения команд передачи управления в конце такой команды к содержимому IP добавится не длина выполненной команды, а разность между адресом смещения текущей команды и адресом смещения команды, к которой передано управление (при передаче управления в другой сегмент будет изменено и содержимое регистра CS).