# Установка программы:

1. Распаковать содержимое в отдельную папку
2. - Для Windows - запустить программу из файла Microcomp.exe
   - Для Linux:
     1. дать пава на запуск файла Microcomp
     2. запустить программу из файла Microcomp
     3. при появлении ошибок, связанных с отсутсвием GTK - установить GTK:
        sudo apt install libgtk2.0-0

# Символы языка ассемблера

Допустимыми символами при написании текста программ являются:

1. все латинские буквы и все буквы русского алфавита. При этом заглавные и строчные буквы считаются эквивалентными;
2. цифры от 0 до 9;
3. знаки _ , [ ] + -

# Структура программы

Программа для эмулятора Микрокомп состоит из записанных в столбик команд.
Формат команды:
[метка:] команда [операнд1 [,операнд2]]
Квадратные скобки означают необязательные элементы команды.
Пример команды:
mov A, 10

# Регистры общего назначения:

Восьмибитные: A, B, C

Шестнадцатибитный: D

# Адресация:

Непосредственная: mov a, 5

Регистровая: mov a, b

Прямая: mov a, [5]

Косвенная: mov a, [d]

Косвенная со смещением: mov a, [d+2]

# Команды:

## Перемещение данных

mov куда, что - помещение данных

push регистр - сохранить значение регистра в стеке

pop регистр - восстановить значение регистра из стека

## Арифметические:

add куда, что - сложение

sub куда, что - вычитание

mul что, на что - умножение

div что, на что - деление

mod что, на что - остаток от деления

cmp что, с чем - сравнение

## Логические

not что - инверсия (побитовое отрицание)

and что, с чем - конъюнкция (побитовое "И")

or что, с чем - дизъюнкция (побитовое "ИЛИ")

## Управление ходом вычислений

jp куда - безусловный переход

jz куда - переход, если ноль

jnz куда - переход, если не ноль

jc куда - переход, если перенос

jnc куда - переход, если нет переноса

call куда - вызов подпрограммы

ret - возврат из подпрограммы

loop куда - цикл. В регистр C должно быть помещено количество повторений

hlt - остановка выполнения программы

## Дополнительные команды

nop - нет операции

## Работа с портами ввода-ввода

in куда, откуда - чтение данных из порта ввода-вывода

## Прерывания

int 16
- если регистр A равен 0, то происходит очистка экрана
- если регистр A равен 2, то текстовый крусор устанавливается в позицию, заданную регистром D (старший байт - номер строки, младший байт - номер столбца)
- если регистр A равен 10, то на экран выводится символ с кодом, хранящимся в регистре B (если регистр A восьмибитный) или в младшем байте регистра A (если регистр A 16-битный или более)

int 21
- ожидание (регистр A должен быть равен 134, в регистре C должно быть количество сотых долей секунды)

int 22
- чтение клавиатуры. Результат - в регистре A

# Числа:

12 - десятичное число

12o - восьмеричное число

12h - шестнадцатеричное число

# Метки:

метка: add a, 5
jp метка

Именем метки может быть последовательность символов, начинающаяся с буквы.
Метка может содержащать в себе буквы, цифры и символ подчеркивания

# Комментарии:

Всё содержимое строки после точки с запятой является комментарием и не обрабатывается:
; в следующей строке находится команда остановки
hlt ;команда остановки