В данном репозитории представлены 3 небольшие работающие программы, которые содержат некоторые функции ввода/вывода и арифметики. Для получения примера (чтобы была возможность демонстрации), в каждой программе есть головная функция. Ниже состав примеров будет рассмотрен подробнее.
Для запуска примеров необходимо: окружение DOS, компилятор TASM (Turbo Assembler) для Intel8086. В качестве окружения DOS можно взять DOSBox (либо DOSBox Staging, но в старом DOSBox скомпилированные программы работают, кажется, лучше).
Перед началом каждой функцией указано, какие регистры требуются этой функции для работы (т.е. те регистры, значение которых нужно сохранить перед вызовом функции в случае, если хранимые в них значения будут нужны позже). В число этих регистров входят и аргументы функции. Описание этих аргументов даётся внутри функции (в начале). Многие моменты выполнения программ пояснены в комментариях в коде.
func_uint16IN - функция ввода беззнакового 16-битного числа. Само число после ввода возвращается через регистр AX.
func_uint32OUT - функция вывода беззнакового 32-битного числа. Число для вывода подаётся через 2 регистра (AX - нижнее слово, DX - верхнее слово). В работе данная функция использует стек (требует 10 слов т.е. 20 байт).
func_mul32x16 - Функция умножения 32-битного числа на 16-битное. Числа для подаются через 3 регистра (AX - нижнее слово 1 числа, DX - верхнее слово 1 числа, BX - множитель). Результат - через AX и DX.
func_div32x16 - функция деления 32-битного числа на 16-битное. Числа для вывода подаются через 2 регистра (AX - нижнее слово 1 числа, DX - верхнее слово 1 числа, BX - множитель) и переменную func_div32x16_divider. Результат - через AX и DX (целая часть), BX - остаток.
Головная функция данного примера с помощью вышеприведённых функций выполняет вычисление количества расстановок при переданных в программу m и n.
func_int16IN - функция ввода знакового 16-битного числа. Само число после ввода возвращается через регистр AX.
func_uint16IN - функция ввода беззнакового 16-битного числа. Само число после ввода возвращается через регистр AX.
func_uint16OUT - функция вывода беззнакового 16-битного числа. Число для вывода подаётся через 2 регистра (AX - нижнее слово). В работе данная функция использует стек (требует 10 слов т.е. 20 байт).
Головная функция данного примера с помощью вышеприведённых функций выполняет подсчёт количества чисел, больших заданного порога. Позволяет ввести как порог, так и количество чисел для ввода.
func_placments32x16x16 - функция вычисления количества расстановок при переданных в программу m и n. Аргументы в функцию передаются через стек.
func_uint16IN - функция ввода беззнакового 16-битного числа. Само число после ввода возвращается через регистр AX.
func_uint32OUT - функция вывода беззнакового 32-битного числа. Число для вывода подаётся через 2 регистра (AX - нижнее слово, DX - верхнее слово). В работе данная функция использует стек (требует 10 слов т.е. 20 байт).
func_mul32x16 - Функция умножения 32-битного числа на 16-битное. Числа для подаются через 3 регистра (AX - нижнее слово 1 числа, DX - верхнее слово 1 числа, BX - множитель). Результат - через AX и DX.
func_div32x16 - функция деления 32-битного числа на 16-битное. Числа для вывода подаются через 2 регистра (AX - нижнее слово делимого числа, DX - верхнее слово делимого числа) и переменную func_div32x16_divider. Результат - через AX и DX (целая часть), BX - остаток.
Головная функция данного примера с помощью вышеприведённых функций выполняет вычисление количества расстановок при переданных в программу m и n.