
- •Принципы организации ввода/вывода текстовых и числовых данных
- •2. Основные теоретические положения
- •2.1. Построение com файлов
- •2.2. Организация ввода-вывода
- •Функция овн. Проверка входного статуса клавиатуры
- •2.3. Ввод числовых данных
- •2.4. Процедуры
- •3. Задание на лабораторную работу и требования к отчету
Функция овн. Проверка входного статуса клавиатуры
Входные данные: АН 0Вh
Выходные данные:
AL FFh, если есть готовый символ на стандартном входном устройстве и 00h, если на стандартном входном устройстве нет символа.
Функция проверяет наличие символа на стандартном входном устройстве. При выполнении функции проверяется наличие Ctrl-Break.
Функция 0СН. Стирание буфера клавиатуры плюс функция 01Н, 06Н, 07Н, 08Н или 0АН
Входные данные
АН 0Сh
AL Номер функции
Функция стирает буфер клавиатурного драйвера BIOS, после чего выполняет указанную в AL функцию (допустимы только 01Н, 06Н, 07Н, 08Н и 0АН). При выполнении функции проверяется наличие Ctrl-Break.
Функция 02Н. Вывод на экран
Входные данные
АН 02Н
DL Символ
Символ из DL выводится на стандартное выходное устройство. Функция реагирует на управляющие ASCII символы, такие как 0DH (CR) и 0АН (LF). Если символ в DL равен 08Н (управляющий символ BS - символ назад), курсор возвращается на одну позицию влево без удаления последнего символа.
Функция 09Н. Вывод строки на экран
Входные данные
АН 09Н
DS:DX Указатель к началу символьной строки
Символьная строка должна заканчиваться символом $ (24Н). Отдельные символы выводятся как при функции 02Н.
2.3. Ввод числовых данных
Из предыдущего параграфа видно, что все базовые функции системы MS-DOS предназначены только для ввода строк, а во многих случаях требуется вводить числа, которые будут участвовать в различных математических вычислениях. Для решения этой проблемы необходимо написать ряд конвертирующих функций, которые позволят переводить строки из цифр в двоичное представление числа в различных форматах и наоборот.
Необходимо вспомнить, как можно представить любое десятичное число:
M = Mn*10n-1 + Mn-1*10n-2 + … + M2*10 + M1.
Таким образом, число 325 можно представить как 325=3*100+2*10+5.
Ввод чисел всегда осуществляется, начиная со старших разрядов. Т.е. после завершения процедуры ввода строка всегда будет содержать ASCII представление цифр числа, начиная со старших разрядов. Для перевода строки в двоичное число необходимо произвести переход от ASCII представления каждой цифры к ее числовому представлению и произвести операцию суммирования всех цифр в соответствии с их весами.
Перевод цифры из ASCII представления в числовое осуществляется путем вычитания значения 30h из значения кода, так как цифры в таблице кодов ASCII занимают положение от 30h(символ ‘0’) до 39h(символ ‘9’).
При переводе из строкового представления в числовое необходимо учитывать разрядность результата. Пользователь может ввести очень большое число, которое не может быть помещено в разрядную сетку машины, соответственно при попытке перевода этого числа возникнет ошибка.
Перевод знаковых чисел осуществляется аналогично, но необходимо помнить, что знаковые числа в машине представляются в дополнительном коде, соответственно при первоначальном переводе можно получить прямой код числа, а затем произвести его перевод в дополнительный.
Перевод из двоичного представления числа в строковое осуществляется обратным преобразованием. Знаковые числа переводятся в прямой код без знака. Затем путем деления числа на основание системы счисления (в нашем случае 10) и взятия остатка производится получение младшей цифры числа. Затем частное снова делится на основание системы счисления и запоминается остаток, и т.д. пока частное не станет равным нулю. Таким образом, будет получено представление числа в виде цифр, остается только осуществить их перевод в ASCII формат и сформировать строку.