Logo GenDocs.ru

Поиск по сайту:  

Загрузка...

С помощью языка ассемблер перехватывать прерывания от системного таймера - файл Введение.doc


С помощью языка ассемблер перехватывать прерывания от системного таймера
скачать (36.3 kb.)

Доступные файлы (4):

flag.asm
Введение.doc90kb.08.12.2009 16:04скачать
Задание.doc31kb.23.12.2009 18:04скачать
спо-титульник.doc45kb.23.12.2009 18:05скачать

содержание
Загрузка...

Введение.doc

Реклама MarketGid:
Загрузка...
Содержание

Введение………………………………………………………………………………...2

1. Выбор системных функций и разработка алгоритма……………………………...3

2. Схема алгоритма, общее описание алгоритма……………………………………..7

2.1 Основная программа…………………………………………………………..7

2.2 Функция обработчика события “сигнал системного таймера”…………….8

3. Текст программы с необходимыми комментариями……………………………...9

4. Описание программы (сведения о логической структуре и функционировании программы)…………………………………………………………………………….11

5. Заключение…………………………………………………………………………11

6. Список литературы………………………………………………………………...12
Введение
Целью выполнения курсовой работы по дисциплине «Системное программное обеспечение» является формирование у студентов опыта создания прикладных программ на основе низкоуровневых системных функций BIOS и MS DOS

Задачами курсового проектирования являются:

  1. закрепление, углубление и обобщение знаний, полученных студентами во время их обучения по дисциплине «Системное программное обеспечение»;

  2. применение полученных знаний к системному решению типовой задачи по программированию системных функций IBM PC;

  3. получение навыков работы со специальной литературой и навыков программирования на ассемблере;

  4. приобретение опыта аналитической работы и формирование соответствующих умений;

  5. формирование умений формулировать логически обоснованные предложения, рекомендации и выводы по результатам работы;


  1. ^

    Выбор системных функций и разработка алгоритма


Поставленную задачу можно разделить на две составляющие (функции):

  1. Вывод на экран флага России

  2. Перехват сообщений системного таймера и изменение их частоты путем пересчета.

Рассмотрим выбор системных функций языка Assembler для составных функций.

Для генерации цветных изображений в графическом режиме используются минимальные точки растра – пикселы или пэлы. Цветной графический адаптер CGA имеет три степени разрешения: а) низкое разрешение (не поддерживается в ROM) обеспечивает вывод 100 строк по 160 точек (т.е. четыре бита на точку). Каждая точка может иметь один из 16 стандартных цветов; б) среднее разрешение для стандартной цветной графики обеспечивает 200 строк по 320 точек. Каждый байт в этом случае представляет четыре точки (т.е. два бита на точку); в) высокое разрешение обеспечивает 200 строк по 640 точек. Поскольку в данном случае требуется 16К байт памяти, высокое разрешение достигается только в черно-белом (BW) режиме. Каждый байт здесь представляет восемь точек (т.е. один бит на точку). Нулевое значение бита дает черный цвет точки, единичное – белый.

В графическом режиме ROM содержит точечные образы только для первых 128 ASCII-кодов. Команда INT 1Fh обеспечивает доступ к 1К байтовой области в памяти, определяющей остальные 128 символов (8 байт на символ). Отображение графических байтов в видеосигналы аналогично как для среднего, так и для высокого разрешения. Память объемом 16 Кбайт для цветного дисплея позволяет хранить дополнительные страницы (экраны). Имеется четыре страницы для экранов на 80 столбцов или восемь страниц для экранов на 40 столбцов. Графический режим обеспечивает низкое разрешение (не поддерживается в ROM), среднее разрешение (для цветной графики) и высокое разрешение (для черно-белой графики). Точка растра (минимальный элемент графического изображения) представляется определенным числом битов в зависимости от графического адаптера и разрешающей способности (низкой, средней или высокой). Для графики среднего разрешения на цветном графическом адаптере CGA можно выбрать четыре цвета, один из которых принадлежит к 16 возможным цветам, а три других формируют цветовую палитру.

Программное обращение к видеодрайверу BIOS реализуется с помощью прерывания INT 10h. При работе в текстовом режиме обычно используются следующие функции драйвера:

02h - установить позицию курсора;

03h - получить позицию курсора;

05h - установить видеостраницу;

06h - инициализировать или прокрутить вверх окно;

07h - инициализировать или прокрутить вниз окно;

