- •Принципы организации ввода/вывода текстовых и числовых данных
- •2. Основные теоретические положения
- •2.1. Построение com файлов
- •2.2. Организация ввода-вывода
- •Функция овн. Проверка входного статуса клавиатуры
- •2.3. Ввод числовых данных
- •2.4. Процедуры
- •3. Задание на лабораторную работу и требования к отчету
2.2. Организация ввода-вывода
При разработке программ на языке ассемблера существуют три основных способа организации ввода-вывода данных: воспользоваться функциями операционной системы; воспользоваться функциями, предоставляемыми системой BIOS; непосредственная работа с аппаратурой для организации ввода-вывода. Каждый из перечисленных способов имеет свои достоинства и недостатки.
Организация ввода-вывода через системные функции операционной системы - наиболее простой и эффективный способ реализации. Обычно набор таких функций достаточно широк и позволяет резко сократить время на разработку программы. Недостаток такого подхода проявляется к невозможности переноса программного кода в другие операционные системы и невозможность работы в случае ее отсутствия.
Использование базовых функций, предоставляемых BIOS, позволяет исправить этот недостаток. Для персональных машин BIOS существует всегда, и из него редко выбрасывают модули, связанные с вводом-выводом. Но эти функции реализуют только простейшие конструкции по организации ввода вывода, которые не могут удовлетворить даже достаточно скромные требования к интерфейсу пользователя. Плюс использования функций BIOS состоит в абстрагировании от конкретной операционной системы и от конкретной аппаратной реализации устройства, что позволяет сохранить единообразие программы при переносе на другую операционную систему или реализацию вычислительной машины.
В некоторых случаях, когда использование BIOS невозможно, либо необходимо осуществлять ввод-вывод через неподдерживаемое им оборудование, используется метод непосредственной работы с аппаратурой. Это наиболее сложный вариант организации ввода-вывода, поскольку необходимо четко представлять архитектуру вычислительной машины, ее схемотехнику и принципы организации взаимодействия со специализированными устройствами. В данной лабораторной работе данный способ ввода-вывода не рассматривается.
Для обращения к функциям BIOS и операционной системы MS-DOS используется механизм программных прерываний, программа заполняет регистры нужными значениями и вызывается прерывание с помощью команды INT.
Использование именно такого подхода объясняется следующим. Функции ввода-вывода – набор процедур различных процедур. При компиляции программы невозможно узнать в какой области памяти будут находиться данные процедуры, а именно механизм прерываний позволяет абстрагироваться от конкретных физических адресов реализации. Дело в том, что обработчик прерывания - это специальная процедура, адрес которой располагается в специальной таблице векторов прерываний. Вызов процедуры производится не по адресу, а по номеру вектора прерывания (строки в таблице прерываний). Ответственность за заполнение таблицы несут BIOS и операционная система, что позволяет программисту не задумываться об этом. Более того, данный механизм обеспечивает возможность перекрытия и дополнения базовых функций, благодаря изменению обработчика прерываний, и программный код резко сокращается, так как команда INT занимает меньше памяти, чем другие команды передачи управления.
Рассмотрим базовые функции ввода-вывода системы MS-DOS. Доступ к этим функциям, как и ко всем функциям системы MS-DOS, осуществляется с помощью вектора прерываний с номером 21h.
Фукции для чтения с клавиатуры различаются главным образом по трем признакам: ожидают ли ввод или возвращают информацию, что нет наличного символа; выводят ли после чтения символ на экран или нет (с эхо или без эхо); проверяется ли при их выполнении наличие Ctrl-Break или нет.
Функция 01Н. Ввод с клавиатуры с эхо
Входные данные: АН 01Н
Выходные данные: AL Символ со стандартного Входного устройства
Функция ожидает ввод со стандартного входного устройства. Если получен ASCII символ, он выводится на стандартное выходное устройство и записывается в AL. Если после выполнения функции AL содержит 00h, это означает, что получен расширенный ASCII код, второй байт которого будет прочитан при следующем выполнении функции. При выполнении функции осуществляется проверка наличия Ctrl-Break.
Функция 01Н. Прямой ввод-вывод на консоль
ПРИМЕЧАНИЕ. Термин консоль объединяет стандартное входное и стандартное выходное устройство и используется как общее для клавиатуры и экрана имя.
Входные данные:
АН 06Н
DL FFH для ввода с консоли,00h-FEh для вывода на консоль
Выходные данные: AL
Функция выполняет как ввод, так и вывод на консоль. Регистр AL используется для ввода, а регистр DL - для вывода. Если DL содержит FFh, выполняется ввод, и AL готов принять входной символ. Состояние ZF(Zero Flag) показывает наличие символа. Если ZF содержит 1, нет символа и значение AL несущественно. Если ZF содержит 0, имеется символ, и он записывается в AL. Если значение DL различно от FFh, выполняется вывод. DL содержит ASCII код символа.
Как и остальные функции, рассмотренные здесь, функция 06Н работает со стандартным входным и стандартным выходным устройством. Функция не ожидает появления входного символа, читает без эхо и при ее выполнении не проверяется наличие Ctrl-Break.
Функция 07Н. Прямой ввод с клавиатуры без эхо
Функция аналогична функции 01Н с той разницей, что работает без эхо и при ее выполнении не проверяется наличие Ctrl-Break.
Функция 08Н. Ввод с клавиатуры без эхо
Функция аналогична функции 01Н с той разницей, что работает без эхо.
Функция 0АН. Буферированный ввод с клавиатуры
Входные данные:
АН 0Аh
DS:DX Адрес Входного буфера
Функция дает возможность использовать в программе стандартные клавиши DOS для редактирования командной строки. В отличие от остальных функций, конечный результат представляет собой не единичный символ, а цепочка, которая получается в буфере ввода после нажатия Enter (или после получения символа 00h от стандартного входного устройства).
Перед выполнением функции первый байт входного буфера должен содержать его длину, обязательно отличную от 0. Точнее, это максимальное количество символов, которые могут быть обработаны. Буфер заполняется, начиная с третьего байта, причем последний символ - ODH (CR). Функция помещает во второй байт буфера действительную длину полученной строки без символа 0Dh.
Максимальное количество символов, которое можно поместить в буфер, на единицу меньше значения его первого байта - одна позиция резервирована для символа ОDh. При превышении этого максимума DOS игнорирует дальнейший ввод и выдает звуковой сигнал при вводе каждого последующего символа. Во время ввода (до нажатия Enter) можно использовать редактирующие клавиши DOS. При выполнении функции проверяется наличие Ctrl-Break.
