Skip to content

Vareshka99/webcalc

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

4 Commits
 
 
 
 
 
 
 
 

Repository files navigation

Web-калькулятор

программируемый калькулятор, выполненный в виде веб-приложения.

описание

Страница 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.