1.11.2. ВЫХОДНОЙ ЯЗЫК Результатом работы компилятора является целевая программа в "машинном коде", имеющая следующий синтаксис:
$ Программа = { Директива }.
$ Директива =
$ Инструкция | "BLOCK" "," Значение ";".
$ Инструкция =
$ КодОперации "," Значение ";" |
$ КодОперации =
$ ADD | SUB | MUL | DIV | LOAD | STORE |
$ ADDC | SUBC | MULC | DIVC | LOADC |
$ JUMPEQ | JUMPNE | JUMPLT | JUMPGT | JUMPLE | JUMPGE
$ JUMP | READ | WRITE | HALT.
$ Значение = Число.
Программа представляет собой последовательность директив, а каждая директива является либо "инструкцией", т.е. машинной командой, либо директивой резервирования памяти.Выполнение программы всегда начинается с первой ячейки.
Помимо оперативной памяти в машине имеется сумматор, который может содержать одно число.
BLOCK,Int;
означает, что в этом месте программы следует оставить незанятыми Int ячеек памяти. Обычно эта директива находится в конце программы и используется для выделения ячеек памяти, предназначенных для хранения значений переменных.Op,Value;
где Op - название выполняемой операции, а Value операнд этой операции. Смысл операнда Value определяется названием операции. Для некоторых операций Value является адресом некоторой ячейки, которая используется при выполнении операции. Для других операций Value представляет собой целое число, которое также используется при выполнении операции. Для некоторых операций, однако, операнд не требуется, и в этом случае Value должно быть равно нулю.001 READ,21; 008 JUMPGE,16; 015 JUMP,6;
002 LOADC,1; 009 LOAD,19; 016 LOAD,20;
003 STORE,19; 010 ADDC,1; 017 WRITE,0;
004 LOADC,1; 011 STORE,19; 018 HALT,0;
005 STORE,20; 012 LOAD,20; 019 BLOCK,3;
006 LOAD,19; 013 MUL,19;
007 SUB,21; 014 STORE,20;
Слева от директив выписаны соответствующие им адреса.