Страница Web-калькулятора состоит из двух основных областей: области системы и области пользователя.
В области системы расположены три окна, в которых отображается текущая загруженная программа, текущие состояния областей данных и операционного стека. В области данных программа хранит промежуточные результаты работы, а стек предназначен для хранения операндов команд, локальных переменных подпрограмм и точек возврата из подпрограмм.
Область пользователя также состоит из трёх окон: окна программы, в котором пользователь вводит программу в систему, окна ввода, куда вводятся данные для считывания их программой с помощью команды GET и окна вывода, куда программа выводит результаты вычислений командой PUT.
Программа состоит из последовательности командных строк, которые Web-калькулятор выполняет поочерёдно, одна за другой.
Командная строка имеет следующий вид:
МЕТКА: КОМАНДА ПАРАМЕТР
Обязательным является лишь поле команды. Наличие параметра зависит от самой команды, а метки предназначены для назначения команд переходов. Параметры команд
N — непосредственный числовой операнд N
[A] — операнд находится по адресу A в области данных
<A> — операнд находится в стеке по смещению A относительно вершины
|A| — операнд находится в стеке по смещению A относительно начала текущего кадра
МЕТКА — операндом команды перехода является метка в программе
Операнды с адресацией допускают вложение. Например, [<0>] означает, что операнд расположен по некоторому адресу в области данных, а сам адрес находится на текущей вершине стека. Команды
Команды Web-калькулятора разделены на категории: команды загрузки/выгрузки данных, управляющие команды, команды ввода/вывода и команды для выполнения арифметических и логических вычислений.
PUSH X — кладёт на вершину стека операнд, заданный в команде. Параметром может быть непосредственное значение, ссылка на область памяти или метка. В последнем случае в стек кладётся адрес помеченной команды.
POP X — берёт число с вершины стека и заносит его по ссылке, заданной в команде. Параметром может быть только ссылка на память.
XCHG — обменивает содержимое двух элементов на вершине стека.
FRM — устанавливает текущую вершину стека как начало стекового кадра. Стековые кадры удобны для фиксированной адресации локальных переменных подпрограммы.
PUSHFR — сохраняет на стеке расстояние от вершины до начала текущего кадра и устанавливает текущую вершину стека как начало стекового кадра.
POPFR — восстанавливает предыдущий стековый кадр, добавляя к текущей позиции число, снятое с вершины стека.
DROP N — удаляет N верхних элементов из стека. Параметром может быть только число.
RSRV N — резевирует место в стеке, помещая на его вершину N элементов (равных нулю). Параметром может быть только число.
JMP L — безусловный переход к метке L. Следующей будет выполняться команда, помеченная меткой L. Параметром всех команд перехода может быть как сама метка, так и адрес ячейки памяти, в которой находится адрес для перехода.
JYES L — условный переход к метке L если условие истинно. Снимает элемент с вершины стека, и, если он не равен нулю, переходит к команде, помеченной меткой L.
JNO L — условный переход к метке L если условие ложно. Снимает элемент с вершины стека, и, если он равен нулю, переходит к команде, помеченной меткой L.
CALL L — вызов подпрограммы. Кладёт адрес следующей команды на стек, и переходит к метке L аналогично команде JMP.
RET — возврат из подпрограммы. Снимает число с вершины стека, и использует его как адрес следующей команды.
EXIT — выход. Выполнение программы завершается.
GET — ввод. Читает одно число из пользовательского окна ввода и кладёт его на вершину стека. Ввод производится построчно.
PUT — вывод. Снимает число с вершины стека и записывает его в пользовательское окно вывода. Вывод производится построчно.
EOI — проверка на конец источника ввода (end of input). Кладёт на стек 0, если данные для ввода доступны, и 1, если все данные из окна ввода уже прочитаны, или окно ввода пусто. Арифметические операции
Двухкомпонетнтые операции (такие, как сложение) выполняют действие над операндами X и Y, где Y находится на вершине стека, а X — непосредственно под ним. Операнды удаляются из стека, а вместо них на вершину кладётся результат. Однокомпонентные операции просто замещают операнд (X) на вершине стека результатом.
ADD — сложение, X + Y.
SUB — вычитание, X - Y.
MUL — умножение, X · Y.
DIV — деление, X ÷ Y.
POW — возведение X в степень Y.
ROOT — извлечение корня степени Y из X.
LOGYX — вычисление логарифма X по основанию Y.
MOD — вычисление остатка от деления X на Y.
ABS — абсолютная величина, |X|.
CEIL — «потолок», округление до целого, не меньшего X.
FLOOR — «пол», округление до целого, не большего X.
ROUND — округление до ближайшего целого.
TRUNC — округление до целого отбрасыванием дробной части.
AND — логическое «И», X ∧ Y.
OR — логическое «ИЛИ», X ∨ Y.
NOT — логическое «НЕ», ¬X.
XOR — логическое «исключающее ИЛИ», X ⊕ Y.
Описываемые ниже побитовые операции работают с 32-битными целыми числами.
BAND — побитовое «И», X & Y.
BOR — побитовое «ИЛИ», X | Y.
BNOT — побитовое «НЕ», !X.
BXOR — побитовое «исключающее ИЛИ», X ^ Y.
Описываемые ниже тригонометрические операции принимают аргумент в радианах, обратные — возвращают результат в радианах.
SIN — синус.
COS — косинус.
TAN — тангенс.
SINH — гиперболический синус.
COSH — гиперболический косинус.
TANH — гиперболический тангенс.
ASIN — арксинус.
ACOS — арккосинус.
ATAN — арктангенс.
ASINH — ареасинус.
ACOSH — ареакосинус.
ATANH — ареатангенс.
Логарифмические и экспоненциальные функции.
LOG — натуральный логарифм.
LOG10 — десятичный логарифм.
LOG2 — двоичный логарифм.
LOG1P — значение функции ln(1+x).
EXP — натуральный антилогарифм (e в степени x).
EXPM1 — значение функции (e в степени x) + 1.
CMP — сравнение X c Y. Результатом является 1, если X > Y, -1, если X < Y и 0, если X = Y.
Описываемые ниже команды берут результат сравнения (+1, -1 или 0) и возвращают «истинно» или «ложно» для заданного условия.
SETEQ — проверка на равенство. Возвращает 1, если X = 0, и 0, если X ≠ 0.
SETNE — проверка на неравенство. Возвращает 1, если X ≠ 0, и 0, если X = 0.
SETLE — проверка на «меньше или равно». Возвращает 1, если X ≤ 0, и 0, если X > 0.
SETGE — проверка на «больше или равно». Возвращает 1, если X ≥ 0, и 0, если X < 0.
SETLT — проверка на «меньше». Возвращает 1, если X < 0, и 0, если X ≥ 0.
SETGT — проверка на «больше». Возвращает 1, если X > 0, и 0, если X ≤ 0.