Выборка и исполнение команды

В начале каждого цикла процессор выбирает из памяти команду. Обычно адрес ячейки, из которой нужно извлечь очередную команду, хранится в про­граммном счетчике (PC), Если не указано иное, после извлечения каждой ко­манды процессор увеличивает значение программного счетчика на единицу. Та­ким образом, команды выполняются в порядке возрастания номеров ячеек па­мяти, в которых они хранятся. Рассмотрим, например, упрощенный компьютер, в котором каждая команда занимает одно 16-битовое слово памяти. Предположим, что значение программного счетчика установлено равным 300. Это значит, что следующая команда, которую должен извлечь процессор, находится в 300-й ячейке. При успешном завершении цикла команды процессор перейдет к извле­чению команд из ячеек 301, 302, 303 и т.д. Однако, как мы вскоре узнаем, эта последовательность может быть изменена.

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

• Процессор — память. Данные передаются из процессора в память или обратно.

• Процессор — устройства ввода-вывода. Данные из процессора поступают на периферийное устройство через устройство ввода-вывода. Возможен и обратный процесс.

• Обработка данных. Процессор выполняет с данными различные арифмети­ческие или логические операции.

• Управление. Команда может задавать изменение последовательности вы­полнения команд. Например, если процессор извлекает из ячейки 149 ко­манду, которая указывает, что следующей по очереди должна быть испол­нена команда из ячейки 182, то процессор устанавливает значение про­граммного счетчика равным 182. Таким образом, в следующем цикле выборки команда извлекается не из ячейки 150, а из ячейки 182.

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

Рассмотрим, например, гипотетическую машину, характеристики которой приведены на рис. 1.3. В процессоре имеется один регистр данных, который на­зывается аккумулятором (accumulator — АС). Команды и данные имеют длину 16 бит. В такой ситуации память удобно организовать в виде 16-битовых ячеек, в каждой из которых помещается одно слово. Формат команды предусматривает выделение 4 бит для кода операции. Таким образом, всего может быть 2 == 16 различных кодов операций (их можно представить одной шестнадцатеричной2 цифрой), а адресовать можно до 21'1 = 4096 (4 К) слов памяти (которые можно представить трехзначным шестнадцатеричным числом).

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



 


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

2. Первые 4 бит (первая шестнадцатеричная цифра) регистра команд указы­вают на то, что нужно загрузить значение в аккумулятор. Остальные 12 бит (три шестнадцатеричные цифры) указывают адрес 940.

3. Из ячейки 301 извлекается следующая команда (5941), после чего значение программного счетчика увеличивается на 1.

4. К содержимому аккумулятора прибавляется содержимое ячейки 941, и ре­зультат снова заносится в аккумулятор.

5. Из ячейки 302 извлекается следующая команда (5941), затем значение про­граммного счетчика увеличивается на 1.

6. Содержимое аккумулятора заносится в ячейку 941.

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