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

Прерывания.

Прерывание (interrupt) – это аппаратная функция, вызывающая приостановку операций CPU, запоминание его состояния и выполнение специальной программы, которая называется программой обработки прерывания (interrupt service routine - ISR) или обработчиком прерывания (interrupt handler).

Существует три класса прерываний:

  • внутренние

  • внешние (аппаратные)

  • программные

Внутренние прерывания инициируются состоянием самого процессора (например, деление на ноль)

Внешние – сигналом, подаваемым в CPU другими компонентами вычислительной системы (например, при любом нажатии на клавишу).

Программные прерывания – специальной командой INT.

Независимо от источника, действия CPU по обслуживанию прерывания всегда выполняются одинаково, как для аппаратного, так и для программных прерываний.

Микропроцессоры семейства 8086 способны обрабатывать 256 типов прерываний. Каждое прерывание имеет номер от 0 до 255.

Начало оперативной памяти от адреса 0000h до 03FFh отводится под векторы прерываний. Вектор прерывания – это 2 слова памяти (4 Байта), в которых хранятся адреса программ обработки прерываний (ISR). В старшее слово записывается сегментный адрес ISR, в младшее слово – сещение ISR, то етсь относительный адрес точки входа ISR в сегменте. Вектор 0 располагается, начиная с адреса 0, вектор 1 – с адреса 4, вектор 2 – с адреса 8 и т.д. Вектор с номером N занимает, таким образом, байты с N*4 до N*4+3.

Получив сигнал на выполнение процедуры прерывания с определенным номером, CPU сохраняет в стеке выполняемой программы текущее содержимое трех регистров процессора: регистра флагов, CS и IP. Два последних образуют полный адрем возврата в прерванную программу. Далее процессор загружает CS и IP из соответствующеговектора прерывания, осуществляя тем самым переход на ISR.

Программа ISR обычно заканчивается командой возврата из прерывания iret (interrupt return - возврат из прерывания), которая выполняет обратные действия - загрузку IP, CS и регистра флагов из стека, что приводит к возврату в основную программу.

Большая часть векторов прерывания предназначена для выполнения определенных действий и автоматически заменяется адресами системных программ при загрузке системы; часть векторов зарезервирована для будущих применений, а часть (конкретно с номерами 60h...66h) свободна и может использоваться в прикладных программах.

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

code_seg segment

assume cs:code_seg, ds:code_seg, ss:code_seg

org 100h

start:

jmp begin

line db 2

column db 10

sym db 01h

;

begin:

mov ah,25h ;функция заполнения вектора прерывания

mov al,65h ;номер вектора

mov dx,offset new_65h ;смещение обработчика

int 21h

;

gogo:

int 65h

mov ah,02h ;функция позиционирования

mov bh,0 ;видеостраница

mov dh,line ;строка

mov dl,column ;столбец

int 10h

;

mov ah,0ah ;функция вывода символа без атрибута

mov al,sym ;символ

mov bh,0 ;видеостраница

mov cx,60 ;коэффициент повторения

int 10h

;

inc sym ;следующий символ

inc line ;следующая строка

mov ah,08h ;функция вывода без эха,

; чувствительна на Ctrl+C

int 21h

;

jmp gogo

;

new_65h proc near

mov ah,06h ;функция задания окна

mov al,0 ;режим создания (нет прокрутки)

mov bh,1bh ;атрибут всех символов в окне

;(светло-бирюзовые символы, синий фон)

mov cx,0 ;левый верхний угол 0,0

mov dh,24 ;нижняя Y-координата

mov dl,79 ;правая X-координата

int 10h

iret

new_65h endp

code_seg ends

end start

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