Обратите внимание на необходимость сохранения - восстановления регистра 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
ОБРАБОТКА АППАРАТНЫХ (АСИНХРОНИЫХ) ПРЕРЫВАНИЙ.
1. Цель работы
Ознакомиться с функциями DOS, связанными с установкой вектора прерываний. Ознакомиться с особенностями написания подпрограмм обработки прерываний.
2. Краткие теоретические сведения
Для установки нового вектора Прерывания используется функция 25Н прерывания INT 21H. Предварительно в пару DS:DX необходимо повестить адрес подпрограммы - нового обработчика прерываний, а в регистр AL - номер перехватываемого вектора.
Структура подпрограммы обработки прерываний имеет ряд особенностей. Основные изних:
- обязательное сохранение и восстановление всех используемых регистров;
- обязательная установка регистра DS
- использование обращений к DOS при обработке асинхронных прерываний в большинстве случаев невозможно. Можно использовать только обращения к BIOS.
- возврат из подпрограммы выполняется командой IRET
Пример реализации подпрограмм установки вектора и обработки прерываний приведен ниже.
.MODEL small,с
.286 ;разрешение использования
;PUSHA, РОРА
EXTRN sym:ВУТЕ ;глобальные данные из си-программы
.CODE
new_int PROC FAR ;обработчик прерывания
PUSHA ;сохранение всех регистров
MOV AX, SEG sym ;установка нужного значения
MOV DS, AX ;сегментного регистра
;
; Здесь реализуется обработка прерываний
;
РОРА ;восстановление всех регистров
IRET ;возврат из прерывания
new_int ENDP
;-----------------------------------------------------
setvect PROC NEAR ;процедура установки вектора
PUSH DS
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.