Содержание
- 2. Рис. 1 Процедура прерывания для номера (типа) N ОП Адрес Вектор прерывания Когда обработчик прерывания получает
- 5. Кроме внешних прерываний имеется ещё один вид – внутренние прерывания процессора. Они возникают в ситуациях, требующих
- 6. Обработчики прерываний Структура обработчика прерывания и его взаимодействие с остальными компонентами программного комплекса определяются рядом факторов,
- 7. 4 Структуры простейшего обработчика прерывания I_N1 proc ; Новый обработчик выполняется после старого pushf call CS:
- 8. 4 вариант предполагает при вызове нового обработчика предварительный анализ некоторых условий на основе которого управление передается
- 9. Функции ОС для работы с векторами прерываний 35h ? AH ; Получить вектор прерывания AL ?
- 10. Нахождение минимального и максимального значения в массиве слов. ВХОД: DS:BX – адрес начала массива, CX-количество элементов
- 11. Пример обычного обработчика прерывания ( команда BOUND – INT 5 ) BOUND reg, mem ; проверка
- 12. ; обработка массива Новый обработчик прерывания 5 M1: mov ax, word ptr [bx][di] bound ax, bounds
- 13. Функции работы с системными временем и датой 2Ah ? AH ; Получение системной даты Функция возвращает
- 15. Скачать презентацию
Рис. 1 Процедура прерывания для номера (типа) N
ОП
Адрес Вектор
Рис. 1 Процедура прерывания для номера (типа) N
ОП
Адрес Вектор
Когда обработчик прерывания получает управление, он может снова разрешить маскируемые прерывания (STI), поскольку стековая организация позволяет вложение прерываний друг в друга. По окончании обработчик должен воостановить старые значения IP, CS и FLAGS (команда IRET). Процессор продолжит работу с того места программы, где произошло прерывание.
IP
CS
FLAGS
Кроме внешних прерываний имеется ещё один вид – внутренние прерывания процессора.
Они
Кроме внешних прерываний имеется ещё один вид – внутренние прерывания процессора.
Они
INT номер ; Прерывание: SP ? SP – 2; FLAGS ? [SS:SP];
SP ? SP – 2; CS ? [SS:SP];
SP ? SP – 2; IP ? [SS:SP];
[( номер * 4 )] ? IP ; [(номер * 4 +2)] ? CS
INT ; однобайтовая команда, тип – 3 ( INT 3h ), используется при отладке программ ( ввод точек прерывания)
INTO : прерывание при переполнении, если OF = 1: [ 10h ] ? IP, [ 12h ] ? CS .
IRET : Возврат из обработчика прерывания: [ SS:SP ] ? IP ; SP ? SP + 2:
[ SS:SP ] ? CS ; SP ? SP + 2:
[ SS:SP ] ? FLAGS ; SP ? SP + 2:
Обработчики прерываний
Структура обработчика прерывания и его взаимодействие с остальными компонентами программного
Обработчики прерываний
Структура обработчика прерывания и его взаимодействие с остальными компонентами программного
Прерывания, инициализирующие обработчик, могут быть аппаратными (от внешних устройств) или программными ( int N );
Обработчик может входить в состав прикладной программы или быть резидентным;
Вектор обрабатываемого прерывания может быть свободным или использоваться системой;
Если вектор уже используется системой ( т. е. в составе ОС или BIOS есть системный обработчик прерываний с соответствующим номером), то новый обработчик может полностью заменить системный или «сцепляться» с ним;
В случае сцепления с системным, новый может выполнять свои функции до системного или после него;
При вызове обработчика прерываний содержимое регистров SS, DS, ES, GS, FS не изменяется. Данные обработчика находятся в сегменте кода ( CS ), и при обращении к ним надо использовать явное приведение сегмента, например: mov bx, CS: ar1. Обработчик должен заканчиваться командой IRET, которая восстанавливает IP, CS, FLAGS.
Структура простейшего обработчика прерывания:
INT_NEW PROC
…………….
……..
IRET
OLD_INT DD ?
INT_NEW ENDP
4 Структуры простейшего обработчика прерывания
I_N1 proc ; Новый обработчик выполняется после
4 Структуры простейшего обработчика прерывания
I_N1 proc ; Новый обработчик выполняется после
pushf
call CS: OLD_INT
….. ; обработчик пользователя
iret
I_N1 endp
I_N2 proc
….. ; обработчик пользователя
jmp CS: OLD_INT
I_N2 endp
I_N3 proc
….. : новый до системного
pushf
call CS: OLD_INT
….. ; новый после системного
iret
I_N3 endp
4 вариант предполагает при вызове нового обработчика предварительный анализ некоторых условий
на
4 вариант предполагает при вызове нового обработчика предварительный анализ некоторых условий
на
I_N4 PROC
…….. ; анализ условий
…….
Jcond M1 ; переход при выполнении условий к новому обработчику
JMP CS: OLD_INT : переход к системному обработчику
M1: ……. ; новый обработчик
…….
IRET
I_N4 ENDP
Функции ОС для работы с векторами прерываний
35h ? AH ; Получить
Функции ОС для работы с векторами прерываний
35h ? AH ; Получить
AL ? номер вектора прерывания
Возвращает: в ES:BX текущее значение вектора прерывания.
25h ? AH ; Изменить вектор прерывания
DS:DX ? новое значение вектора прерывания
AL ? номер прерывания
Пример:
mov ax, 25NNh ; NN – номер прерывания
lea dx, new_NN ; эффективный адрес нового обработчика прерывания NN
push ds
push cs
pop ds
int 21h
pop ds
Нахождение минимального и максимального значения в массиве слов. ВХОД: DS:BX –
Нахождение минимального и максимального значения в массиве слов. ВХОД: DS:BX –
Minmax proc near
push 0
pop es
mov eax, dword prt es:[5*4]
mov dword ptr old_int5, eax
mov word prt es: [5*4], offset int5_new
mov word prt es: [5*4]+2, cs
mov ax, word prt [bx]
mov word prt min_bound, ax
mov word prt max_bound, ax
mov di, 2
M1: mov ax, word prt [bx][di]
bound ax, bounds
add di, 2
loop M1
mov eax, dword ptr old_int5
mov dword ptr es:[5*4], eax
mov ax, word ptr max_bound
mov bx, word ptr min_bound
ret
bounds:
min_bound dw ?
max_bound dw ?
old_int5 dd ?
int5_new proc far
cmp ax, word ptr min_bound
jl M2 ; если не меньше – это нарушение
; верхней границы
mov word ptr max_bound, ax
iret
M2:
mov word ptr min_bound, ax
iret
int5_new endp
Minmax endp
Пример обычного обработчика прерывания ( команда BOUND – INT 5 )
BOUND
Пример обычного обработчика прерывания ( команда BOUND – INT 5 )
BOUND
Пример: Нахождение минимального и максимального значения элементов в массиве слов, адрес которого задан в DS:DX, количество элементов в СХ. Результат – в АХ максимальный элемент, в ВХ – минимальный элемент.
minmax proc near
push 0 ; mov ax, 3505h
pop es ; int 21h
mov eax, dword ptr es: [5*4] ; mov word ptr old_int5, bx
mov dword ptr old_int5, eax ; mov word ptr old_int5 +2, es
mov word ptr es: [5*4], offset new_5 ; mov ax, 2505h
mov word ptr es: [5*4] + 2, cs ; mov dx, offset new_5
; push ds push cx pop ds для сом. не нужны
mov ax, [bx] ; int 21h
mov word ptr min, ax ; pop ds - для сом. не нужна
mov word ptr max, ax
mov di, 2
; обработка массива Новый обработчик прерывания 5
M1: mov ax, word
; обработка массива Новый обработчик прерывания 5
M1: mov ax, word
bound ax, bounds
add di, 2
loop M1
; восстановить старый обработчик (*)
mov eax, dword ptr old_int5
mov dword ptr es: [5*4], ax
; вернуть результат
mov ax, max
mov bx, min
ret
bounds:
min dw ?
max dw ?
old_int5 dd ?
;(*) для второго варианта:
mov ax, 2505h
push ds ; для сом. не нужны
lds dx, old_int5
int 21h
pop ds ; для сом. не нужны
new_5 proc far
cmp ax, word ptr min
jl its_lower
mov word ptr max, ax
iret
Its_lower: mov word ptr min, ax
iret
new_5 endp
minmax endp
Функции работы с системными временем и датой
2Ah ? AH ; Получение
Функции работы с системными временем и датой
2Ah ? AH ; Получение
Функция возвращает в регистрах:
AL – день недели ( 0 – воскресенье, …, 6 – суббота ); CX - год ( 1980 – 2099 );
DH - месяц ( 1 – 12 ); DL - число (1 – 31 ).
2Bh ? AH ; Изменение даты
Входные данные:
CX ? год ( до 2099 ); DH ? месяц ( 1 – 12 ):
DL ? число ( 1 – 31 ). Функция возвращает в AL – 00h, если дата действительная,
FFh, если дата недействительная.
2Ch ? AH ; Получение системного времени
Функция возвращает в регистрах:
CH - час ( 0 – 23 ); CL - минуты ( 0 – 59 ); DH - секунды ( 0 – 59 ); DL – сотые доли сек.
2Dh ? AH ; Изменение системного времени
Входные данные:
CH - час ( 0 – 23 ); CL - минуты ( 0 – 59 ); DH - секунды ( 0 – 59 ); DL – сотые доли сек.