Читать «Архитектура компьютера» онлайн - страница 59

Эндрю Таненбаум

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

Рис. 2.2. Тракт данных обычной фон-неймановской машины

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

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

Центральный процессор выполняет каждую команду за несколько шагов. Он делает следующее:

1. Вызывает следующую команду из памяти и переносит ее в регистр команд.

2. Меняет положение счетчика команд, который после этого указывает на следующую команду1.

3. Определяет тип вызванной команды.

4. Если команда использует слово из памяти, определяет, где находится это слово.

5. Переносит слово, если это необходимо, в регистр центрального процессора .

6. Выпоси 1яет команду.

7. Переходит к 0агу 1, чтобы ^ачать выпоё^е^ие сёедующей комавды.

Такая последовательность 0агов (выборка — декодирование — иcпoё^e^иe) явёяется основой работы всех компьютеров.

Описание работы центрального процессора можго представить в виде программы. В .■|истинге 2.1 приведе^а такая программа-интерпретатор ^а языке Java. В описываемом компьютере есть два регистра: счетчик комавд (PC) с адресом сёедующей комавды и аккумуёятор (AC), в котором хра^ятся резуёьтаты арифметических операций. Кроме того, имеются в^утре^^ие регистры, в которых хранится текущая комавда (instr), тип текущей комавды (instr_type), адрес опе-равда комавды (data_loc) и сам операвд (data). Каждая комавда содержит оди^ адрес ячейки памяти. В ячейке памяти хранится операвд — ^апример, фрагмент данных, который ^уж^о добавить в аккумуёятор.

Листинг 2.1. Интерпретатор для простого компьютера (на языке Java)

public class Interp{

static int PC; // PC содержит адрес следующей команды

static int AC; // Аккумулятор, регистр для арифметики

static int instr; // Регистр для текущей команды

static int instr_type; // Тип команды (код операции)

static int data_loc; // Адрес данных или -1, если его нет

static int data; // Текущий операнд

static boolean run_bit = true; // Бит, который можно сбросить,

// чтобы остановить машину

public static void interpret(int memory[], int starting_address{ // Эта процедура интепретирует программы для простой машины, // которая содержит команды только с одним операндом из // памяти. Машина имеет регистр АС (аккумулятор). Он // используется для арифметических действий - например, // команда ADD суммирует число из памяти с АС. Интерпретатор // работает до тех пор, пока не будет выполнена команда // HALT, вследствие чего бит run_bit поменяет значение на // false. Машина состоит из блока памяти, счетчика команд, бита // run bit и аккумулятора AC. Входные параметры представляют собой // копию содержимого памяти и начальный адрес.