Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
LAB1.DOC
Скачиваний:
1
Добавлен:
01.07.2025
Размер:
81.92 Кб
Скачать

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.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]