1 / 29

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

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

Download Presentation

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

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  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 IRQ0 Контроллер прерываний Контроллер прерываний IRQ9 IRQ1 int МП IRQ10 номер IRQ11 IRQ3 IRQ12 IRQ4 IRQ13 IRQ5 IRQ14 IRQ6 IRQ15 IRQ7 Базовый вектор 70h Порты А0h, A1h Базовый вектор 8h Порты 20h, 21h

  10. Стандартное подключение устройств IRQ Вектор Устройство Бит регистра маски IRQ0 08h Таймер 0 IRQ1 09h Клавиатура 1 IRQ2 0Ah Вход от схемы 2 2 IRQ8 70hCMOS и часы 0 … IRQ12 74h Мышь 4 IRQ13 75h Числовой сопроцессор 5 IRQ14 76h Контроллер винчестера (1 канал) 6 IRQ15 77h Контроллер винчестера (2 канал) 7 IRQ3 0Вh Последовательный порт COM23 IRQ4 0Сh Последовательный порт COM14 IRQ5 0Dh Параллельный порт LPT2 5 IRQ6 0Eh Контроллер гибких дисков 6 IRQ7 0FhПараллельный порт LPT1 7

  11. Сервисные функции MS DOS int 21h 1. Функции ввода с клавиатуры Примеры: 1)Ввод символа: mov AH,1 int 21h 2) Ввод строки String DB 50,49 dup (?) … lea DX, String mov AH,0AH int 21H 50 размер буфера 50 3 ‘A’ ‘B’ ‘C’ 13 10 реальная длина строки

  12. Сервисные функции MS DOS int 21h (2) 2. Функции вывода Примеры: 1)Вывод символа: mov DL,<символ> mov AH,2 int 21h 2)Вывод строки: MSG DB ‘ Пример’, 13, 10, ‘$’ … lea DX, MSG mov AH,9 int 21H

  13. Программа извлечения корня квадратного 1 = 12 1+3 = 4 = 22 1+3+5 = 9 = 32 title primer Code segment assume CS:Code,DS:Code ;Данные otwdb13,10,' n= ' rezdb ' ',13,10,'$' stringdb 10,10dup (0) zapdb 'Введите число <65024:',13,10,'$‘ begin proc far push DS mov AX,0 push AX mov AX,Code mov DS,AX

  14. Программа извлечения корня квадратного (2) ;Ввод vvod: lea DX,zap mov AH,9h int 21h lea DX,string mov AH,0ah int 21h String 10

  15. Программа извлечения корня квадратного (3) SI String ‘2 1 3 6 4’ 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 3231333634 N

  16. Программа извлечения корня квадратного (4) ND:=1 ;Вычисление 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 N:=0 S:=1 cycl S>C да нет ND:=ND+2 S:=S+ND N:=N+1

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

  18. Структура загрузочного модуля (.exe) 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] таблица перемещений Образ программы com Образ программы Структура абсолютного модуля

  19. org 100H Begin: … int 20h Загрузка программ Модуль .com Модуль .exe DS=ES DS=ES= =CS=SS PSP PSP 256 байт 256 байт Сегмент кода Сегмент кода CS IP=100h IP SP = 64 Кб Сегмент данных SS Сегмент стека Cтек SP push DS mov AX,0 push AX mov AX, Data mov DS, AX … ret

  20. Префикс программного сегмента (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 строка аргументов командной строки.

  21. Завершение программ • int 20h–СS должен указывать на PSP • mov AH,4Ch – при любых значениях регистров int 21h 3.int 27h – с сохранением программы в памяти, СS должен указывать на PSP 4.mov AH,31h int 21h –с сохранением программы в памяти, при любых значениях регистров

  22. Директива описания сегмента <Имя сегмента>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]

  23. <имя сегмента> SEGMENTSTACK DB3000 DUB (?) <имя сегмента> ENDS <имя сегмента>SEGMENT <данные> <имя сегмента>ENDS END <имя точки входа > <имя сегмента>SEGMENT ASSUME … EXTRN<имя внешнего объекта >:<тип> PUBLIC <имя внутреннего объекта> <имя процедуры> PROC FAR PUSH DS MOV AX, 0 PUSHAX MOVAX, <имя сегмента> MOVDS, AX <тело процедуры> RET <имя процедуры > ENDP <имя процедуры> PROCNEAR <тело процедуры> <имя процедуры> ENDP <имя сегмента>ENDS Пример создания многосегментного загрузочного модуля

  24. Пример создания многосегментного абсолютного модуля Code segment assume CS:Code, DS:Data org 100H Begin: push CS pop BX mov AX,offset e+15 mov CL,4 shr AX,CL add AX,BX mov DS,AX … mov AH,4Ch int 21h e EQU $ Code ends Data segment para … Data ends end begin Модуль .com DS=ES= =CS=SS PSP 256 байт Сегмент кода IP=100h е Сегмент данных

  25. Code segment assume CS:Code,Ds:Code user proc far <обработка> iret finish equ $ user endp set_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 ret set_up endp Code ends end set_up Инсталлятор .exe Модуль .exe DS=ES PSP CD 20 Сегмент кода CS Обработчик IP finish Инсталлятор

  26. Инсталлятор .com Модуль .com Code segment assume CS:Code,Ds:Code org 100H begin: jmp short set_up user proc far <обработка > iret finish equ $ user endp set_up: mov DX,offset user mov AL,<номер int> mov AH,25H int 21H lea DX,finish int 27H Code ends end set_up DS=ES= =CS=SS PSP IP=100h Сегмент кода Обработчик finish Инсталлятор

  27. 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 Резидентный обработчик int 1Ch(Ex3_1) CS,DS,ES,SS CS PSP В момент вызова регистр DS не загружен Программа Int 8h Int 1ch

  28. Резидентный обработчик 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 es a1: push ax pop ax iret Видеопамять ES Код символа Байт- атрибут

  29. Инсталлятор start: mov ax,251ch lea dx,process int 21h mov byte ptr tik,al lea dx,start int 27h code ends end begin Модуль .com DS=ES= =CS=SS PSP IP=100h Сегмент кода Обработчик start Инсталлятор

More Related