Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Metodichka.doc
Скачиваний:
9
Добавлен:
27.03.2015
Размер:
122.88 Кб
Скачать

Лабораторная работа n 4 программные прерывания. Интерфейс с операционной системой

1.Цель работы

Ознакомиться с основными функциями прерывания INT 21 - ин­терфейса с DOS.

2. Краткие теоретические сведения

Для обращения к операционной системе DOS используются ряд программных прерываний в диапазоне 20h-3Fh. Наиболее часто ис­пользуются подфункции прерывания INT 21Н. Они позволяют доста­точно просто организовать работу с различными внешними устройс­твами - клавиатурой, видеомонитором, принтером, асинхронным последовательным портом ввода - вывода и др.

Вызов всех функций выполняется аналогично обращениям к BI­OS: в регистр АН помещается номер функции, необходимые парамет­ры - в другие регистры. После выполнения функции результат возвращается также в регистрах. Значения всех регистров, кроме используемых для передачи параметров, сохраняются.

Основные функции прерывания INT 21H, используемые в лабо­раторной работе:

1. Ввод символа с ожиданием и эхо-печатью

Вход: АН = 1Н

Выход: AL * код символа

2. Ввод символа с ожиданием без эхо-печати

Вход: АН - 7Н

Выход: AL - код символа

3. Чтение строки с клавиатуры в буфер до CR

Вход: АН = ОАН

DS:DX - адрес буфера. Первый байт буфера - его длина

Выход: DS:DX - адрес буфера. Действительная длина строки во втором байте буфера, строка начинается с третьего байта.

4. Вывод символа

Вход: АН = 2Н

DL - код символа

5. Вывод строки символов

Вход: АН = 9Н

DS:DX - адрес строки. Признак конца строки - символ «$»

6. Чтение системной даты

Вход: АН = 2АН

Выход: СХ - Год (1980 - 2099)

DH - месяц (1-12)

DL - число (1-31).

7. Установка системной даты

Вход: АН = 2ВВ

СХ – год (1980 - 2099)

DH - месяц (Г-12)

DL - число (1-31)

Выход: AL = 0 - все в порядке, FFH - ошибка в задании даты

8. Чтение системного времени

Вход: АН = 2СН

Выход: CH - часы (0-23)

CL - минуты (0-59)

DH - секунды (0-59) DL - сотые доли секунды (0-99)

9. Установка системного времени

Вход: АН = 2DH

СН - часы (0-23)

CL - минуты (0-59)

DH - секунды (0-59) DL - сотые доли секунды (0-99)

Выход: AL = О - все в порядке

AL = OFFH - ошибка в задании времени

10. Чтение имени текущего каталога

Вход: АН = 47Н

DL = номер диска (1 -"А", 2 - "В" и т.д.)

DS:SI - адрес буфера (не менее 64 байт)

Выход: DS:SI - адрес имени каталога (заканчивается О)

11. Чтение имени текущего каталога

Вход: АН = 47Н

DL = номер диска (1 -"А", 2 - "В" и т.д.)

DS:SI - адрес буфера (не менее 64 байт)

Выход: DS:SI - адрес имени каталога (заканчивается О)

12. Информация о свободном пространстве на диске

Вход: АН = 36Н

DL = номер диска (1 -"А", 2 - "В" И Т.Д.)

Выход: AX - число секторов в кластере

ВХ - число свободных кластеров

СХ - число байтов в секторе

DX - общее число кластеров

3. Методические указания

В лабораторной работе требуется написать ассемблерную про­цедуру, вызываемую из СИ-программы и выполняющую действия, свя­занные с обращением к DOS.

Обратите внимание на необходимость сохранения - восстанов­ления регистра DS, если он используется для передачи параметров.

Ввод исходных данных и вывод результата выполняются в СИ-программе.

4. Порядок выполнения работы

1. Написать головную программу на Си для вызова функции обработки строк, содержащую:

- прототип ассемблерной функции

- ввод исходных данных с подсказками

- вызов ассемблерной функции

- вывод результата работы функции

2. Написать ассемблерную функцию, выполняющую действия в соответствии с приведенным ниже описанием и прототипом.

3. Выполнить компиляцию и компоновку программы и произвес­ти ее отладку.

Задания к лабораторной работе.

Вариант 1.

Написать функцию, выполняющую ввод строки с клавиатуры с эхо-печатью .и контролем длины. Прототип функции:

int len = varl(char *buf, int maxlen);

len - действительная длина строки

buf - массив для ввода строки

maxlen - длина массива buf (максимальная длина строки)

Вариант 2.

Написать функцию для чтения/установки системной даты. Прототип функции:

void var2(int *day, Int *month, Int *year, int flag);

day - день

month - месяц

year - год

flag - Режим работы: 0 - чтение даты, 1 - установка даты

Вариант 3.

Написать функцию для чтения/установки системного време­ни. Прототип функции:

void var3(int •hour, int.*min. int *sec, int flag);

hour- часы

min - минуты

sec - секунды

flag - Режим работы:

0 - чтение времени,

1 - установка времени

Вариант 4.

Написать функцию для ввода строки пароля. Функция должна вводить строку, выводя на экран вместо эхо-печати указанный символ. Прототип функции:

int len = var4(char *str, int sym);

len - длина введенной строки

str - буфер для ввода строки

sym - символ-заполнитель для печати

Вариант 5.

Написать функцию для чтения текущего каталога. Прототип функции:

int len = var5(char *dir, char disk);

len - действительная длина инени каталога

dir - буфер для записи имени каталога

disk - символьное обозначение диска ('А', 'В', ...)

Вариант 6.

Написать функцию для проверки свободного пространства на диске. Прототип функции:

void var6(char disk, int *free, int *sect, int *bytes);

disk - символьное обозначение диска ('А', 'В', ...)

free - число свободных кластеров

sect - число секторов в кластере

bytes - число байтов в секторе

5. Контрольные вопросы

1. Структура таблицы прерываний

2. Алгоритм выполнения команды INT

3. Общие правила работы с интерфейсом DOS

Лабораторная работа N 5

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