
- •Лабораторная работа № 3 Ввод и вывод данных Цель работы
- •Введение
- •Символьный ввод-вывод dos
- •Функция 0Bh – проверить статус ввода
- •Функция 0Ch – ввод с очисткой
- •Символьный ввод-вывод bios Прерывание int 16h – ввод с клавиатуры
- •Прерывание int 10h – видеосервис bios
- •Фильтрация ввода
- •Пример программы
- •Варианты заданий
- •Заключение
- •Литература
- •Приложения
- •218, 194, 191 ; Da c2 bf
Лабораторная работа № 3 Ввод и вывод данных Цель работы
Целью работы является знакомство с возможностями ввода-вывода при обмене с системной консолью и их применение в программах, создаваемых на языке Ассемблера.
Введение
Любая программа должна принимать данные и выдавать данные. Стандартным устройством для обмена данными является системная консоль(system console), которая имеет имя устройства «con» вMS DOS. Системная консоль как устройство ввода представленаклавиатурой(keyboard), а как устройство вывода –экраноммонитора (screen) в текстовом режиме. Поскольку все программы выполняют обмен с консолью одинаково, то эти функции введены в сервисBIOSиDOS.
В BIOSприем данных с клавиатуры выполняется функциями прерыванияint 16h, а вывод символьной информации на экран – функциями прерыванияint 10h. ВMS DOSфункции символьного ввода-вывода входят в состав сервиса «двадцать первого прерывания»int 21h.
Системная консоль при выводе на экран выводит символы в текстовом режиме. Стандартно это 25 строк по 80 колонок. Системная консоль при вводе с клавиатуры принимает коды, соответствующие нажатым клавишам. В перечисленных выше функцияхDOSиBIOSиспользуется кодирование символов в соответствии с таблицейASCII(American Standard Code for Information Interchange).
Вызов функций DOSиBIOS выполняется по одинаковому соглашению: в регистрAHзаписывается номер функции. Если конкретная функция требует загрузки других регистров, то это также делается до вызова прерывания.
Символьный ввод-вывод dos
Функция 02h – выдать один символ
В DL загрузить код символа.
Функция 09h – выдать строку символов
В DS:DX загрузить адрес строки. Строка должна заканчиваться символом ‘$’ (24h).
Функция 06h – консольный ввод и вывод
В DL загрузить код символа (от 00h до 0FEh) – для вывода символа.
В DL загрузить код 0FFh для ввода символа с клавиатуры. Выполняется ввод символа «без ожидания» с установкой флага ZF, если символа нет, либо сбросом флага ZF, если символ есть. В последнем случае код символа находится в AL. Эта функция при вводе не фильтрует символы (см. далее описание функции 07h).
Функция 01h – ввод с клавиатуры
Выполняется ввод символа с «ожиданием» и «эхом», т.е. введенный символ отображается на экране. Код символа находится в AL.
Функция 08h – ввод с клавиатуры без эха
Выполняется ввод символа с «ожиданием» но без «эха», т.е. введенный символ не отображается на экране. Код символа находится в AL.
Функция 07h – нефильтрующий ввод с клавиатуры без эха
Выполняется ввод символа с «ожиданием» без «эха». Код символа находится в AL. Отличается от предыдущих функций ввода тем, что не фильтрует, т.е. не проверяет входные символы на Ctrl-Break, не выполняя соответствующей реакции (int 23h – прерывание DOS). Обычная системная обработка Ctrl-Break вызывает немедленное снятие программы. При вводе символа функцией 07h программа должна сама распознать и обработать Ctrl-Break.
Функция 0Ah – ввод строки в буфер
До вызова этой функции необходимо подготовить буфер ввода, в котором первый байт содержит число MAX (максимальная длина вводимой строки), второй байт предназначен для счетчика, а последующие байты – для вводимой строки (включая завершающий байт для символа CR – возврат каретки, который соответствует нажатию клавиши «Enter»).
Символы считываются со стандартного ввода вплоть до CR (ASCII 0Dh) или до достижения длины MAX-1. Если достигнут MAX-1, включается консольный звонок для каждого очередного символа, пока не будет введен возврат каретки CR. При вводе работают клавиши редактирования строки, а также «F5», «F3», «Esc». Символы в буфере используются как шаблон.
После окончания ввода строки функция возвращает в буфере количество символов (без CR) во втором байте и введенный текст, начиная с третьего байта (в т.ч. и символ CR).