29
1 Подсистема прерываний Схема подсистемы прерываний

Подсистема прерываний Схема подсистемы прерываний

Embed Size (px)

DESCRIPTION

Подсистема прерываний Схема подсистемы прерываний. Процедура прерывания. 1) Проверяется установка флажка IF (для немаскируемых прерываний этот пункт игнорируется): 1- прерывания разрешены, 0 - прерывания запрещены; 2) Если прерывание разрешено, то PUSHF PUSH CS PUSH IP - PowerPoint PPT Presentation

Citation preview

Page 1: Подсистема прерываний Схема подсистемы прерываний

1

Подсистема прерыванийСхема подсистемы прерываний

Page 2: Подсистема прерываний Схема подсистемы прерываний

2

Процедура прерывания 1) Проверяется установка флажка IF (для немаскируемых

прерываний этот пункт игнорируется):

1- прерывания разрешены, 0 - прерывания запрещены;

2) Если прерывание разрешено, то PUSHF PUSH CS PUSH IP

3) mov CS, <Сегмент программы обработки прерывания>

mov IP, <Смещение программы обработки прерывания>

4) После чего начинается выполнение программы обработки прерывания.

5) По завершению программы обработки:

POP IP

POP CS

POPF

Page 3: Подсистема прерываний Схема подсистемы прерываний

3

Структура обработчика прерывания

<Имя> proc far

<Сохранение содержимого регистров>

<Обработка>

<Восстановление содержимого регистров>

iret ; возврат управления

<Имя> endp

Page 4: Подсистема прерываний Схема подсистемы прерываний

4

Классификация прерываний I. Прерывания микропроцессора(0Н-6Н):0 - прерывание от схем контроля микропроцессора -

“Деление на 0”;1 - прерывание специального режима работы

микропроцессора, устанавливаемого, если флажок TF=1 - “Пошаговое выполнение”;

2 - немаскируемое прерывание;3 - прерывание микропроцессора, осуществляемого

при обнаружении адреса останова - “Точка останова”;

4 - инициируется по команде INTO, используемой после выполнения арифметической операции - “Переполнение”;

5 - печать содержимого экрана - инициируется нажатием клавиши Print Screen.

Page 5: Подсистема прерываний Схема подсистемы прерываний

5

Классификация прерываний (2)

II. Прерывания микроконтроллера прерываний (8H-0FH, 70Н-77Н):

8 – прерывание от таймера;9 – прерывание от клавиатуры;0BH – последовательный порт COM2;0CH – последовательный порт COM1;0DH – параллельный порт LPT2;0EH – прерывание от НГМД (дискеты);0FH – параллельный порт LPT1;70H – прерывание от часов реального времени;74H – мышь;75H – числовой сопроцессор;76H – контроллер винчестера (1 канал);77H – контроллер винчестера (2 канал).

Page 6: Подсистема прерываний Схема подсистемы прерываний

6

Классификация прерываний (3)

III. Процедуры BIOS (10Н-1AH, 33H):

10Н – управление дисплеем;

11Н – определение конфигурации ПЭВМ;

12Н – определение объема памяти ПЭВМ;

13Н – управление дисковой памятью;

14Н – управление асинхронной связью;

16Н – управление клавиатурой;

17Н – управление печатающим устройством;

1AH – управление часами реального времени;

33H – управление мышью.

Page 7: Подсистема прерываний Схема подсистемы прерываний

7

Классификация прерываний (4)

IV. Процедуры пользователя (1BH и 1CH):1BH – возможность подключения при

обнаружении Ctrl-Break;1СН – возможность подключения к обработке

кванта таймера.V. Указатели системных таблиц (1DH-1FH,

41H):1DH - таблица параметров видео;1EH - таблица параметров дискеты;1FH - таблица символов для графического

режима;41H - таблица параметров жесткого диска.

Page 8: Подсистема прерываний Схема подсистемы прерываний

8

Классификация прерываний (5)

VI. Прерывания DOS (20H- 3FH):20H - нормальное завершение программы и возврат

управления DOS;21H - вызов диспетчера функций DOS; 22H - адрес пользовательской программы обработки

