Прерывания
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
Рис. Взаимодействие микроконтроллера и микропроцессора