Вычислительная машина с произвольной выборкой
Для моделирования компьютерной среды Ф. Лейтольд отталкивался от вычислительной машины с произвольной выборкой (Random Access Machine, RAM), определение которой представлено ниже.
Вычислительная машина с произвольной выборкой состоит из следующих компонентов:
- Входная лента, представляющая собой последовательность ячеек, содержащих целые числа и доступных только для последовательного чтения - после чтения ячейки считывающая головка автоматически перемещается вправо
- Выходная лента, представляющая собой последовательность ячеек, доступных только для последовательной записи, по умолчанию эти ячейки пусты
- Программа - последовательность (возможно индексированная, т.е. с возможностью указать адрес некоторых или любых инструкций) инструкций, не находящаяся в памяти и, соответственно, неизменяемая, по умолчанию выполнение программы начинается с первой инструкции (можно ввести счетчик инструкций, указывающий на следующую к выполнению инструкцию, в этом случае по умолчанию счетчик указывает на первую инструкцию)
- Память - неограниченная последовательность регистров r0, r1, …, ri, …, способных хранить целые числа, по умолчанию значения регистров пусты, нулевой регистр r0 используется для вычислений и часто называется аккумулятором, доступ к регистрам производится непосредственно по их индексам, откуда и происходит название машины.
Как следует из определения, после того как ячейка была прочитана или записана, она не может быть прочитана или записана еще раз. Неизменяемость программы означает в том числе и то, что программа не может менять себя в процессе выполнения. Фактический набор используемых в программе инструкций большого значения не имеет, поскольку вычислительная сложность алгоритма реализованного в разных (разумных) наборах инструкций асимптотически будет совпадать. Один из возможных вариантов инструкций для вычислительной машины с произвольной выборкой представлен в таблице:
Инструкция | Параметр | Описание |
LOAD | Операнд | Загружает в память значение, определяемое операндом |
STORE | Операнд | Копирует значение аккумулятора в ячейку памяти (регистр) определяемый операндом |
ADD | Операнд | Добавляет к аккумулятору значение, определяемое операндом |
SUB | Операнд | Вычитает из аккумулятора значение, определяемое операндом |
MULT | Операнд | Умножает аккумулятор на значение, определяемое операндом |
DIV | Операнд | Делит аккумулятор на значение, определяемое операндом |
READ | Операнд | Считывает значение с входящей ленты в регистр, определяемый операндом |
WRITE | Операнд | Записывает на выходную ленту значение, определяемое операндом |
JUMP | Метка | Присваивает счетчику инструкций значение метки |
JGTZ | Метка | Присваивает счетчику инструкций значение метки, если аккумулятор содержит положительное число |
JZERO | Метка | Присваивает счетчику инструкций значение метки, если аккумулятор равен нулю |
HALT | Завершает работу машины |
Допускается три вида операндов:
- i - обозначает собственно значение целого числа i
- [i] - для неотрицательных i обозначает значение регистра ri
- [[i]] - косвенная адресация, обозначает значение регистра rj, где j - значение регистра ri. Если j<0, машина завершает работу
По умолчанию (см. также определение) значение всех регистров равно нулю, счетчик инструкций указывает на первую инструкцию программы и выходная лента пуста. После выполнения k-й инструкции счетчик либо автоматически увеличивается на единицу и указывает на (k+1)-ю инструкцию, либо, если была выполнена инструкция JUMP или выполнены условия инструкций JGTZ или JZERO, принимает значение метки, либо, если была выполнена инструкция HALT, машина прекращает свою работу.
Дата добавления: 2015-06-12; просмотров: 498;