averov90 / asm8086-io-arithmetic

An example of the implementation of some functions in the assembly language of the Intel 8086 processor.

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

asm8086 IO and Arithmetic example

License Version

В данном репозитории представлены 3 небольшие работающие программы, которые содержат некоторые функции ввода/вывода и арифметики. Для получения примера (чтобы была возможность демонстрации), в каждой программе есть головная функция. Ниже состав примеров будет рассмотрен подробнее.

Для запуска примеров необходимо: окружение DOS, компилятор TASM (Turbo Assembler) для Intel8086. В качестве окружения DOS можно взять DOSBox (либо DOSBox Staging, но в старом DOSBox скомпилированные программы работают, кажется, лучше).

Перед началом каждой функцией указано, какие регистры требуются этой функции для работы (т.е. те регистры, значение которых нужно сохранить перед вызовом функции в случае, если хранимые в них значения будут нужны позже). В число этих регистров входят и аргументы функции. Описание этих аргументов даётся внутри функции (в начале). Многие моменты выполнения программ пояснены в комментариях в коде.

prog_1.asm

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.

prog_2.asm

func_int16IN - функция ввода знакового 16-битного числа. Само число после ввода возвращается через регистр AX.

func_uint16IN - функция ввода беззнакового 16-битного числа. Само число после ввода возвращается через регистр AX.

func_uint16OUT - функция вывода беззнакового 16-битного числа. Число для вывода подаётся через 2 регистра (AX - нижнее слово). В работе данная функция использует стек (требует 10 слов т.е. 20 байт).

Головная функция данного примера с помощью вышеприведённых функций выполняет подсчёт количества чисел, больших заданного порога. Позволяет ввести как порог, так и количество чисел для ввода.

prog_3.asm

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.

About

An example of the implementation of some functions in the assembly language of the Intel 8086 processor.

License:The Unlicense


Languages

Language:Assembly 100.0%