нормального завершения программы;23H - адрес пользовательской программы обработки

завершения по Ctrl-Break;24H - адрес пользовательской программы обработки

завершения по ошибке;25H - абсолютное чтение секторов с диска;26H - абсолютная запись секторов на диск;27H - завершение программы с сохранением в памяти.VII. Прерывания, зарезервированные для

пользователей (60H-66H, 0F0H-0FEH).

Page 9: Подсистема прерываний Схема подсистемы прерываний

9

Микроконтроллер прерываний

Контроллерпрерываний

IRQ8

IRQ9

IRQ10

IRQ11

IRQ12

IRQ13

IRQ14

IRQ15

Контроллерпрерываний

IRQ0

IRQ1

IRQ3

IRQ4

IRQ5

IRQ6

IRQ7

МПint

номер

Базовый вектор 70hПорты А0h, A1h

Базовый вектор 8hПорты 20h, 21h

Page 10: Подсистема прерываний Схема подсистемы прерываний

10

Стандартное подключение устройствIRQ Вектор Устройство Бит

регистра маски

IRQ0 08h Таймер 0

IRQ1 09h Клавиатура 1

IRQ2 0Ah Вход от схемы 2 2

IRQ8 70h CMOS и часы 0

IRQ12 74h Мышь 4

IRQ13 75h Числовой сопроцессор 5

IRQ14 76h Контроллер винчестера (1 канал) 6

IRQ15 77h Контроллер винчестера (2 канал) 7

IRQ3 0Вh Последовательный порт COM2 3

IRQ4 0Сh Последовательный порт COM1 4

IRQ5 0Dh Параллельный порт LPT2 5

IRQ6 0Eh Контроллер гибких дисков 6

IRQ7 0Fh Параллельный порт LPT1 7

Page 11: Подсистема прерываний Схема подсистемы прерываний

13

Сервисные функции MS DOS int 21h

1. Функции ввода с клавиатуры

Примеры:

1) Ввод символа:

mov AH,1

int 21h

AH = 1 Ожидание ввода с клавиатуры с «эхо» и проверкой на CTRL-Break

Вх. -

Вых.: AL = символ

2) Ввод строки String DB 50,49 dup (?) … lea DX, String mov AH,0AH int 21H

50

50 3 ‘A’ ‘B’ ‘C’ 13 10

реальная длинастроки

размер буфера

AH = 0AH Чтение строки в буфер Вх.: DS:DX – адрес буфера, первый байт – длина буфера

Вых.: второй байт – реальная длина строки

Page 12: Подсистема прерываний Схема подсистемы прерываний

14

Сервисные функции MS DOS int 21h (2)

2. Функции вывода

Примеры:

1) Вывод символа:

mov DL,<символ>

mov AH,2

int 21h

AH = 2 Вывод символа с проверкой на CTRL-Break

Вх.: DL = символ

Вых.: -

2) Вывод строки:

MSG DB ‘ Пример’, 13, 10, ‘$’ … lea DX, MSG mov AH,9 int 21H

AH = 9H Вывод строки Вх.: DS:DX – адрес строки, завершающийся знаком $

Page 13: Подсистема прерываний Схема подсистемы прерываний

15

Программа извлечения корня квадратного

1 = 12

1+3 = 4 = 22

1+3+5 = 9 = 32

title primerCode segment assume CS:Code,DS:Code;Данныеotw db 13,10,' n= 'rez db ' ',13,10,'$'string db 10,10 dup (0)zap db 'Введите число <65024:',13,10,'$‘begin proc far push DS mov AX,0 push AX mov AX,Code mov DS,AX

Page 14: Подсистема прерываний Схема подсистемы прерываний

16

Программа извлечения корня квадратного (2)

;Ввод

vvod: lea DX,zap

mov AH,9h

int 21h

lea DX,string

mov AH,0ah

int 21h

10

String

Page 15: Подсистема прерываний Схема подсистемы прерываний

17

Программа извлечения корня квадратного (3) mov CL,string+1 ;Преобразование

mov CH,0