08h - прочитать символ и атрибут в позиции курсора;

09h - вывести символ и атрибут в позицию курсора;

0Ah - вывести символ в позицию курсора;

0Eh - вывести символ в режиме телетайпа;

10h, подфункция 3h - переключить бит мерцание/яркость;

13h - вывести строку в режиме телетайпа.

С помощью функций 06h и 07h в заданном месте экрана дисплея создаются цветные прямоугольные окна заданного размера. Если в эти окна выведен какой-либо текст, то с помощью этих функций его можно прокручивать вверх и вниз.

Функции 09h, 0Ah, 0Eh и 13h служат для вывода на экран отдельных символов и символьных строк (в цикле). Предусмотрен вывод одного и того же символа заданное число раз, что можно использовать при создании рамок и других орнаментов.

Функция 0Eh реагирует на управляющие коды, выполняя соответствующие действия. Курсор перемещается после вывода каждого символа.

Функция 13h предназначена для вывода строк с указанием атрибутов как каждого символа в отдельности, так и всей строки. Функция может выполняться в четырех вариантах в зависимости от кода режима, указываемого в регистре AL.

При выводе на экран средствами драйвера BIOS необходимо иметь в виду, что ввод с клавиатуры Ctrl/C не приводит к завершению программы. Следует опасаться бесконечных циклов вывода на экран - выход из них возможен только путем перезагрузки компьютера.

Сигналы внешних аппаратных прерываний (от таймера, клавиатуры, дисков и проч.) поступают в процессор не непосредственно, а через контроллер прерываний, в качестве которого используется микросхема Intel 8259A. Обработка аппаратного прерывания обязательно включает в себя процедуры управления контроллером прерываний. Организация системы аппаратных прерываний заключается в том, что к восьми входным выводам контроллера подключаются выводы устройств, на которых возникают сигналы прерываний. Выход INT контроллера подключается к одноименному входу микропроцессора. При этом, кроме сигнала INT, инициирующего процедуру прерывания в микропроцессоре, контроллер передает в микропроцессор по линиям данных номер вектора, через который должна быть вызвана программа обработки поступившего прерывания. Передаваемый номер вектора образуется в контроллере путем сложения базового номера, записанного в одном из его регистров, с номером входной линии, по которой поступил запрос. Номер базового вектора заносится в контроллер автоматически в процессе начальной загрузки компьютера. Контроллер программируется через порты 20h и 21h. Поскольку базовый вектор всегда равен 8, то номера векторов, закрепленных за аппаратными прерываниями, лежат в диапазоне 8h, ... , Fh.

Во внутренней структуре контроллера можно выделить четыре основные узла: регистр входных запросов, регистр маски, схему приоритетов и регистр обслуживаемых запросов в соответствии с приведенным рисунком. Все узлы контроллера восьмибитовые, по одному биту на каждый входной сигнал.

Сигнал запроса прерывания IRQ от устройства поступает на вход регистра запросов и устанавливает в 1 соответствующий бит этого регистра. Далее на пути сигнала стоит регистр маски, программируемый через порт 21h. Значение в бите маски разрешает прохождение сигнала, значение 1 - запрещает. Пройдя через маску, сигнал поступает на схему анализа приоритетов. При стандартной настройке схемы приоритетов, приоритеты сигналов IRQ снижаются по мере роста номера сигнала. Пройдя через схему анализа приоритетов, сигнал запроса прерывания поступает на вход регистра обслуживаемых запросов и дает разрешение на установку в 1 его бита (однако не устанавливает его).

Одновременно сигнал поступает на вход INT микропроцессора, который регистрирует поступление сигнала INT лишь в случае, если установлен флаг разрешения прерываний IF в регистре флагов. Сброс флага IF командой CLI запрещает все аппаратные прерывания. Микропроцессор, получив сигнал INT, отзывается на него выходным сигналом INTA, который поступает в контроллер прерывания и выполняет там два действия. Во-первых, он устанавливает бит регистра обслуживаемых запросов, разрешенный сигналом запроса прерывания. Во-вторых, он сбрасывает бит регистра запросов.

Микропроцессор, одновременно с посылкой в контроллер прерываний сигнала INTA сбрасывает флаг IF в регистре флагов, запрещая все аппаратные прерывания. Прерывания останутся запрещенными до выполнения пользователем команды STI или до установки флага IF каким-либо другим способом.

