Upload
shafira-franco
View
56
Download
0
Embed Size (px)
DESCRIPTION
Подсистема прерываний Схема подсистемы прерываний. Процедура прерывания. 1) Проверяется установка флажка IF (для немаскируемых прерываний этот пункт игнорируется): 1- прерывания разрешены, 0 - прерывания запрещены; 2) Если прерывание разрешено, то PUSHF PUSH CS PUSH IP - PowerPoint PPT Presentation
Citation preview
1
Подсистема прерыванийСхема подсистемы прерываний
2
Процедура прерывания 1) Проверяется установка флажка IF (для немаскируемых
прерываний этот пункт игнорируется):
1- прерывания разрешены, 0 - прерывания запрещены;
2) Если прерывание разрешено, то PUSHF PUSH CS PUSH IP
3) mov CS, <Сегмент программы обработки прерывания>
mov IP, <Смещение программы обработки прерывания>
4) После чего начинается выполнение программы обработки прерывания.
5) По завершению программы обработки:
POP IP
POP CS
POPF
3
Структура обработчика прерывания
<Имя> proc far
<Сохранение содержимого регистров>
<Обработка>
<Восстановление содержимого регистров>
iret ; возврат управления
<Имя> endp
4
Классификация прерываний I. Прерывания микропроцессора(0Н-6Н):0 - прерывание от схем контроля микропроцессора -
“Деление на 0”;1 - прерывание специального режима работы
микропроцессора, устанавливаемого, если флажок TF=1 - “Пошаговое выполнение”;
2 - немаскируемое прерывание;3 - прерывание микропроцессора, осуществляемого
при обнаружении адреса останова - “Точка останова”;
4 - инициируется по команде INTO, используемой после выполнения арифметической операции - “Переполнение”;
5 - печать содержимого экрана - инициируется нажатием клавиши Print Screen.
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 канал).
6
Классификация прерываний (3)
III. Процедуры BIOS (10Н-1AH, 33H):
10Н – управление дисплеем;
11Н – определение конфигурации ПЭВМ;
12Н – определение объема памяти ПЭВМ;
13Н – управление дисковой памятью;
14Н – управление асинхронной связью;
16Н – управление клавиатурой;
17Н – управление печатающим устройством;
1AH – управление часами реального времени;
33H – управление мышью.
7
Классификация прерываний (4)
IV. Процедуры пользователя (1BH и 1CH):1BH – возможность подключения при
обнаружении Ctrl-Break;1СН – возможность подключения к обработке
кванта таймера.V. Указатели системных таблиц (1DH-1FH,
41H):1DH - таблица параметров видео;1EH - таблица параметров дискеты;1FH - таблица символов для графического
режима;41H - таблица параметров жесткого диска.
8
Классификация прерываний (5)
VI. Прерывания DOS (20H- 3FH):20H - нормальное завершение программы и возврат
управления DOS;21H - вызов диспетчера функций DOS; 22H - адрес пользовательской программы обработки
нормального завершения программы;23H - адрес пользовательской программы обработки
завершения по Ctrl-Break;24H - адрес пользовательской программы обработки
завершения по ошибке;25H - абсолютное чтение секторов с диска;26H - абсолютная запись секторов на диск;27H - завершение программы с сохранением в памяти.VII. Прерывания, зарезервированные для
пользователей (60H-66H, 0F0H-0FEH).
9
Микроконтроллер прерываний
Контроллерпрерываний
IRQ8
IRQ9
IRQ10
IRQ11
IRQ12
IRQ13
IRQ14
IRQ15
Контроллерпрерываний
IRQ0
IRQ1
IRQ3
IRQ4
IRQ5
IRQ6
IRQ7
МПint
номер
Базовый вектор 70hПорты А0h, A1h
Базовый вектор 8hПорты 20h, 21h
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
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 – адрес буфера, первый байт – длина буфера
Вых.: второй байт – реальная длина строки
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 – адрес строки, завершающийся знаком $
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
16
Программа извлечения корня квадратного (2)
;Ввод
vvod: lea DX,zap
mov AH,9h
int 21h
lea DX,string
mov AH,0ah
int 21h
10
String
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
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
да
нет
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
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
Структура абсолютного модуля
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 Кб
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 строка аргументов командной строки.
24
Завершение программ
1. int 20h – СS должен указывать на PSP
2. mov AH,4Ch – при любых значениях регистров
int 21h
3. int 27h – с сохранением программы в памяти, СS должен
указывать на PSP
4. mov AH,31h
int 21h – с сохранением программы в памяти, при любых
значениях регистров
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]
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
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
Сегментданных
е
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
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
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
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Видеопамять
Кодсимвола
Байт-атрибут
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