mov BH,'9'

mov BL,'0'

lea SI,string+2

cld

xor AX,AX

cycle: mov DI,10

mul DI

mov DI,AX

lodsb

cmp AL,BL

jb vvod

cmp AL,BH

ja vvod

sub AL,30h

cbw

add AX,DI

loop cycle

10 N 32 31 33 36 34

String

N

‘2 1 3 6 4’

SI

Page 16: Подсистема прерываний Схема подсистемы прерываний

18

Программа извлечения корня квадратного (4)

;Вычисление sqrt(dx#ax)

mov BX,1

mov CX,0

mov DI,1 ; сумма

cycl: cmp DI,AX

ja preobr

add BX,2

add DI,BX

jc vvod

inc CX

jmp cycl

ND:=1

N:=0

S:=1

ND:=ND+2

S:=S+ND

N:=N+1

S>Ccycl

да

нет

Page 17: Подсистема прерываний Схема подсистемы прерываний

19

Программа извлечения корня квадратного (5);Преобразованиеpreobr: mov AX,CX mov CX,3 mov DI,2 mov BX,10again: cwd div BX add DL,30h mov rez[DI],DL dec DI loop again;Вывод lea DX,otw mov AH,9 int 21h retbegin endpcode ends end begin

Page 18: Подсистема прерываний Схема подсистемы прерываний

21

Структура загрузочного модуля (.exe)Структура заголовка .exe:

0 2 ‘MZ’ - маркер модуля .exe

2 2 длина неполной последней страницы

4 2 количество страниц образа программы

6 2 число элементов в таблице перемещений

8 2 длина заголовка в параграфах

А 2 мин. память за концом программы

С 2 мах. память за концом программы

Е 2 сегментное смещение сегмента стека SS

10 2 значение регистра SP при запуске

12 2 контрольная сумма файла

14 2 значение регистра IP при запуске

16 2 сегментное смещение сегмента кодов CS

18 2 смещение в файле таблицы перемещений

1А 2 номер оверлея

1С 4*[EXE+6] таблица перемещений

Заголовок

Образпрограммы

Образпрограммы

exe

com

Структура абсолютного модуля

Page 19: Подсистема прерываний Схема подсистемы прерываний

22

Загрузка программ

org 100H

Begin: …

int 20h

PSP

Сегменткода

Сегментданных

DS=ES==CS=SS

Сегментстека

SS

256 байт

Модуль .com

push DS

mov AX,0

push AX

mov AX, Data

mov DS, AX

ret

PSP

Сегменткода

DS=ES

CS

256 байт

Модуль .exe

IP=100hIP

SP Cтек

SP = 64 Кб

Page 20: Подсистема прерываний Схема подсистемы прерываний

23

Префикс программного сегмента (PSP)0 2 int 20h (CD 20);

2 2 сегментный адрес первого свободного байта;

6 2 размер первого сегмента для com файлов;

0Ah 4 адрес int 22h;

0Eh 4 адрес int 23h;

12h 4 адрес int 24h;

16h 2 сегментный адрес PSP родителя;

18h 20 JFT

2Сh 2 сегментный адрес блока окружения;

2Eh 4 SS:SP при входе в последний вызов int 21h;

32h 2 число элементов в JFT;

34h 4 адрес JFT;

80h 1 длина строки аргументов в командной строке;

81h 127 строка аргументов командной строки.

Page 21: Подсистема прерываний Схема подсистемы прерываний

24

Завершение программ

1. int 20h – СS должен указывать на PSP

2. mov AH,4Ch – при любых значениях регистров

int 21h

3. int 27h – с сохранением программы в памяти, СS должен

указывать на PSP

4. mov AH,31h

int 21h – с сохранением программы в памяти, при любых

значениях регистров

Page 22: Подсистема прерываний Схема подсистемы прерываний

25

Директива описания сегмента<Имя сегмента> SEGMENT <выравнивание> <тип> <класс>

<Имя сегмента> ENDS

где <выравнивание>: BYTE, WORD, PARA, PAGE

<тип>: PUBLIC, STACK, COMMON, AT <адрес>

<класс>: ‘STACK’, ‘CODE’, ‘DATA’

1. Задание и модификация

адресов сегментов:

ASSUME CS:CODE, DS:DATA

mov AX,DATA

mov DS,AX

ASSUME DS:DATA1

mov AX,DATA1

mov DS,AX

2. Явное указание сегментного регистра:

CS:A

ES:[80h]

Page 23: Подсистема прерываний Схема подсистемы прерываний

26

Пример создания многосегментного загрузочного модуля

<имя сегмента> SEGMENT STACK DB 3000 DUB (?)<имя сегмента> ENDS

<имя сегмента> SEGMENT <данные><имя сегмента> ENDS END <имя точки входа >

<имя сегмента> SEGMENT ASSUME …EXTRN <имя внешнего объекта >:<тип>PUBLIC <имя внутреннего объекта><имя процедуры> PROC FAR

PUSH DSMOV AX, 0PUSH AXMOV AX, <имя сегмента>MOV DS, AX<тело процедуры>RET

<имя процедуры > ENDP<имя процедуры> PROC NEAR

<тело процедуры><имя процедуры> ENDP<имя сегмента> ENDS

Page 24: Подсистема прерываний Схема подсистемы прерываний

27

Пример создания многосегментного абсолютного модуля

Code segmentassume CS:Code, DS:Dataorg 100H

Begin: push CSpop BXmov AX,offset e+15mov CL,4shr AX,CLadd AX,BXmov DS,AX…mov AH,4Chint 21h

e EQU $Code endsData segment para

…Data ends

end begin

PSP

Сегменткода

DS=ES==CS=SS 256 байт

Модуль .com

IP=100h

Сегментданных

е

Page 25: Подсистема прерываний Схема подсистемы прерываний

28

Инсталлятор .exeCode segment

assume CS:Code,Ds:Codeuser proc far <обработка>

iretfinish equ $user endpset_up proc far push DS mov AX,0 push AX mov DX,offset user mov AX,seg user mov DS,AX mov AL,<номер int> mov AH,25H int 21H mov DX,finish+100H mov byte ptr ES:1,27H retset_up endpCode ends end set_up

PSP

Сегмент кода

DS=ES

CS

Модуль .exe

IPОбработчик

Инсталлятор

CD 20

finish

Page 26: Подсистема прерываний Схема подсистемы прерываний

29

Сегмент кода

Инсталлятор .com

Code segment assume

CS:Code,Ds:Code org 100Hbegin: jmp short set_upuser proc far <обработка > iret finish equ $user endpset_up: mov DX,offset user mov AL,<номер int>

mov AH,25H int 21H lea DX,finish int 27HCode ends end set_up

PSPDS=ES==CS=SS

Модуль .com

IP=100hОбработчик

Инсталлятор

finish

Page 27: Подсистема прерываний Схема подсистемы прерываний

33

Резидентный обработчик int 1Ch(Ex3_1)

code segment

; Резидент int 1CH

org 100h

assume cs:code,ds:code

begin: jmp start

tik db ?

nch db 0

process:

inc byte ptr cs:tik

mp byte ptr cs:tik,10

jl a1

push es

push ax

В момент вызоварегистр DS не загружен

PSP

CS,DS,ES,SSCS

Программа

Int 8h

Int 1ch

Page 28: Подсистема прерываний Схема подсистемы прерываний

34

Резидентный обработчик int 1Ch (2)

mov ax,0b800h mov es,ax mov byte ptr cs:tik,0 inc byte ptr cs:nch mov al,cs:nch mov es:[0],al mov al,00011110B mov es:[1],al pop ax pop esa1: push ax pop ax iret

ESВидеопамять

Кодсимвола

Байт-атрибут

Page 29: Подсистема прерываний Схема подсистемы прерываний

35

Инсталляторstart: mov ax,251ch lea dx,process int 21h mov byte ptr tik,al lea dx,start int 27hcode ends end begin

Сегмент кода

PSPDS=ES==CS=SS

Модуль .com

IP=100hОбработчик

Инсталлятор

start