Поможем написать учебную работу
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
![](images/emoji__ok.png)
Предоплата всего
![](images/emoji__signature.png)
Подписываем
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
Предоплата всего
Подписываем
Лабораторная работа №9
Цель работы: изучить принципы программирования процедур работы с устройствами ввода-вывода.
Выполнил
Студент группы 2-09П
Полойников Вадим
Проверил: Каневский А.С
Ход работы.
Задание №1
Программирование работы с дисплеем
Задание режимов работы и обмен данными с дисплеем можно выполнять при прерываниях BIOS типа 10Н, а вывод данных на дисплей и при прерываниях DOS типа 21Н. Для уяснения отличий прерываний BIOS от прерываний DOS рассмотрим в качестве примера несколько функций видеопрерываний BIOS.
Видеооперации с прерыванием 10Н BIOS
Это прерывание обеспечивает выполнение 16 различных процедур работы с дисплеем (идентифицируются содержимым регистра АН). Приведем самые важные из них.
1. Перемещение курсора в заданную позицию: АН = 2.
Координаты курсора (строка, столбец) предварительно засылаются, соответственно, в регистры DН, DL. В регистре ВН указывается номер страницы буфера: по умолчанию и в графическом режиме ВН = 0.
2. Очистка экрана дисплея: АН = 6 и АL = 0, или АН = 7 и АL = 0.
3. Чтение символа, находящегося в текущей позиции курсора и его атрибута (только для текстовых режимов): АН = 8. В регистре ВН указывается номер страницы буфера. Считанный символ возвращается в АL, а его атрибуты в АН (атрибуты символа это его характеристики: цвет, цвет фона, яркость, инвертирование, мигание и т. д.).
4. Установка видеорежима изображения (текстовый, графический, цветность, формат, разрешающая способность и т. п.): АН = 0. Видеорежим определяется содержимым регистра АL.
5. Запись новых атрибутов символа и вывод символа в текущую позицию курсора: АН = 9. Прочие регистры должны содержать:
• АL записываемый символ;
• ВL его атрибуты или цвет (в графическом режиме);
• ВН номер видеостраницы;
• СХ счетчик записываемых символов (число повторений символа).
6. Вывод символа в текущую позицию курсора: АН = 9 и ВL = 0. Содержимое АL, ВН и СХ аналогично п. 5.
7. Чтение текущего видеостатуса: АН = ОFh. Возвращает в: АL текущий режим; АН число столбцов на экране; ВН активную страницу буфера.
8. Вывод строки символов: АН = 13h и АL = 0. Прочие регистры должны содержать:
• ЕS : ВР указатель строки (ее начальный адрес в памяти);
• СХ длину строки;
• DХ строку дисплея;
• ВН номер страницы буфера.
Видеооперации с прерыванием 21Н DOS
• Вывод символа на экран дисплея: АН = 2 или АН = 6 и DL <> ОFFh. В регистре DL должен быть АSСII-код символа. Пример фрагмента программы (вывод символа «С»):
mov АН, 6
mov DL 43Н ; 43Н это АSСII -код символа С
int 21Н
• Вывод строки символов: АН = 9 (чаще всего используемая функция). В регистрах DS : DХ должен находиться начальный адрес строки символов, которая обязана заканчиваться символом $. Пример фрагмента программы (отображение текста 'вывод строки символов $'):
Техt db 'вывод строки символов $'
mov АН, 9
mov DХ, оffsеt tехt; это адрес выводимой строки
int 21Н
• Ввод/вывод из файла через логический номер. Стандартные файловые логические номера
определяют тип и устройство ввода-вывода:
0 - ввод с клавиатуры;
1 - вывод на экран дисплея;
2 - вывод на экран сообщения об ошибке;
3 - ввод-вывод на внешнее устройство;
4 - вывод на печать.
Для ввода предназначена функция АН = 3Fh прерывания 21Н. для вывода служит функция АН = 40h прерывания 21Н. В регистр СХ предварительно заносится число вводимых-выводимых байт, а в регистр DХ записывается начальный адрес поля памяти для ввода-вывода. В случае успешного завершения процедуры ввода-вывода обнуляется флаг переноса СF, а в регистре АХ возвращается количество фактически переданных байт. При неудачной операции флаг СF устанавливается в 1, а в регистр АХ заносится код ошибки.
Приведенный ниже пример содержит фрагмент программы для вывода на экран текстового файла Техt, содержащего 50 байт.
Tехt db 50 duр('')
mov АН, 40Н
mov ВХ, 1 ; указание устройства вывода
mov СХ, 50 ;указание числа выводимых байт
mov DХ, оffsеt tехt; указание начального адреса поля памяти, содержащего
текст int 21Н
Задание №2
Составить список содержащий характеристики команд, необходимых для выполнения процедуры ввода информации с клавиатуры. Программирование работы с клавиатурой
При программировании работы с клавиатурой могут быть использованы прерывание 16Н BIOS и прерывание 21Н (АН = 1, 6, 7. 8, А, В, С) DOS.
Прерывание 16Н BIOS предусматривает достаточно простые операции обмена данными с клавиатурой, полезные при написании программ, выполняемых независимо от операционной системы DOS. Так, при АН = 0 и 1 считываются из буфера клавиатуры scan-код клавиши в регистр АН и ASCII-код клавиши в регистр АL; при АН = 2 в АL возвращается байт состояния клавиатуры - состояние управляющих клавиш: Shift, Ctrl, Аlt, Scroll Lock, Num Lock и Insert; при АН = 3 устанавливаются режимы работы клавиатуры.
Ввод с клавиатуры по прерыванию 21Н DOS предполагает:
Чтение символа с клавиатуры (с ожиданием ввода) и отображением символа на экране дисплея: АН = 1 или АН = 6 и DL = ОFFh; то же, но без эха-отображения символа на экране дисплея: АН = 7 или АН = 8. Считанный символ (ASCII -код) помещается в регистр АL (scan-код не передается). Если к моменту запроса на чтение символа клавиша еще не нажата, то управление прерванной программе не будет возвращено до тех пор, пока это не будет сделано. Если код клавиши расширенный (клавиши F1-F10, Аlt, Сtrl и т. д.), необходимо повторное чтение. Пример фрагмента программы чтения символа:
mov АН, 1
int 21Н
2. Чтение строки символов с буферизацией: АН = ОАh. Для инициализации такого чтения необходимо:
• задать буфер, указав в нем число символов строки, подлежащих вводу, директивой:
buf DВ n, 0, 0……..0, 0
(buf - имя поля, которое, в принципе, может быть и любым другим); количество нулей в директиве должно быть на 2 больше, чем n (n - максимальное количество вводимых символов), на место первого нуля после ввода будет записано количество фактически введенных символов, на место последующих нулей будут введены АSСII-коды символов строки и еще один 0 для кода клавиши Еntеr - 13;
• занести в регистр DХ адрес буфера.
При выполнении рассматриваемого прерывания управление прерванной (основной) программе не возвратится до тех пор, пока не нажата клавиша Еntеr.
При нажатии каждой очередной клавиши ее код записывается в буфер клавиатуры и отображается на дисплее, но из буфера поступит в основную программ) (в поле buf) только после нажатия клавиши Еntеr. Если до Еntеr клавиш нажато больше, чем указано в буфере, то раздастся звуковой сигнал и лишние символы восприняты не будут.
Пример фрагмента программы чтения строки символов:
buf DВ 9,0,0,0,0,0,0,0,0,0,0,0
mov АН, 0АН
mov DХ, оffset buf 21Н
В поле буфера будут записаны АSСII-коды символов строки, и, если в основной программе предусмотрены операции над двоичными кодами символов (цифр) строки, то есть она предполагает ввод числового значения, то необходимо преобразовать АSСII -коды в двоичный код числа.
1. Чтение состояния клавиатуры: АН = ОВh. В регистр АL записывается 0, если в буфере клавиатуры содержится хотя бы один символ.
2. Очистка буфера клавиатуры и вызов функции: АН = 0СН. Обнуляется буфер клавиатуры и инициируется выполнение одной из 5 функций прерывания 21Н; в этом случае номер вызываемой функции должен быть записан не в регистре АН, а в регистре АL (АL=1,6,7,8 или ОАh).
3. Ввод с клавиатуры (из файла через логический номер): АН = 3Fh. Используется функция расширенного управления файлами МS DOS по файловому указателю. Ниже приведен пример фрагмента программы для ввода с клавиатуры 50 байт:
tехt db 50 dup(' ') ; задание поля памяти для ввода
…………
mov АН, 3FH
mov ВХ, 0 ; указание устройства ввода
mov СХ, 50 ; указание числа вводимых байт
mov DХ, ofset tехt; указание начального адреса поля памяти для ввода
int 21Н
Задание №3
Составить список содержащий характеристики команд, необходимых для выполнения процедуры вывода информации на принтер.
Программирование работы с принтерами
При работе с печатающими устройствами могут быть использованы прерывания: 14Н и 17Н BIOS и 21Н (АН = 4 и 5) DOS. Следует различать программирование для печатающих устройств параллельного типа (информация передается на принтер побайтово по 8-битовой шине) и печатающих устройств последовательного типа (информация передается по одному проводу последовательно по 1 биту), подсоединяемых к любому последовательному порту микропроцессора.
Печатающие устройства параллельного типа
• Прерывание 17Н BIOS (номер принтера предварительно указывается в регистре DХ):
послать 1 символ в устройство печати: АН=0. АSСII-код символа предварительно должен быть помещен в регистр АL. В регистре АН после завершения вывода символа возвращается признак успешности результата;
инициировать принтер (посылка в порт служебных кодов): АН = 1 ;
получить состояние принтера (в регистре АН): АН = 2.
• Прерывание 21Н DOS, АН = 5:
вывести на печать один символ: АН = 5. АSСII-код символа предварительно
записывается в регистр DL. Фрагмент программы печати символа С (АSСII-код символа С равен 43h):
mov АН, 5
mov DL, 43 Н
int 21Н
• Вывести на печать текстовый файл: АН = 40h. Используются функции расширенного управления файлами MS DOS по файловому указателю. Пример фрагмента программы для вывода на печать текстового файла, содержащего 50 байт:
tехt db 50 dup(' ')
…………
mov АН, 40H
mov ВХ, 4 ; указание устройства вывода
mov СХ, 50 ; указание числа выводимых байт
mov DХ, ofset tехt; указание начального адреса поля памяти, содержащей текст
int 21Н
Печатающие устройства последовательного типа
• Прерывание 14Н BIOS (номер последовательного порта записывается в регистр DХ):
инициализация параметров последовательного порта: АН = 0;
послать в порт один символ (если к порту подсоединен принтер, то и печать): АН = 1 и др.
• Прерывание 21Н DOS, АН = 4 (номер последовательного порта записывается в регистр DХ):
вывести на печать один символ: АН = 4. ASCII-код символа предварительно помещается в регистр DL;
далее аналогично прерыванию 21Н DOS, АН = 5 для принтера параллельного типа и др.
Вывод: я изучил принципы программирования процедур работы с устройствами ввода-вывода.