Равнодоступная адресная машина (РАМ) и некоторые другие подходы.
Поможем в ✍️ написании учебной работы
Поможем с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой

 

Машина Тьюринга интуитивно более похожа на современный компьютер, чем НАМ. Но в ней нельзя за один шаг добраться до фиксированной ячейки. В то время как наше интуитивное представление об автоматических вычислениях, созданное в основном знакомством с компьютерами, предполагает такую возможность.

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

Вычисления производятся в сумматоре. РАМ имеет также неограниченный объем памяти в виде последовательности перенумерованных ячеек.

Работой лент, сумматора, головок управляет программа, состоящая из перенумерованной последовательности команд. Наличие счетчика команд позволяет расставлять метки в программе.

Программа для РАМ не записывается в память, поэтому предполагается, что программа не изменяет сама себя.

Все вычисления происходят в первом регистре, называемом сумматором.

Команда состоит из кода операции и адреса. Это известно всем, кто программировал на языке ассемблера. Операнд команды может задаваться тремя способами.

1.  В виде целого числа (литерала) i, что соответствует команде присвоения в программе. Это записывается как =i .

2. Либо в адресе команды содержится адрес регистра, в котором лежит значение операнда. Здесь  i – содержимое регистра,

3. Либо в адресе команды содержится адрес регистра (указатель), в котором содержится адрес регистра, содержащего значение операнда. Здесь *I означает косвенную адресацию. В случае отрицательного адреса программа останавливается.

Счетчик команд вначале установлен на первую команду в программе P, выходная лента пустая, содержимое c(i)=0 для любого регистра i. После выполнения k-й команды  P счетчик команд переходит на (k+1)-ю команду, если это не была команда условного перехода. (См. пример ниже).

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

1. v(=i)=i.

2. v(i)=c(i).

3. v(*i)=c(c(i)).

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

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

В [1] исследуется РАМ, имеющая 12 типов команд. Приведем ее в качестве примера. Это команды начала работы и останова, команды чтения и письма, четыре арифметические операции, команда хранения, команда перехода на метку и две команды условного перехода в зависимости от содержимого сумматора.

Команда Действие
LOAD a c(0)←v(a)
STORE(i), STORE(*i) c(i) ← c(0), c(c(i)) ← c(0)
ADD(a) c(0) ←c(0)+v(a)
SUB(a) c(0) ←c(0)-v(a)
MULT(a) c(0) ←c(0)v(a)
DIV(a) c(0) ←[c(0)/v(a)]
READ(i), READ(*i) c(i) ←  очередной входной символ, c(c(i)) ← очередной входной символ. Головка входной ленты сдвигается на клетку вправо.
WRITE(a) v(a) печатается в клетке выходной ленты, которую на данный момент обозревает головка выходной ленты. Головка выходной ленты сдвигается на клетку вправо.
JUMP(b) Счетчик команд устанавливается на команду с меткой b.
JGTZ(b) Если c(0)>0, то счетчик команд устанавливается на команду с меткой b, в противном случае – на следующую команду.
JZERO(b) Если c(0)=0, то счетчик команд устанавливается на команду с меткой b, в противном случае – на следующую команду.
HALT Работа программы прекращается.

 

Создание РАМ для приведенных выше примеров в разделах, описывающих НАМ и МТ, выглядит очень просто. В качестве менее очевидных примеров приведем следующие.

Пример 1. Написать программу для РАМ, которая для натуральных чисел вычисляет функцию nn.

Пример 2. Дан алфавит {1,2}. Написать программу для РАМ, которая распознает слова в этом алфавите, содержащие одинаковое число вхождений 1 и 2.

Заметим, что программа РАМ не хранится в памяти, поэтому она себя изменять не может.

Равноадресная доступная машина с хранимой программой (РАСП) отличается от РАМ тем, что ее программа хранится в памяти. Каждая команда занимает два регистра памяти, в первом хранится код команды, во втором - адрес.

Во многих источниках при описании алгоритмов используются дальнейшие усложнения этих формальных схем в виде "упрощенных" языков программирования.

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

Дата: 2019-07-30, просмотров: 305.