Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции_2011.doc
Скачиваний:
64
Добавлен:
09.12.2018
Размер:
1.15 Mб
Скачать
  1. Активизация дочернего процесса

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

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

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

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

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

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

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

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

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

codesg segmentcode

assume cs: codesg

main proc

mov ax, datasg

mov ds, ax

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

mov ds, es

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

mov bx, ax

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

int 21h

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

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

mov es, ax

mov ax, 4b00h

mov bx, offset parmblk

mov dx, offset chname

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

mov ax, 4C00h

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

main endp

codesg ends

datasg segment ‘data’

paramblk dw 7 dup (0)

chname db ‘C:\Do.exe’

datasg ends

_stack segment stack ‘stack’

db 100 dup (0)

_stack ends

zzz segment

zzz ends

end main

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

mov ah, 40h

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

cmp al, 0

je OK

cmp al,1

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

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

mov errcode, 0

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

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

int 21h

main endp

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

  1. Прерывания

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

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

Внутренние возникают во время вычислительного процесса внутри микропроцессора (ненормальное состояние микропроцессора, деление на 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

irq0

irq1

.

.

.

irq7

ПКП

I8259A

МП

NMI

INTA

INTR

ПКП

I8259A

irq8

irq9

.

.

.

irq15

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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]