Компьютер выполняет хранимую в его памяти программу посредством копирования команд из основной памяти в блок управления (по мере необходимости). Как только команда попадает в блок управления, она декодируется, после чего выполняется. Порядок, в котором команды выбираются из памяти, соответствует порядку их размещения в памяти, за исключением случаев выполнения команды перехода JUMP. Чтобы представить себе общий процесс выполнения команд, необходимо познакомиться с тем, как блок управления функционирует внутри процессора. Этот блок включает два специализированных регистра: счетчик адреса и регистр команд (рис. 1).
Рисунок 1 - Архитектура машины
Счетчик адреса содержит адрес следующей выполняемой команды, т.е. он предназначен для наблюдения за ходом выполнения программы. Регистр команды используется для хранения кода выполняемой команды.
Блок управления работает в режиме постоянного повторения алгоритма, называемого машинным циклом, который состоит из трех этапов: выборки, декодирования и выполнения (рис. 2). На этапе выборки блок управления извлекает из основной памяти ту команду, которая должна выполняться следующей. Блок управления знает, где именно в памяти находится требуемая команда, поскольку ее адрес содержится в счетчике адреса. Блок управления помещает считанную команду в регистр команд, а затем увеличивает значение в счетчике адреса так, чтобы он содержал адрес следующей команды.
Рисунок 2 – Схема машинного цикла
Когда команда поступает в регистр команды, блок управления декодирует ее. Эта процедура включает и разбиение поля операндов на соответствующие составляющие части, исходя из кода операции данной команды.
Затем блок управления выполняет команду посредством активизации соответствующей схемы, предназначенной для выполнения поставленной задачи. Например, если команда представляет собой операцию загрузки данных из основной памяти, блок управления выполняет загрузку требуемых данных; если же команда предусматривает выполнение арифметической операции, то блок управления активизирует соответствующую схему в арифметико-логическом блоке, указывая в качестве входных регистры, заданные в команде.
Когда обработка команды будет завершена, блок управления вновь начинает выполнение алгоритма машинного цикла с первого этапа. Напомним, поскольку в конце предыдущего этапа выборки счетчик адреса был увеличен, он по-прежнему предоставляет блоку управления корректный адрес следующей выполняемой команды.
Особым случаем является команда перехода JUMP. Давайте рассмотрим выполнение команды с кодом В258, которая имеет следующий смысл: "Выполнить переход к команде, сохраняемой по адресу 58, если содержимое регистра 2 идентично содержимому регистра 0". В этом случае этап выполнения в машинном цикле начинается со сравнения содержимого регистров 2 и 0. Если оно различно, то этап выполнения этой команды завершается и начинается выполнение нового машинного цикла. Если же содержимое указанных регистров одинаково, то машина на этом этапе поместит в счетчик адреса значение 58. Теперь на этапе выборки следующего машинного цикла блок управления обнаружит в счетчике адреса значение 58, поэтому следующей будет выполнена команда, расположенная по этому адресу.
Для координации действий, выполняемых на протяжении машинного цикла, необходимо обеспечить синхронизацию работы различных схем машины. С этой Цель лекциию на соответствующие электронные схемы подается импульсный сигнал, который называется сигналом синхронизации. Амплитуда этого сигнала изменяется между уровнями 0 и 1, а различные электронные схемы машины разрабатываются таким образом, чтобы они приводились в действие тем или иным фронтом импульса синхронизирующего сигнала. В результате тактовая частота этот сигнала фактически определяет ту скорость, с которой центральный процессор выполняет свой машинный цикл.
Пример выполнения программы
Давайте проследим за выполнением всех машинных циклов, предусматриваемых программой, текст которой представлен в конце раздела 2.2. Вначале необходимо разместить программу в какой-либо области памяти машины. Например, будем считать, что текст нашей программы занесен в последовательные ячейки памяти, начиная с адреса А0 (шестнадцатеричное представление). На рис. 3 представлена таблица, отражающая содержимое этой области памяти. Если записать программу таким способом, можно заставить машину выполнить нашу программу, поместив адрес ее первой команды (А0) в счетчик адреса и запустив машину в работу.
Рисунок 3 – Программа сложения чисел
Блок управления начинает с извлечения из основной памяти команды, записанной по адресу А0, и помещает ее (156С) в регистр команды, выполнив тем самым этап выборки первого машинного цикла. Обратите внимание, что длина команды составляет шестнадцать разрядов (2 байта). Поэтому выбираемая команда должна занимать две ячейки памяти с адресами А0 и А1. Конструкция блока управления разработана с учетом этой особенности, поэтому он выбирает содержимое обеих ячеек и помещает данные в регистр команды, размер которого составляет 16 бит. Затем блок управления добавляет число 2 к значению в счетчике адреса, чтобы содержимое этого регистра представляло собой адрес следующей команды. По завершении этапа выборки первого машинного цикла в счетчике адреса и регистре команд будут содержаться следующие данные:
Счетчик адреса: А2
Регистр команд: 156С
На следующем этапе блок управления анализирует команду, помещенную в регистр команд, и приходит к заключению, что это команда загрузки в регистр 5 содержимого ячейки памяти с адресом 6С. Загрузка осуществляется на этапе выполнения данного машинного цикла, после чего блок управления начнет новый машинный цикл.
Новый цикл начинается с выборки команды 166D из ячеек памяти с адресами А2 и A3. Блок управления помещает эту команду в регистр команд и увеличивает значение счетчика адреса, после чего оно становится равным А4. После завершения очередного этапа выборки в счетчике адреса и регистре команд будут следующие данные:
Счетчик адреса: А4
Регистр команд: 166D
Блок управления декодирует команду 166D и определяет, что в регистр 6 необходимо загрузить содержимое ячейки памяти с адресом 6D, после чего выполняет команду, и в регистр 6 действительно загружается требуемое значение.
Поскольку в данный момент счетчик адреса имеет значение А4, блок управления считывает следующую команду, которая начинается с указанного адреса. В результате в регистр команд помещается значение 5056, а счетчик адреса получает новое значение А6. Блок управления декодирует содержимое очередной команды и выполняет ее посредством активизации электронной схемы сложения чисел в дополнительном двоичном коде, указав этой схеме использовать как входные регистры 5 и 6.
На этапе выполнения данной команды арифметико-логический блок выполняет сложение и записывает результат в регистр 0 (как было указано блоком управления), после чего сообщает блоку управления о том, что требуемые действия выполнены. После этого блок управления начинает следующий машинный цикл. И вновь, используя текущее значение в счетчике адреса, он выбирает следующую команду из двух смежных ячеек памяти с адресами А6 и А7 (теперь это команда 306Е) и модифицирует значение счетчика адреса, установив его равным А8. Затем считанная из памяти команда декодируется и выполняется. В результате сумма двух чисел помещается в ячейку памяти с адресом 6Е.
Следующая выбираемая команда расположена в памяти, начиная с адреса А8. После ее извлечения значение счетчика адреса увеличивается до АА. Содержимое регистра команд равно С000 и расшифровывается как команда останова. В результате работа машины останавливается на этапе выполнения, и это означает, что выполнение нашей программы завершено.
В заключение скажем, что выполнение хранимой в памяти программы не отличается от того процесса, к которому мог бы прибегнуть любой человек, перед которым поставлена задача четко следовать определенному списку инструкций. Обычно человек отмечает в списке выполненные им инструкции галочками — машина же для этого использует счетчик адреса. Определив, какая из инструкций должна выполняться следующей, человек знакомится с ней и принимает решение, что именно нужно сделать. Затем он выполняет требуемые действия и переходит к следующей инструкции. Аналогичным образом поступает и машина — она выполняет очередную команду, помещенную в регистре команд, и запускает следующий цикл выборки.