Разработка прерывания

Автор работы: Пользователь скрыл имя, 03 Мая 2012 в 10:50, курсовая работа

Краткое описание

Разработать обработчик прерывания на встроенном Ассемблере в котором введенный текст выделялся миганием букв в текстовом режиме. Для реализации поставленной задачи использовать встроенный ассемблер языка Паскаль.

Содержание

ЗАДАНИЕ НА КУРСОВУЮ РАБОТУ 3
ОПИСАНИЕ ОБРАБОТЧИКА ПРЕРЫВАНИЯ 3
ОПИСАНИЕ АЛГОРИТМА ПРЕРЫВАНИЯ 3
ТЕКСТ ПРОГРАММЫ 4
РЕЗУЛЬТАТЫ РАБОТЫ ПРОГРАММЫ 5
ВЫВОД ПО ПРОДЕЛАННОЙ РАБОТЕ 5

Прикрепленные файлы: 1 файл

Отчет по курсовой Прерывания.doc

— 103.00 Кб (Скачать документ)


Федеральное агентство по образованию

Государственное образовательное учреждение

высшего профессионального образования

Ижевский государственный технический университет

Чайковский технологический институт (филиал) ИжГТУ

 

 

 

Кафедра информатики и вычислительной техники

 

 

 

ОТЧЕТ

по курсовой работе

по дисциплине

«Системное прораммное обеспечение»

на тему:

«Разработка прерывания»

 

 

 

 

 

 

 

 

 

Выполнил 

___________(подпись)

студент(ка) группы АСОИиУ10з  Прокопьева Ю.В.

Руководитель

___________(подпись)

преподаватель кафедры ИВТ

Русских

 

 

 

 

 

 

Чайковский 2012
СОДЕРЖАНИЕ

 

ЗАДАНИЕ НА КУРСОВУЮ РАБОТУ

ОПИСАНИЕ ОБРАБОТЧИКА ПРЕРЫВАНИЯ

ОПИСАНИЕ АЛГОРИТМА ПРЕРЫВАНИЯ

ТЕКСТ ПРОГРАММЫ

РЕЗУЛЬТАТЫ РАБОТЫ ПРОГРАММЫ

ВЫВОД ПО ПРОДЕЛАННОЙ РАБОТЕ

 


ЗАДАНИЕ НА КУРСОВУЮ РАБОТУ

Разработать обработчик прерывания на встроенном Ассемблере в котором введенный текст выделялся миганием букв в текстовом режиме. Для реализации поставленной задачи использовать встроенный ассемблер языка Паскаль.

              ОПИСАНИЕ ОБРАБОТЧИКА ПРЕРЫВАНИЯ

 

Система прерываний любого ПК является его важнейшей частью, позволяющей быстро реагировать на события, требующие неотложной обработки процессором, например, сигналы от периферийных устройств (клавиатура, принтер, мышь, и т. п.). Прерывание заставляет процессор временно прекратить выполнение текущей программы (по завершению текущей программы) и перейти на выполнение процедуры обработки прерывания 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

 



Информация о работе Разработка прерывания