122.50K
Категория: ПрограммированиеПрограммирование

Стековая машина

1.

Стековая машина - это программа, которая имеет
доступ к стеку и двум регистрам
(R1 и R2).
Стековая машина загружает команды из входного
потока в массив команд (одна команда - одна ячейка
массива команд).
Затем начинается исполнение команд из массива
команд.
Ваша задача - написать исполнитель стековой
машины и выполнить несколько программ.
Система команд стековой машины описывается
ниже.

2.

Команда
Выполнение
push число
Занести число в стек
push R1
Занести в стек R1
push R2
Занести в стек R2
pop R1
Извлечь из стека число и занести в R1
pop R2
Извлечь из стека число и занести в R2
add
Извлечь два значения из стека, сложить, результат занести в стек
sub
Извлечь два значения из стека, вычесть, результат занести в стек
mul
Извлечь два значения из стека, перемножить, результат занести в
стек
div
Извлечь два значения из стека, разделить, результат занести в стек
add R1
sub R1
mul R1
div R1
Извлечь значения из стека, прибавить содержимое R1, результат
занести в R1
Извлечь значения из стека, вычесть содержимое R1, результат
занести в R1
Извлечь значения из стека, умножить на содержимое R1, результат
занести в R1
Извлечь значения из стека, разделить на содержимое R1, результат
занести в R1

3.

Команда
add R2
sub R2
mul R2
div R2
cmp
mark метка
Выполнение
Извлечь значения из стека, прибавить содержимое R2, результат
занести в R2
Извлечь значения из стека, вычесть содержимое R2, результат
занести в R2
Извлечь значения из стека, умножить на содержимое R2, результат
занести в R2
Извлечь значения из стека, разделить на содержимое R2, результат
занести в R2
Сравнивает значения R1 и R2. Если R1>R2, то в стек заносится 1, если
R1<R2, то -1, если R1=R2, то 0.
Помечает текущую команду заданной меткой (метка - это
произвольная строка)
call метка
Вызвать программу, помеченную меткой
return
Возврат из программы
if= метка
Перейти на метку, если в вершине стека нуль
if> метка
Перейти на метку, если в вершине стека положительное число
if< метка
Перейти на метку, если в вершине стека отрицательное число
loop метка
Цикл от текущей команды до метки. Количество повторений - в
регистре R2
goto метка
Перейти на команду, помеченную меткой

4.

Команда mark не делает ничего, только
помечает следующую командную ячейку.
Возможно, вы захотите добавить еще какиелибо команды или изменить существующие.
Задача технически достаточно сложная.
Присылайте решения даже в случае, если вы
реализуете её не в полном объёме.
Я умышленно не "разжёвываю" постановку приучайтесь думать самостоятельно.
English     Русский Правила