Установка 1 в бите регистра обслуживаемых запросов воздействует на схему анализа приоритетов. Установленный бит блокирует в схеме анализа приоритетов все уровни прерываний, начиная с текущего и ниже. Таким образом, если не принять специальных мер, даже после завершения обработки прерывания все, прерывания данного и более низких приоритетов останутся заблокированными. Сброс бита регистра обслуживаемых запросов осуществляется посылкой кода 20h в порт 20h. Этот код получил название команды или приказа EOI (End Of Interrupt). Команда EOI должна быть в любой программе по обработке прерываний.

Практически структуру программы обработки прерываний выбирают, исходя из конкретных условий. Часто в самом начале программы выполняют команду STI, чтобы не задерживать обработку прерываний от более приоритетных устройств (в частности, таймера). Приказ конца прерывания EOI посылается в контроллер в самом конце программы, перед завершающей командой IRET с тем, чтобы полностью исключить вложенные прерывания от запросов того же уровня. Однако сигнал прерывания того же (или более низкого уровня) может пройти между командами, реализующими приказ EOI, и командой IRET, что вызовет повторный вход в эту же программу. Чтобы избежать этого, перед командой EOI выполняют команду запрета всех прерываний CLI. Команда IRET не только восстанавливает адрес возврата в регистрах CS и IP, но и содержимое регистра флагов на момент прерывания.

В нашем случае необходимо рассмотреть прерывания вызванные сигналами системного таймера.

Прерывания это готовые процедуры, которые компьютер вызывает для выполнения определенной задачи. Существуют аппаратные и программные прерывания. Аппаратные прерывания инициируются аппаратурой, либо с системной платы, либо с карты расширения. Они могут быть вызваны сигналом микросхемы таймера, сигналом от принтера, нажатием клавиши на клавиатуре и множеством других причин. Аппаратные прерывания не координируются с работой программного обеспечения. Когда вызывается прерывание, то процессор оставляет свою работу, выполняет прерывание, а затем возвращается на прежнее

место. Для того чтобы иметь возможность вернуться точно в нужное, место программы, адрес этого места (CS:IP) запоминается на стеке, вместе с регистром флагов. Затем в CS:IP загружается адрес программы обработки прерывания и ей передается управление. Программы обработки прерываний иногда называют драйверами прерываний. Они всегда завершаются инструкцией IRET (возврат из прерывания), которая завершает процесс, начатый прерыванием, возвращая старые значения CS:IP и регистра флагов, тем самым, давая программе возможность продолжить выполнение из того же состояния. Все IBM PC используют микросхему таймера 8253 (или 8254) для согласования импульсов от микросхемы системных часов. Число циклов системных часов преобразуется в один импульс, а последовательность этих импульсов подсчитывается для определения времени, или они могут быть посланы на громкоговоритель компьютера для генерации звука определенной частоты. Микросхема 8253 имеет три идентичных независимых канала, каждый из которых может программироваться. Микросхема 8253 работает независимо от процессора. Процессор программирует микросхему и затем обращается к другим делам. Таким

образом 8253 действует как часы реального времени - она считает свои импульсы независимо от того, что происходит в компьютере. Однако, максимальный программируемый интервал составляет приблизительно 1/12 секунды. Для подсчета интервалов времени в часы и минуты нужны какие-то другие средства. Именно по этой причине импульсы от нулевого канала микросхемы таймера накапливаются в переменной, находящейся в области данных BIOS. Это накопление обычно называется подсчетом времени суток. 18.2 раза в секунду выход канала 0 обрабатывается аппаратным прерыванием (прерыванием таймера), которое ненадолго останавливает процессор и увеличивает счетчик времени суток.

Число 0 соответствует полночи 12:00; когда счетчик достигает значения эквивалентного 24 часам, он сбрасывается на ноль. Другое время в течение суток легко определяется делением показателя счетчика на 18.2 для каждой секунды. Счетчик времени суток используется в большинстве операций, связанных со временем.


^

2. Схема алгоритма, общее описание алгоритма


2.1 Основная программа


2.2 Функция обработчика события “сигнал системного таймера”



  1. Текст программы с необходимыми комментариями.

.model tiny

.code

start:

org 100h

main proc

;mov AX, data ;инициализация

mov DS,AX ;сегментного регистра DS

;Прочитаем и сохраним исходное содержимое вектора 8

mov AX,3508h

int 21h

mov word ptr old_08h,BX

mov word ptr old_08h+2,ES

