Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
TA1_2.DOC
Скачиваний:
11
Добавлен:
02.11.2018
Размер:
444.42 Кб
Скачать

0.2. Машина с неограниченными регистрами (мнр) [Ктл, c.16]

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

Для любой задачи можно сделать n = 1, где n длина входа (регистра).

0.3. Равнодоступные адресные машины (рам) [Ахо, с.22]

Машина с произвольным доступом к памяти (или равнодоступная адресная машина) моделирует вычислительную машину с одним сумматором, в которой команды программы не могут изменять сами себя.

РАМ состоит из входной ленты, с которой она может только считывать, выходной ленты, на которую она может только записывать, и памяти (рис.1). Входная лента представляет собой последовательность клеток, каждая из которых может содержать целое число (возможно, отрицательное). Всякий раз, когда символ считывается с входной ленты, ее читающая головка сдвигается на одну клетку вправо.

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

Память состоит из последовательности регистров r0 , r1 , …, ri , каждый из которых способен хранить произвольное целое число (r0 сумматор). На число регистров, которые можно использовать, не устанавливают верхней границы в следующих случаях:

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

2) целые числа, участвующие в вычислении, достаточно малы, чтобы их можно было помещать в одну ячейку.

Типы операндов.

Операнд может быть одного из следующих типов:

1) =i  само число i  называется литералом.

2) i  содержимое регистра i, i  0.

3) *i  означает косвенную адресацию, т.е. значением операнда служит содержимое регистра j, где j - целое число, находящееся в регистре i; если j  0, машина останавливается.

Можно определить значение программы P с помощью двух объектов: отображения c из множества целых чисел в множество целых чисел и “счетчика команд”(PC), который определяет очередную выполняемую команду. Функция c есть отображение памяти, а именно c(i) - целое число, содержащееся в регистре i (содержимое регистра i).

Сначала с(i) = 0 для всех i  0, PC 1, выходная лента Y пуста.

После выполнения k-ой команды из P счетчик команд автоматически переходит на k + 1 (т.е. на очередную команду), если к -я команда не была командой перехода или остановки (вида JUMP, HALT, JGTZ или JZERO).

Чтобы описать действие команды, зададим значение v(a) операнда a:

v(=i)=i - значение литерала  сам литерал.

v(i)=c(i)

v(*i)=c(c(i))

Команды.

РАМ работает с 12-ю командами:

1) Load a c(0)  v(a)

2) Store i c(i)  c(0)

Store * i c(c(i))  c(0)

3) Add a c(0)  c(0) + v(a)

4) Sub a c(0)  c(0) - v(a)

5) Mult a справа операнды c(0)  c(0) * v(a)

6) Div a c(0)  [c(0) / v(a)] - целая часть

7) Read i с(i)  очередной входной символ

Read *i с(с(i))  очередной входной символ

8)Write a v(a)  печатается на лентеY, и головка сдвигается вправо

9) Jmp b требуют метку PC  Ib (I-номер)

10) JGTZ b (на команду Nb, if c(0) > 0, то PC=Ib, else PC++

11) JZero b b-некое число ) if c(0)=0  PC=Ib, else PC++

12) Halt остановка

Команды, действию которых не дано определения (например, STORE = i), можно считать эквивалентными команде HALT. Если происходит какая-то ошибка, машина останавливается.

После выполнении любой из первых восьми команд счетчик команд увеличивается на единицу.

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

JUMP, HALT либо JGTZ при содержимом сумматора, большем нуля, либо JZERO при содержимом сумматора, меньшем нуля.

РАМ-программа определяет отображение множества входных лент в множество выходных лент.

P РАМ : {множество входных лент}  {множество выходных лент}

отображение

Так как на некоторых входных лентах программа может не останавливаться, это отображение является частичным. Это отображение можно интерпретировать в виде функции и в виде языка.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]