Автор работы: Пользователь скрыл имя, 03 Мая 2012 в 10:50, курсовая работа
Разработать обработчик прерывания на встроенном Ассемблере в котором введенный текст выделялся миганием букв в текстовом режиме. Для реализации поставленной задачи использовать встроенный ассемблер языка Паскаль.
ЗАДАНИЕ НА КУРСОВУЮ РАБОТУ 3
ОПИСАНИЕ ОБРАБОТЧИКА ПРЕРЫВАНИЯ 3
ОПИСАНИЕ АЛГОРИТМА ПРЕРЫВАНИЯ 3
ТЕКСТ ПРОГРАММЫ 4
РЕЗУЛЬТАТЫ РАБОТЫ ПРОГРАММЫ 5
ВЫВОД ПО ПРОДЕЛАННОЙ РАБОТЕ 5
Федеральное агентство по образованию
Государственное образовательное учреждение
высшего профессионального образования
Ижевский государственный технический университет
Чайковский технологический институт (филиал) ИжГТУ
Кафедра информатики и вычислительной техники
ОТЧЕТ
по курсовой работе
по дисциплине
«Системное прораммное обеспечение»
на тему:
«Разработка прерывания»
Выполнил | ___________(подпись) | студент(ка) группы АСОИиУ10з Прокопьева Ю.В. |
Руководитель | ___________(подпись) | преподаватель кафедры ИВТ Русских |
ЗАДАНИЕ НА КУРСОВУЮ РАБОТУ
ОПИСАНИЕ ОБРАБОТЧИКА ПРЕРЫВАНИЯ
ОПИСАНИЕ АЛГОРИТМА ПРЕРЫВАНИЯ
ТЕКСТ ПРОГРАММЫ
РЕЗУЛЬТАТЫ РАБОТЫ ПРОГРАММЫ
ВЫВОД ПО ПРОДЕЛАННОЙ РАБОТЕ
Разработать обработчик прерывания на встроенном Ассемблере в котором введенный текст выделялся миганием букв в текстовом режиме. Для реализации поставленной задачи использовать встроенный ассемблер языка Паскаль.
Система прерываний любого ПК является его важнейшей частью, позволяющей быстро реагировать на события, требующие неотложной обработки процессором, например, сигналы от периферийных устройств (клавиатура, принтер, мышь, и т. п.). Прерывание заставляет процессор временно прекратить выполнение текущей программы (по завершению текущей программы) и перейти на выполнение процедуры обработки прерывания ISR (interrupt service routine), которая считается более важной. Исполнение прерванной программы возобновляется после окончания обработки прерывания.
Для реализации нашей задачи дополним стандартное прерывание клавиатуры (прерывание INT 09h) дополнительным обработчиком, который будет проверять введен ли текст, и если введен
текст, то в видеопамять будет записываться атрибут мигания символа (адрес начала нулевой страницы видеопамяти: 0b800h).
Основной алгоритм программы:
1. Сохраняем прерывание клавиатуры INT 09h;
2. Переназначаем стандартный обработчик на нашу процедуру;
3. Оставляем программу в памяти.
Алгоритм процедуры обработки прерывания:
1. Вызываем стандартный обработчик прерывания;
2. Определяем положение введенного символа на экране;
3. Вычисляем положение символа в видеопамяти нулевой страницы (адрес начала: 0b800h – на каждый символ отводиться два байта, байт на сам символ и байт на его атрибут, который мы и будем менять);
4. Считываем символ в переменную (в нашем случае в регистр);
5. Если символ является элементом множества текстовых символов, то меняем его атрибут на атрибут мигания (87h);
6. Выход из процедуры.
{ Разработать обработчик прерывания на встроенном Ассемблере в котором
введенный текст выделялся миганием букв в текстовом режиме.
Исп.: Прокопьева Ю.В.
}
{$G+}
{$M $800, 0, 0}
program Kontr;
uses Dos;
var
KbdIntVec: procedure;
{$F+} { Включаем дальний (FAR) тип вызова }
procedure KeyClick; interrupt;
begin
KbdIntVec;
asm
pusha; {копируем регистры общего назначения в стек}
mov AH, 03h; {Определить положение курсора}
mov BH, 0; {Установить страницу 0}
int 10h; {Вызвать BIOS}
mov AL, 160; {Вычисляем положение символа в видеопамяти }
mul DH;
add AL, DL;
add AL, DL;
mov DI, AX;
sub DI, 2;
mov AX, 0b800h;
mov ES, AX;
mov AL, ES:[DI]; {Считываем символ из видеопамяти в регистр AL}
cmp AL, 'A'; {Проверям, больше ли код символа лат. буквы 'A'}
jb @end; {Если нет, то выход}
cmp AL, 'z'; {Проверям, меньше ли код символа лат. буквы 'z'}
ja @rus; {Если нет, то проверяем на кириллицу}
call @mig; {Если да, значит символ латиница, устанавливаем атрибут мигания}
jmp @end;
@rus:
cmp AL, 'А'; {Проверям, больше ли код символа рус. буквы 'А'}
jb @end; {Если нет, то выход}
cmp AL, 'я'; {Проверям, меньше ли код символа рус. буквы 'я'}
ja @end; {Если нет, то выход}
call @mig; {Если да, значит символ кириллица, устанавливаем атрибут мигания}
jmp @end;
@mig:
mov AH, 87h; {Установка атрибута мигания}
mov ES:[DI+1], AH;
ret; {Возврат из процедуры}
@end:
popa; {выталкиваем регистры общего назначения из стека}
end;
InLine($9C); { PUSHF -- запоминаем флаги в стеке }
end;
{$F-}
begin
{ Устанавливаем новый обработчик событий клавиатуры }
{ $9 - прерывание клавиатуры }
GetIntVec($9, @KbdIntVec);
{ Переназначаем стандартный обработчик на нашу процедуру }
SetIntVec($9, Addr(KeyClick));
{ Оставляем программу в памяти }
Keep(0);
end.
Результат работы программы изображен на рисунке 1.
Рисунок 1 – фрагмент работы программы
В результате выполнения данной курсовой работы были получены базовые теоретические знания о механизме прерываний ПК, о системе команд встроенного ассемблера Турбо Паскаля, а также был получен практический опыт программирования на встроенном ассемблере.
3