Skip to content
This repository has been archived by the owner on Aug 20, 2021. It is now read-only.

Latest commit

 

History

History
20 lines (14 loc) · 1.89 KB

vm.md

File metadata and controls

20 lines (14 loc) · 1.89 KB

Общие принципы

Память виртуальной машины состоит из ячеек типа int32 (little endian), нумерующихся с нуля. При загрузке файла с программой его содержимое становится содержимым памяти машины. Загружаемый файл не должен быть пустым, его размер должен быть кратен 4 байтам.

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

Система команд

Будем обозначать значение, лежащее в ячейке a, как *a.

У виртуальной машины есть единственная команда, S val src dest. Ее алгоритм работы следующий:

  • Если *val < 0, не делать ничего.
  • Если src = -1, прочитать символ со стандартного ввода, иначе прочитать **src.
  • Если dest = -1, записать прочитанное значение в стандартный вывод, иначе записать его в **dest.

Эта команда кодируется как последовательно записанные значения val, src, dest.