М. В. Ломоносова Факультет вычислительной математики и кибернетики В. Г. Баула Введение в архитектуру ЭВМ и системы программирования Москва 2003 Предисловие Данная книга

Вид материалаКнига

Содержание


3.3. Формальное описание учебной машины
4. Введение в архитектуру ЭВМ 4.1. Адресность ЭВМ
Трёхадресная машина.
Двухадресная машина.
Одноадресная машина.
Безадресная машина.
Подобный материал:
1   2   3   4   5   6   7   8   9   ...   37

3.3. Формальное описание учебной машины


При описании архитектуры учебной ЭВМ на естественном языке многие вопросы остались нераскрытыми. Что, например, будет после выполнения команды из ячейки с адресом 511? Какое значение после нажатия кнопки ПУСК имеют ячейки, расположенные вне введённой программы? Как представляются целые и вещественные числа? Для ответа на почти все такие вопросы мы приведём формальное описание нашей учебной машины. В качестве метаязыка мы будем использовать Турбо-Паскаль, на котором Вы работаете. Другими словами, мы напишем программу, выполнение которой моделирует работу нашей учебной машины, т.е. наша машина, по определению, работает почти так же, как и написанная нами программа на Паскале.

Ниже приведена реализация учебной машины на языке Турбо-Паскаль:


program УМ_3(input, output);

const

N = 511;

type

Address = 0..N;

Tag = (kom, int, fl); {В машинном слове может хранится команда, целое

или вещественное число}

Komanda = packed record

KOP: 0..31;

A1, A2, A3: Address;

end;

Slovo = packed record

case Tag of

kom: (k: Komanda);

int: (i: LongInt)

fl: (f: Single);

end

Memory = array[0..N] of Slovo;

var

Mem: Memory;

S, R1, R2: Slovo; {Регистры АЛУ}

RK: Komanda; {Регистр команд}

RA: Address; {Счётчик адреса}

Om: 0..2; {Регистр w}

Err: Boolean;

begin

Input_Program; {Эта процедура должна вводить текст программы с устройства

ввода в память по кнопке ПУСК}

Om := 0; Err := False; RA := 1; {Начальная установка регистров}

with RK do

repeat {Основной цикл выполнения команд}

RK := Mem[RA].k;

RA := (RA+1) mod (N+1);

case KOP of {Анализ кода операции}

00: { ПЕР }

begin R1 := Mem[A3]; Mem[A1] := R1 end;

01: { СЛВ }

begin

R1 := Mem[A2]; R2 := Mem[A3]; S.f := R1.f + R2.f;

if S.f = 0.0 then OM := 0 else

if S.f < 0.0 then OM := 1 else OM := 2;

Mem[A1] := S; { Err := ? }

end;

09: { БЕЗ }

RA := A2;

24: { МОД }

begin

R1 := Mem[A2]; R2 := Mem[A3];

if R2.i = 0 then Err := True else begin

S.i := R1.i mod R2.i; Mem[A1] := S;

if S.i = 0 then OM := 0 else

if S.i < 0 then OM := 1 else OM := 2;

end

end;

13: { СТОП } ;

{ Реализация остальных кодов операций }

else

Err := True;

end; { case }

until Err or (KOP = 31)

end.


Для хранения машинных слов мы описали тип Slovo, который является записью с вариантами языка Турбо-Паскаль. В такой записи на одном и том же месте памяти могут располагаться команды, длинные (32-битные) целые числа или же 32-битные вещественные числа типа Single. 1

Наша программа ведёт себя почти так же, как учебная машина. Одно из немногих мест, где это поведение расходится, показано в тексте программы, например, при реализации команды сложения вещественных чисел. Программа на Паскале при переполнении (когда результат сложения не помещается в переменную S) производит аварийное завершение программы, а учебная машина просто присваивает регистру Err значение 1. Наше формальное описание отвечает и на вопрос о том, как в учебной машине представляются целые и вещественные числа: точно так же, как в переменных на Паскале. Это представление мы изучим в нашем курсе несколько позже.

Заметим также, что память учебной машины как бы замкнута в кольцо: после выполнения команды из ячейки с адресом 511 (если это не команда перехода) следующая команда будет выполняться из ячейки с адресом ноль. Такая организация памяти типична для многих современных ЭВМ.

4. Введение в архитектуру ЭВМ

4.1. Адресность ЭВМ


Как мы уже упоминали, число адресов в команде называется адресностью ЭВМ. Разнообразие архитектур ЭВМ предполагает, в частности, и различную адресность команд. Рассмотрим схему выполнения команд с различным числом адресов операндов. Будем предполагать, что для хранения кода операции в команде отводится один байт (8 разрядов), а для хранения каждого из адресов – 3 байта (это обеспечивает объём памяти 224 ячеек). Ниже приведены форматы команд для ЭВМ различной адресности и схемы выполнения этих команд для случая бинарных операций (у таких операций два операнда и один результат).
  • Трёхадресная машина.

КОП

A1

A2

A3

= 10 байт

8 разрядов

24 разряда

24 разряда

24 разряда

Схема выполнения команд такой машины нам уже известна:

R1 := ; R2 := ; S := R1  R2; := S; { – операция}
  • Двухадресная машина.

КОП

A1

A2

= 7 байт

8 разрядов

24 разряда

24 разряда

Схема выполнения команд:

R1 := ; R2 := ; S := R1  R2; := S;

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

КОП

A1

= 4 байта

8 разрядов

24 разряда

Схема выполнения команд:

R1 := ; S := S  R1;

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

СЧ A1

Она выполняется по схеме

S :=

и команда записи значения из сумматора в память:

ЗП A1

Она выполняется по схеме

:= S

При выполнении бинарных операций в одноадресной ЭВМ только один второй операнд задаётся в команде явно, а первый операнд и результат задаются неявно – это регистр сумматора.
  • Безадресная машина.

КОП

= 1 байт

8 разрядов

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

ВСТЕК A1

которая выполняется по схеме

R1 := ; ВСТЕК(R1)

и команда чтения из стека

ИЗСТЕКА A1

которая выполняется по схеме

ИЗСТЕКА(R1); := R1

Таким образом, за исключение двух указанных выше одноадресных команд, которые имеют длину 4 байта, все остальные команды являются безадресными, имеют длину 1 байт и выполняются по схеме:

R1 := ИЗСТЕКА; R2 := ИЗСТЕКА; S := R1  R2; ВСТЕК(S)

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

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

Существуют архитектуры ЭВМ, которые различаются не только количеством адресов в команде, но и наличием в команде нескольких кодов операций. Такие ЭВМ называются машинами с очень длинным командным словом (VLIW – very large instruction word). В этих компьютерах, например, указанные команды могут реализовывать оператор присваивания вида z:=k*(x+y) по схеме:

R1 := ; R2 := ; S := R1+R2;

R1 := ; S := S*R1; := S

В компьютерах с такой архитектурой команда содержит два кода операции и четыре адреса аргументов:

КОП1

КОП2

A1

A2

A3

A4

Такие команды могут выполняться, например, по схеме:

R1 := ; R2 := ; S := R1 КОП1 R2;

R1 := ; S := S КОП2 R1; := S