Прерывания

Main endp

Mov errcode, 0

Передача кода возврата из дочерней программы

Cmp al,1

Je OK

Cmp al, 0

Mov ah, 40h

Получение и анализ кода возврата в материнской программе

End main

Zzz ends

Zzz segment

Db 100 dup (0)

Datasg ends

Paramblk dw 7 dup (0)

Codesg ends

Main endp

Mov ax, 4C00h

Mov dx, offset chname

Mov bx, offset parmblk

Mov ax, 4b00h

Mov es, ax

Mov bx, ax

Mov ds, es

Mov ds, ax

Mov ax, datasg

Main proc

Пример материнской программы

Активизация дочернего процесса

Parmblk dw 7 dup (0)

Envirseg ends

Fcb_2 db 37 dup (0)

Fcb_1 db 37 dup (0)

Особенности структуры материнской программы

В материнской программе для запуска каждой дочерней программы должен быть выделен блок параметров:

 

parmblk dw envirseg ; адрес сегмента окружения

dd cmdtail ; адрес «хвоста» команды

dd fcb_1 ; блоки, которые необходимы для

dd fcb_2 ; работы файловой системы

chname db ‘CHILD.EXE’, 0 ; путь к файлу дочернего процесса

cmdtail db 9, ‘FILE.TXT’, 0dh ; текстовый файл

envirseg segment para ‘Envir’

db ‘comspec = D:\DOS\command.com’, 0

db ‘WORKFILE = A:\FILES’, 0

 

В простейшем варианте, когда хвост команды и fsb не используются, блок параметров уменьшается до двух строк:

chname ‘имя.exe’, 0

Для запуска дочернего процесса материнская программа должна выполнить следующее:

· освободить лишнюю память,

· записать в регистр ax номер функции 4b00h,

· записать в пару регистров es:dx адрес строки со спецификацией файла с дочерней программой,

· записать в пару регистров es:bx адрес блока параметров,

· вызвать прерывание INT 21h.

В случае успешного запуска программы флаг CF устанавливается в 0. Если процесс не запущен то в регистре флагов CF=1.

Все открытые файлы дублируются в дочерней программе. Дочерняя программа после своего завершения может возвратить в материнскую программукод завершения, который может быть проверен в материнской программе.

codesg segment ‘code’

assume cs: codesg

mov ax, zzz ; в ax загружаем адрес пустого сегмента

sub ax, dx ; определяется размер программы

mov ah, 4Ah ; освобождение лишней памяти

int 21h

; запуск дочернего процесса

mov ax, datasg ; в ах загружается адрес сегмента данных

int 21h ; запуск дочернего процесса

int 21h ; выход в ОС (завершение программы)

datasg segment ‘data’

chname db ‘C:\Do.exe’

_stack segment stack ‘stack’

_stack ends

 

 

 

int 21h ; код возврата передается через регистр al

je error_1 ; переход к обработчику ошибок

 

 

mov al, errcode ; в errcode загружается 0

mov ah, 4Ch ; выход в систему

int 21h

 

errcode располагается в памяти

Прерывания – это инициализируемый определенным образом процесс, временно переключающий микропроцессор на выполнение других программ с последующим возобновлением прерванной программы. Прерывания могут быть внутренними и внешними по отношению к процессору.

Внешние вызываются внешними событиями (клавиатура, порты, запоминающие устройства и другие внешние устройства).

Внутренние возникают во время вычислительного процесса внутри микропроцессора (ненормальное состояние микропроцессора, деление на 0, обработка исключительных ситуаций, выполнение команды INT и др.)

 

К аппаратным средствам системы прерываний относятся:

- выводы микропроцессора INTR, INTA (входной – запрос прерывание, выходной – подтверждение). Вход NMI обеспечивает обработку не отлагаемых прерываний (входной сигнал немаскируемого прерывания)

- микроконтроллеры i8259A

 

К программным средствам системы прерываний в реальном режиме, относятся:

- таблица векторов прерываний, располагается в начале адресного пространства и занимает 1000 байт. Каждый вектор прерываний выделяется по 4 байта. Таким образом, адрес вектора прерываний равен номеру прерываний, умноженный на 4. В оперативной памяти находятся обработчики прерываний.

 

Адресное пространство памяти Оперативная память

       
   

 

 


- флаг прерываний. Если флаг регистра флагов IF=1, то прерывания разрешены. Если IF=0, то прерывания запрещены. Для управления флагом используют команды STI à 1; CLI à 0. При запуске обработчика прерываний этот флаг сбрасывается в 0.

- Флаг трассировки TF. Устанавливается в 1 при пошаговом выполнении программы.

- Машинные команды микропроцессора: INT, INT0, IRET, STI, CLI

 

 

       
   
 
 

 


Рис. Взаимодействие микроконтроллера и микропроцессора