;Установим наш обработчик прерываний new_08h

mov AX, 2508h

mov DX,offset new_08h

push DS ;Сохраним на время DS

push CS ;Отправим содержимое CS

pop DS ;в DS

int 21h ;Вызов DOS (функции 25h)

pop DS ;Восстановим DS

;Сымитируем действия, выполняемые в течение 3 с, просто зациклив программу

stop:

jmp stop

;Вторая ветвь программы, активизируемая по истечении 3 с

fin:

;белая полоса

MOV AH,07h

MOV AL, 09h

MOV BH, 0F7h

MOV CH,00h

MOV CL,00h

MOV DH,18h

MOV DL,4Fh

INT 10h

;синяя полоса

MOV AH,07h

MOV AL, 09h

MOV BH, 097h

MOV CH,08h

MOV CL,00h

MOV DH,18h

MOV DL,4Fh

INT 10h

;красная полоса

MOV AH,07h

MOV AL, 09h

MOV BH, 0C4h

MOV CH,18h

MOV CL,00h

MOV DH,18h

MOV DL,4Fh

INT 10h
mov CS:time, 20

jmp start

main endp

;Прикладной обработчик прерываний от таймера,

;активизируемый 18,2 раза в секунду

new_08h proc

push AX ;Сохраним два используемых

push BP ;в обработчике регистра

dec CS:time ;Декремент интервала времени

jnz outint ;Пока не 0, выйти из прерывания

;Содержимое ячейки time уменьшилось до 0, выполнить переключение программы

mov BP,SP ;ВР=текущая вершина стека

mov AX,offset fin;Смещение точки перехода

mov [BP+4],AX ;/Отправим его в стек на место IP

mov AX,seg fin ;/Сегмент точки перехода

mov [BP+6],AX ;/Отправим его в стек на место CS

outint: mov AL,20h ;/Команда EOI в контроллер

out 20h,AL; /прерываний
MOV AX,0600h ; AH=06 (прокрутка), AL=00 (весь экран)

MOV BH,07 ; нормальный атрибут

MOV CX,0000 ; верхняя левая позиция

MOV DX,184Fh ; нижняя правая позиция

INT 10h ; передача управления в BIOS

MOV AH,02 ; номер функции

MOV BH, 00 ; номер страницы

MOV DH,00 ; номер строки

MOV DL,00 ; номер столбца

INT 10h ; устанавливаем курсор


pop BP ;/Восстановим оба

pop AX ;/сохраненных регистра

iret ;/Выход из прерывания

time dw 20 ;/Ячейка для отсчета времени

new_08h endp

;/Поля данных

old_08h dd 0 ;/Ячейка для хранения исходного вектора

end start


  1. ^ Описание программы (сведения о логической структуре и функционировании программы)


Программа представляет собой исполняемый exe файл, после запуска которого на экране периодически появляется государственный флаг России. Период появлений примерно 1 раз в 2 секунды.


  1. Заключение



В результате выполнения курсового проекта был получен опыт создания прикладных программ на основе низкоуровневых системных функций BIOS и MS DOS, а так же опыт работы с продуктом Borlard TASM. Были рассмотрены принципы обработки прерываний, вывода и ввода информации в графическом и текстовом режимах, обработка сообщений системного таймера.

  1. ^

    Список литературы





  1. Методические указания для курсового проектирования по курсу «Системное программное обеспечение»/Уфимск.гос.авиац.техн.ун-т; Сост.:О.Д.Лянцев – Уфа, 1997 – 27 с.

  2. Абель П. Язык Ассемблера для IBM PC и программирования /Пер. с англ. Ю.В.Сальникова – М.; Высшая школа 1991 – 447 с.:ил.

  3. Джордейн Р. Справочник программиста персональных компьютеров типа IBM PC, XT и AT: Пер. с англ./Предисл. Н.В.Гайского – М.: Финансы и статистика, 1991 – 544 с.:ил.

  4. Скэнлон Л. Персональные ЭВМ IBM PC и XT. Программирование на языке ассемблера: Пер. с англ. – М.: Радио и связь, 1989 – 336с.:ил.

  5. Стандарты в программной документации: Методические указания к курсовому и дипломному проектированию для студентов всех специальностей. – Уфа: УАИ, 1987 – 35с.





Скачать файл (36.3 kb.)

Поиск по сайту:  

© gendocs.ru
При копировании укажите ссылку.
обратиться к администрации