SlideShare a Scribd company logo
1 of 43
Управление программами
(Загрузка и выполнение
программ)
Типы программ
Два основных типа: программы с расширением «COM» и программы с
расширением «EXE».
Программы типа «COM»:
-могут иметь размер не более 64К,
- существуют прямо в том формате, который необходим для загрузки в память.
«COM» программы особенно полезны для коротких утилит.
Программы в формате «EXE»
- могут иметь любой размер;
-требуют дополнительной обработки перед загрузкой их в память.
Оба типа программ загружается в память загрузчиком MS DOS.
Загрузчик выделяет блок памяти под программу и строит префикс программного
сегмента (PSP) размером 256 (100Н) байт по базовому адресу этого блока памяти,
после чего считывает программу в память непосредственно над PSP.
Программы в MS DOS делятся на транзитные и резидентные.
Транзитная программа на время своего выполнения владеет блоком выделенной
ей памяти и имеет полный контроль над системными ресурсами. При завершении
работы такой программы по любой причине выделенный ей блок памяти
освобождается и может быть использован следующей загружаемой программой.
Префикс программного
сегмента (PSP)
Это специальный блок памяти длиной 128
байт, который выделяется программе
операционной системой при загрузке
программы в память.
При загрузке программы в память сначала
выделяется блок PSP, а непосредственно за
ним загружается программа.
PSP играет важную роль для организации
связи прикладной программы с операционной
системой.
Структура PSP
Относительный адрес
ØØØØН DW Команда int 20h – выход в DOS
ØØØ2H DW Общий размер блока памяти, выделенного транзитной
программ
ØØØ4Н DW Зарезервировано
ØØØ6Н DD Команда длинного вызова диспетчера функции DOS
ØØØАН DD Адрес п/п завершения (вектор прерывания int 22H)
ØØØЕН DD Адрес п/п реакции на ctrl/break (вектор прерывания int
23H)
ØØ12H DD Адрес п/п реакции на критическую ошибку (вектор
прерывания int 24h)
ØØ16H 22 байта Резерв
ØØ2CH DW Сегментный адрес блока окружения
ØØ2EН 46 байт Резерв
ØØ5СН 16 байт Область параметров 1 (стандартный блок
управления файлами 1)
ØØ6СН 20 байт стандартный блок управления файлами №2
ØØ80Н
ØØFFH 128 байт буфер передачи данных DTA (Data Transfer Area)
Основное назначение PSP
1. Возврат в DOS. Команда RET в основной программе
передает управление на начало PSP, после чего будет
выполнена команда INT 20H, по которой будет
осуществлен выход в DOS.
2. Информация, находящаяся во втором слове PSP, может
использоваться для определения размера памяти,
выделенного в транзитной программе.
3. Область PSP с адресами от ØØØАН до ØØ15Н
позволяют транзитной программе менять вектора
прерываний обработчиков завершений по ctrl/break и
критической (фатальной ошибке). После завершения
программы MS DOS восстановит их из
соответствующей области PSP.
4. Сегментный адрес блока окружения позволяет получить
доступ к имени запущенного на выполнение файла.
Блок окружения программы
Это специальный блок памяти, создаваемый
операционной системой для программы в момент загрузки
программы в память. Блок окружения всегда выровнен на
границу параграфа. Строками окружения являются строки,
записанные в файлах autoexec.bat и config.sys. Имеется
возможность добавлять строки в блок окружения
средствами операционной системы (команда SET) и тем
самым передавать необходимую информацию в программу
пользователя.
Строки окружения хранятся в блоке окружения в ASCIIZ-
формате, то есть в виде строковой константы, в конце
которой стоит 0.
Пример.
NAME DB «А:TEST. ASM», Ø – строка в ASCIIZ формате.
Признаком конца блока окружения являются два нуля.
Сразу следом за ними следует полное имя запущенного на
выполнение файла, также записанное в ASCIIZ - формате.
Буфер передачи данных DTA
Буфер передачи данных DTA представляет
собой буферную область ввода/вывода для
текущего дисковода. Кроме этого, буфер DTA
используется для получения командной строки
программы. После запуска программы данная
область содержит в первом байте число,
указывающее, сколько раз были нажаты клавиши
на клавиатуре непосредственно после имени
программы до символа <Enter>. Начиная со
второго байта, находятся введенные символы
(если они есть). Далее идет “мусор”, оставшийся
после выполнения предыдущей программы.
Пример: Допустим, что допускается программа PROG с
параметром – именем файла FILE1. Командная
строка имеет вид PROG А: FILE1 <Enter>.
Тогда начиная с адреса PSP:8ØН будет находиться
следующая информация:
Ø820413А46494С4531ØD
А : F I L E 1 enter
Для доступа к параметра командной строки можно
использовать следующие команды.
Для программы в COM формате
MOV SI, 8ØH
CMP BYTE PTR [SI], Ø; в буфере DTA Ø?
JE EXIT
; ОБРАБОТКА ПАРАМЕТРОВ КОМАНДНОЙ
СТРОКИ
Выход из программы:
- по команде RET,
- с помощью команды int 20h- выход в DOS
- с помощью функции 4CH прерывания Int 21h-
также выход в DOS.
Последний способ имеет то преимущество, что
не требует, чтобы регистр CS указывал на PSP.
Кроме того, при таком выходе регистр AL
содержит код ошибки, который может быть
проверен в командном файле DOS с помощью
команды ERRORLEVEL.
Определить имя запущенного на
выполнение файла
MOV ds, word ptr es:002ch ;загрузить в DS
;сегментный адрес
;блока
; ;окружения
MOV ax, ds
MOV es, ax ;загрузить сегментный адрес сканируемой
;строки
MOV di, 0 ;смещение сканируемой строки
Cld ; направление обработки - вперед
MOV al, 0 ;загрузить код нуля
MOV cx, 1000 ; количество байтов
R: repne scasb ;скопировать строку до первого
;нуля
Сmр byte ptr [di],0 ;сравниваем следующий символ
Jne r ;если он нулевой, то строка найдена
Add di, 3 ; пропустить счетчик дополнительных
; строк
MOV dx, di
Структура программ типа .EXE
Программа в формате .EXE, созданная
компоновщиком, состоит из двух частей:
• заголовка
• собственно загрузочного модуля
Заголовок файла содержит следующую
информацию:
- размер выполняемого модуля и размер заголовка,
- смещение сегмента стека,
- содержимое регистров IP и SP,
- смещение модуля программы (всегда кратно 512
б).
Загрузчик помещает .EXE программу непосредственно за префиксом
PSP.
Когда запускается программа, DOS совершает следующие
основные действия.
1. Создает PSP.
2. Определяет размер загрузочного модуля по информации из заголовка и
смещения этого модуля в исходном файле (размер заголовка в 16-ти
байтовых параграфах х16)
3. Считывает загрузочный модуль в память, начиная с адреса
START_SEG: ØØØØ, где START_SEG=PSP+1ØØH (заголовок не
загружается).
4. Выделяет для программы память по информации из заголовка.
5. Присваивает начальные значения регистрам
ES=DS=PSP
SS=START_SEG+смещение сегмента_стека (из заголовка)
SP=размер_стека (из заголовка)
CS=START_SEG+смещение_сегмента_команд (из заголовка)
IP = мещение_точки_входа (из заголовка)
Значения для смещения сегмента стека и для SP попадают в
заголовок из исходного текста программы (из объявления сегмента с
атрибутом STACK). Значение для смещения сегмента команд и IP
попадают в заголовок из исходного текста программы.
Отметим что:
1. Такое значение ES и DS позволяет
вернуться в DOS командой RET, а также
получить доступ к началу PSP из прикладной
программы.
2.Изменением значений CS:IP в заголовке
.EXE файле можно изменить точку входа в
программу, что позволяет:
строить некоторые схемы защиты программ от
несанкционированного использования
встраивать в программу некоторые вирусы.
Структура COM файлов
Основные отличия .COM файлов от .EXE заключается в следующем:
1.COM файл может иметь размер не более 64 К и размещается всегда в одном
сегменте. В отличие от .EXE файла, .COM файл не имеет заголовка с настроечной
информацией, поэтому он хранится на диске в том виде, в каком будет загружен в
память. .COM файл занимает меньше места на диске и чуть быстрее загружается.
2. В .EXE программе определяется стек, в .COM программе определение стека должно
быть опущено. DOS автоматически определяет стек, причем если для программы
достаточно 64К, то в SP заносится адрес конца сегмента 0FFFEH, иначе DOS
устанавливает стек в конце памяти. Вершина стека содержит Ø.
3. Так как в. COM файле отсутствует заголовок, то все сегментные регистры при
загрузке указывают на начало PSP. Так как .COM программа загружается
непосредственно над префиксом PSP, то IP при загрузке имеет значение 1ØØh.
4. В отличие от .EXE файла, где точка входа определяется директивой END, точка
входа в . COM файл всегда имеет адрес PSP:1ØØh.
5. В COM программе отсутствует сегмент данных, и все данные должны быть
определены в сегменте кода. Таким образом, начальные значения регистров при
загрузке .COM файлов.
ES=DS=SS=CS=PSP
IP=0100H
SP=MIN {0FFFEH, адрес вершины доступной памяти}
Правила написания .COM программ
1. Не следует оформлять программу в виде процедуры. Целесообразнее
поместить в начале программы метку и закончить программу директивой
END с этой меткой.
2. В начале программы необходимо поместить директиву ORG 100h,
которая зарезервирует 100h байтов под PSP, и программа будет
начинаться с относительного адреса 100h. Программный загрузчик
устанавливает это значение в регистре IP. Для того чтобы начать
выполнение программы с другого места, необходимо использовать
команду JMP.
3. Оператор ASSUME должен устанавливать DS, ES, SS также, как и CS.
В программе должны отсутствовать определения сегментов стека и
данных. Данные программы могут находиться в любом месте программы,
но они должны обходиться во время выполнения программы.
4. В программе не нужны команды инициализации регистра DS.
Программа должна завершиться либо командой RET, либо прерыванием
Int 20h– возврат в DOS, либо прерыванием int 21h с функцией 4ch. Даже
если и используется RET, на самом деле используется int 20h (так как все
находится в одном сегменте, то RET выталкивает из стека одно слово , и
это слово равно Ø, так как это 0 помещается в стек при инициализации,
CS указывает на PSP –> переход на начало PSP, где стоит команда Int
20h.
• PAGE 60, 132
• CODE SEGMENT PARA“CODE”
• ASSUME CS:CODE, DS:CODE, SS:CODE
• ORG 100h
• START: JMP PROG ;обход через данные
• FLD1 DW 10DUP(?)
• FLD2 DW ?
• PROG PROC NEAR
• …………………………..
• RET
• PROG ENDP
• CODE ENDS
• END START
Некоторые вопросы
управления памятью
Причины:
1) Необходимо освободить место для загрузки
и выполнения другой программы,
выполняемой под управлением первой;
2) Необходимо динамически распределять
дополнительную памяти, требуемой
программе, и освобождение этой памяти,
когда надобность в памяти отпадает.
Память в MS DOS
1. Область операционной системы
2. Область транзитных программ.
Область операционной системы содержит таблицу
векторов прерываний, собственно DOS с ее таблицами
и буферами, устанавливаемые драйверы устройств,
описанные в файле CONFIG.SYS, а также резидентную
(то есть остающуюся постоянно в памяти) часть
командного процессора COMMAND.COM.
В область транзитных программ загружаются
программы пользователей. Когда программа
загружается в память, она помещается в свободную
часть области транзитных программ. В этот момент вся
память за программой отведена этой программе.
Требования к программе
• корректная программа не должна
модифицировать память, которой она
фактически не владеет;
• корректная программа должна
освобождать память, которая ей не
нужна.
Блок памяти
ОС MS DOS при управлении памятью оперирует
блоками.
Блок памяти – это непрерывная область памяти и
ее размер определяется размером доступной
памяти, в частности может быть больше 64К.
Свойства блока
1.Любая возможность перекрытия блоков
исключена.
2. Блок всегда начинается со смещения Ø данного
сегмента.
Что можно делать с блоком
памяти
1. Отводить по требованию программы
блок памяти любого размера
2. Освобождать существующие блоки
3. Урезать или расширять
существующие блоки.
Создание блока памяти
При создании блока DOS создает 16-байтовый
управляющий блок МСВ (Memory Control Block),
который расположен непосредственно перед блоком
памяти.
Каждый управляющий блок содержит информацию,
указывающую на следующий блок, то есть блоки
связаны в цепочку. Адрес первого блока хранится во
внутренней переменной DOS и его можно получить с
помощью функции 52h прерывания int21h. Адрес будет
находиться в области, адресуемой регистровой парой
ES:BX.
Признаком конца цепочки служит код ASCII 90 (символ
Z) в нулевом байте управляющего блока. Кроме этого, в
МСВ находится информация о размере блока и о
программе, владеющей данным блоком памяти.
Программа загружается в отведенный ей
блок памяти, причем PSP программа
загружается непосредственно за МСВ.
Программа полностью владеет
выделенным ей блоком памяти и
никакая другая программа не
загружается DOSом в этот блок.
Распределение памяти после
загрузки ОС
МСВ1
PSP1
BROG1
МСВ2
PSP2
BROG2
МСВ3
Блок памяти1, контролируемый МСВ1 и содержащий
программу PROG1
блок памяти2 для программы PROG2
дополнительный блок, выделенный программе
PROG2 и контролируемый МСВ3. Он указывает
на PSP2
Формат MCB
• DB - байт, указывающий, является ли МСВ
промежуточным (4Dh) или последним во всей
цепочке заголовков (5ah)
• DW – 0, если контролируемая заголовком
область свободна
• указатель на PSP, если блок принадлежит
программе
• DW - размер (в параграфах)
контролируемого блока.
• Остальная область не используется.
• Схема процедуры (или процедура)
определения имен запущенных на
выполнение файлов
(самостоятельно).
Сокращение начального распределения
памяти (то есть урезать существующий
блок).
Функция 4Аh прерываний int 21h.
Регистры:
ES должен содержать сегментный адрес PSP
ВХ – число параграфов, необходимых для
выполнения программы.
Одним из простых способов определения этого
числа является введения в конце программы
фиктивного сегмента с именем ZSEG. Разность
сегментных адресов начала программы и этого
сегмента дает размер программы в параграфах.
Если функция не может быть выполнена, то
устанавливается CF и AX содержит код ошибки
Пример
MOV BX, ZSEG ;получить сегментный адрес конца
программы+1
MOV AX, ES ; получить сегм. адрес начала
программы
SUB BX, AX ;размер программы в параграфах
MOV AH,4АН ;
INT 21h ;освободить память
JC ERROR ;перейти, если ошибка
………………
Пустой сегмент
ZSEG SEGMENT
ZSEG ENDS
Динамическое выделение
дополнительной памяти.
Если память освобождена, то программе динамически может
быть добавлена память в необходимых случаях.
Функции 48h прерывания int 21h.
Регистры:
ВХ содержит число требуемых 16-битовых параграфов, При
завершении:
-стартовый адрес блока равен АХ:Ø (то есть сегм. адрес
блока находится в АХ, а смещение=Ø).
В случае ошибки:
- устанавливается флаг CF,
- в регистре АХ возвращается код ошибки
- в ВХ – максимально yf[jlbncz доступный размер блока в
параграфах.
•
Пример
Создать дополнительный буфер 32К и заполнить его единицами
Mov ah, 48h
Mov bx, Ø800h; требуем 800h параграфов=32к байт
Int 21h
Jc error
Mov block_seg, ax; сохранить адрес блока
; Команды использования блока
Заполнить буфер (32к) единицами
Mov es, block_seg
Mov di, Ø
Mov cx, Ø800h
Cld
Mov al, Øffh
Rep Stosb
Posh ds
Mov ds, block_seg; сделать буфер адресуемым
………
Popds
Освободить блок памяти
• После использования блока программы должна
освободить память, отведенную под блок.
Функция 49h прерывания int21h.
Регистры:
ES должен содержать сегментный адрес
освобождаемого блока. За размером блока DOS
следит сам
• Mov ax, block_seg
• Mov es, ax
• Mov ab, 49h; освободить блок памяти
• Int 21h
•
Запуск одной программы из другой
Задача: запустить программу, находящуюся на
диске, из другой программы, находящейся в
памяти.
По этому принципу могут быть построены
оболочки над DOS (типа интерпретаторов
командных строк), по этому же принципу
программа может быть вызвана и выполнена
без прерывания вызвавшей программы.
Реализуется функцией EXEC (номер 4Вh
прерывания int 21h).
Функция позволяет одной программе,
называемой родительской, загрузить любую
другую программу, называемую дочерней,
находящуюся во внешней памяти, выполнить
ее, а после завершения дочерней программы
продолжить свое выполнение.
DOS приостанавливает выполнение
родительской программы до завершения
дочерней. Дочерняя программа, закончив
выполнение, может передавать родительской
информацию об ошибках. Дочерняя программа
также может загрузить другие программы, те –
следующие и т. д.
Что нужно сделать в
родительской программе.
1. Подготовить в памяти место,
необходимое для загрузки дочерней
программы.
2. Создать специальный блок
параметров.
3. Задать имя запускаемой программы.
4. Сохранить значение регистров SS и
SP в переменных.
Описание действий.
1. Подготовка в памяти места, необходимого для загрузки.
Выполняется функцией 4Аh прерывания int 21h. При этом DOS
будет возвращена вся лишняя память, занятая родительской
программой.
2. Создание блока параметров. Блок параметров создается путем
описания этого блока в сегменте данных родительской программы.
Блок параметров – это 14-байтовая область памяти, содержащая
следующую информацию:
DW сегментный адрес блока окружения дочерней программы;
DD сегментный адрес и смещение командной строки (хвоста
командной строки);
DD сегментный адрес и смещение (указатель) первого блока
управления файлами (FCB1);
DD сегментный адрес и смещение (указатель) второго блока
управления файлами (FCB2)
Блок параметров для функции должен адресоваться регистровой
парой ES:BX, т.е. в ES должен находиться сегментный адрес блока
параметров, а регистр BX должен содержать смещение этого
блока.
Структура полей
A). Блок окружения дочерней программы. Должен находиться
на границе параграфа и заканчиваться двумя
шестнадцатеричными нулями.
В том случае, когда дочерняя программа использует блок
окружения родительской программы достаточно
поместить два шестнадцатеричных нуля в первые два
байта блока параметров.
B). Указатель на область в родительской программе,
содержащую командную строку дочерней программы (без
имени самой программы, т.е. хвост командной строки). Перед
командной строкой должен стоять байт, содержащий длину
строки, а заканчиваться она должна символом CR ( код ASCII
0dh).
C). Последние 8 байт блока параметров указывают на
управляющие блоки файлов (FCB). В последних версиях DOS
их можно заполнить значениями 0.
Описание действий (продолжение).
3. Имя дочерней программы задается в
сегменте данных родительской программы в
виде ASCIIZ строки с указанием накопителя,
пути и имени файла.
Эта строка должна адресоваться регистровой
парой DS:DX.
4.Функция EXEC меняет все регистры, включая
стековые, поэтому регистры SS и SP надо
сохранить в переменных, а необходимые
регистры – в стеке.
Запуск дочерней программы
Для запуска дочерней программы необходимо выполнить
команды:
Mov ax, 4b00h
int 21h
В этот момент для дочерней программы будет создан PSP,
при этом по смещению 2Сh в PSP будет находиться либо
наследованный указатель на блок окружения, либо новый
указатель. Очевидно, что, используя исследованный
указатель блока окружения можно передавать информацию
от программы к программе.
По смещению 80h в PSP дочерней программы будет
находиться командная строка дочерней программы. Имя
дочерней программы будет находиться сразу за окончанием
блока окружения дочерней программы.
Возврат из дочерней программы
Осуществляется после завершения дочерней программы.
Возврат происходит в родительскую программу. После этого
родительская программа должна :
1. Инициализировать регистр DS командами вида
MOV AX, DSEG
MOV DS, AX
2. Восстановить стек из переменных памяти;
3. Восстановить из стека необходимые регистры.
Дочерняя программа может вернуть родительской
программе код возврата и статус. В случае ошибки
устанавливается флаг переноса CF, а AX содержит код
ошибки.
Пример.
Выполнение команд операционной системы из
программы.
Когда необходимо использовать команду
DOS (например, DIR, COPY, CD и др.) из
программы, в качестве дочерней
программы, фактически, выступает
командный процессор COMMAND.COM,
вызванный с параметром /С (вторичный
вызов COMMAND.COM).
Выполнение команды DIR
DSEG SEGMENT PARA ‘CODE’
; Описание блока параметров
PAR_BLOK DW Ø ; наследовать блок окружения
DW offset comline ; смещение командной строки
DW dseg ; сегмент командной строки
DD FCB1 ; Указатель на FCB1
DD FCB2 ; Указатель на FCB2
; Конец описания блока параметров
File_name DB ‘C:COMMAND. COM’,Ø ; имя дочерней программы
comline DB 11,’/C DIR C:’, 13 Ø ; хвост командной строки
FCB1 DB 16 DUP.(Ø)
FCB2 DB 16 DUP (Ø)
SAVE_SS DW Ø ; Область для сохранения
; регистров SS
SAVE_SP DW Ø ; и SP
DSEG ENDS
CSEG SEGMENT PARA ‘CODE’
ASSUME CS : CSEG, DS: CSEG. ES: CSEG
MAIN PROC far
…….
; освободить память
MOV BХ, ZSEG
MOV AX, ES
SUB BX, AX
MOV AH, 4AH
INT 21h
JС ERROR1
; нет памяти
; указать на блок параметров
push es
MOV AX,DS
MOV ES,AX
MOV BX, offset PAR_block ; ES : BX адресует блок параметров
MOV DX, offset file_name ; DS : DX адресует имя файла
MOV SAVE_SS, SS ; сохранить
MOV SAVE_SP, SP ; регистры
MOV ax,4bØØh ; функция 4bh
Int 21 h ; вызвать DIR
; Обработать возврат в родительскую программу
MOV ax, dseg
MOV ds, ax
MOV ss, SAVE_SS ;Восстановить стек
MOV sp, SAVE_SP ;
JC ERROR2 ; ошибка вызова дочерней программы
JMP EXIT
ERROR1: MOV AL,Ø1
JMP EXIT
ERROR2: MOV AL,Ø2
EXIT :
MOV AH, 4ch
Int 21h
MAIN ENDP
GSEG ENDS
ZSEG SEGMENT
ZSEG ENDS
END main

More Related Content

Similar to НуП_Лекция 2. Управление программами.ppt

20090721 hpc exercise2
20090721 hpc exercise220090721 hpc exercise2
20090721 hpc exercise2Michael Karpov
 
507.методическое пособие по дисциплине «информатика» ч1 программирование на я...
507.методическое пособие по дисциплине «информатика» ч1 программирование на я...507.методическое пособие по дисциплине «информатика» ч1 программирование на я...
507.методическое пособие по дисциплине «информатика» ч1 программирование на я...ivanov15548
 
024
024024
024JIuc
 
023
023023
023JIuc
 
C++ весна 2014 лекция 2
C++ весна 2014 лекция 2C++ весна 2014 лекция 2
C++ весна 2014 лекция 2Technopark
 
Ayan9r1 po(1)
Ayan9r1 po(1)Ayan9r1 po(1)
Ayan9r1 po(1)Ayan_R
 
20090720 hpc exercise1
20090720 hpc exercise120090720 hpc exercise1
20090720 hpc exercise1Michael Karpov
 
Занятие № 5. Общие сведения MS-DOS . Основные модули ОС. Основные команды MS-DOS
Занятие № 5. Общие сведения MS-DOS . Основные модули ОС. Основные команды MS-DOSЗанятие № 5. Общие сведения MS-DOS . Основные модули ОС. Основные команды MS-DOS
Занятие № 5. Общие сведения MS-DOS . Основные модули ОС. Основные команды MS-DOSAibek9
 
среда описание и выполнения алгоритмов.
среда описание и выполнения алгоритмов.среда описание и выполнения алгоритмов.
среда описание и выполнения алгоритмов.liza2209
 
Статический анализ: ошибки в медиаплеере и безглючная аська
Статический анализ: ошибки в медиаплеере и безглючная аська Статический анализ: ошибки в медиаплеере и безглючная аська
Статический анализ: ошибки в медиаплеере и безглючная аська Tatyanazaxarova
 
отладка Mpi приложений
отладка Mpi приложенийотладка Mpi приложений
отладка Mpi приложенийMichael Karpov
 
23
2323
23JIuc
 
Open office manual
Open office manualOpen office manual
Open office manualDim Kin
 
Afandiyeva kamala yazik programmirovaniya pascal
Afandiyeva kamala yazik programmirovaniya pascalAfandiyeva kamala yazik programmirovaniya pascal
Afandiyeva kamala yazik programmirovaniya pascalkamala_afandiyeva_zahs
 

Similar to НуП_Лекция 2. Управление программами.ppt (20)

лек1
лек1лек1
лек1
 
Руководство для TR4W
Руководство для TR4WРуководство для TR4W
Руководство для TR4W
 
20090721 hpc exercise2
20090721 hpc exercise220090721 hpc exercise2
20090721 hpc exercise2
 
507.методическое пособие по дисциплине «информатика» ч1 программирование на я...
507.методическое пособие по дисциплине «информатика» ч1 программирование на я...507.методическое пособие по дисциплине «информатика» ч1 программирование на я...
507.методическое пособие по дисциплине «информатика» ч1 программирование на я...
 
024
024024
024
 
023
023023
023
 
C++ весна 2014 лекция 2
C++ весна 2014 лекция 2C++ весна 2014 лекция 2
C++ весна 2014 лекция 2
 
Ayan9r1 po(1)
Ayan9r1 po(1)Ayan9r1 po(1)
Ayan9r1 po(1)
 
лек13 6
лек13 6лек13 6
лек13 6
 
20090720 hpc exercise1
20090720 hpc exercise120090720 hpc exercise1
20090720 hpc exercise1
 
190
190190
190
 
Turbo pascal. toqrul
Turbo pascal. toqrulTurbo pascal. toqrul
Turbo pascal. toqrul
 
Занятие № 5. Общие сведения MS-DOS . Основные модули ОС. Основные команды MS-DOS
Занятие № 5. Общие сведения MS-DOS . Основные модули ОС. Основные команды MS-DOSЗанятие № 5. Общие сведения MS-DOS . Основные модули ОС. Основные команды MS-DOS
Занятие № 5. Общие сведения MS-DOS . Основные модули ОС. Основные команды MS-DOS
 
Teltonika workbench
Teltonika workbenchTeltonika workbench
Teltonika workbench
 
среда описание и выполнения алгоритмов.
среда описание и выполнения алгоритмов.среда описание и выполнения алгоритмов.
среда описание и выполнения алгоритмов.
 
Статический анализ: ошибки в медиаплеере и безглючная аська
Статический анализ: ошибки в медиаплеере и безглючная аська Статический анализ: ошибки в медиаплеере и безглючная аська
Статический анализ: ошибки в медиаплеере и безглючная аська
 
отладка Mpi приложений
отладка Mpi приложенийотладка Mpi приложений
отладка Mpi приложений
 
23
2323
23
 
Open office manual
Open office manualOpen office manual
Open office manual
 
Afandiyeva kamala yazik programmirovaniya pascal
Afandiyeva kamala yazik programmirovaniya pascalAfandiyeva kamala yazik programmirovaniya pascal
Afandiyeva kamala yazik programmirovaniya pascal
 

More from dinarium2016

НуП_Лекция 8. Работа с файлами на Ассемблере.ppt
НуП_Лекция 8. Работа с файлами на Ассемблере.pptНуП_Лекция 8. Работа с файлами на Ассемблере.ppt
НуП_Лекция 8. Работа с файлами на Ассемблере.pptdinarium2016
 
НуП_Лекция 7. Работа с каталогами диска.ppt
НуП_Лекция 7. Работа с каталогами диска.pptНуП_Лекция 7. Работа с каталогами диска.ppt
НуП_Лекция 7. Работа с каталогами диска.pptdinarium2016
 
НуП_Лекция 5. Управление видеосистемой.ppt
НуП_Лекция 5. Управление видеосистемой.pptНуП_Лекция 5. Управление видеосистемой.ppt
НуП_Лекция 5. Управление видеосистемой.pptdinarium2016
 
Проектирование_и_архитектура_ПС_2022_L09s.ppt
Проектирование_и_архитектура_ПС_2022_L09s.pptПроектирование_и_архитектура_ПС_2022_L09s.ppt
Проектирование_и_архитектура_ПС_2022_L09s.pptdinarium2016
 
Проектирование_и_архитектура_ПС_2022_L08s.ppt
Проектирование_и_архитектура_ПС_2022_L08s.pptПроектирование_и_архитектура_ПС_2022_L08s.ppt
Проектирование_и_архитектура_ПС_2022_L08s.pptdinarium2016
 
Проектирование_и_архитектура_ПС_2022_L07s.ppt
Проектирование_и_архитектура_ПС_2022_L07s.pptПроектирование_и_архитектура_ПС_2022_L07s.ppt
Проектирование_и_архитектура_ПС_2022_L07s.pptdinarium2016
 
Проектирование_и_архитектура_ПС_2022_L06.ppt
Проектирование_и_архитектура_ПС_2022_L06.pptПроектирование_и_архитектура_ПС_2022_L06.ppt
Проектирование_и_архитектура_ПС_2022_L06.pptdinarium2016
 
Проектирование_и_архитектура_ПС_2022_L05s.ppt
Проектирование_и_архитектура_ПС_2022_L05s.pptПроектирование_и_архитектура_ПС_2022_L05s.ppt
Проектирование_и_архитектура_ПС_2022_L05s.pptdinarium2016
 
Проектирование_и_архитектура_ПС_2022_L04s.ppt
Проектирование_и_архитектура_ПС_2022_L04s.pptПроектирование_и_архитектура_ПС_2022_L04s.ppt
Проектирование_и_архитектура_ПС_2022_L04s.pptdinarium2016
 
Проектирование_и_архитектура_ПС_2022_L03s.ppt
Проектирование_и_архитектура_ПС_2022_L03s.pptПроектирование_и_архитектура_ПС_2022_L03s.ppt
Проектирование_и_архитектура_ПС_2022_L03s.pptdinarium2016
 
Проектирование_и_архитектура_ПС_2022_L02s.ppt
Проектирование_и_архитектура_ПС_2022_L02s.pptПроектирование_и_архитектура_ПС_2022_L02s.ppt
Проектирование_и_архитектура_ПС_2022_L02s.pptdinarium2016
 
Проектирование_и_архитектура_ПС_2022_L01.ppt
Проектирование_и_архитектура_ПС_2022_L01.pptПроектирование_и_архитектура_ПС_2022_L01.ppt
Проектирование_и_архитектура_ПС_2022_L01.pptdinarium2016
 

More from dinarium2016 (12)

НуП_Лекция 8. Работа с файлами на Ассемблере.ppt
НуП_Лекция 8. Работа с файлами на Ассемблере.pptНуП_Лекция 8. Работа с файлами на Ассемблере.ppt
НуП_Лекция 8. Работа с файлами на Ассемблере.ppt
 
НуП_Лекция 7. Работа с каталогами диска.ppt
НуП_Лекция 7. Работа с каталогами диска.pptНуП_Лекция 7. Работа с каталогами диска.ppt
НуП_Лекция 7. Работа с каталогами диска.ppt
 
НуП_Лекция 5. Управление видеосистемой.ppt
НуП_Лекция 5. Управление видеосистемой.pptНуП_Лекция 5. Управление видеосистемой.ppt
НуП_Лекция 5. Управление видеосистемой.ppt
 
Проектирование_и_архитектура_ПС_2022_L09s.ppt
Проектирование_и_архитектура_ПС_2022_L09s.pptПроектирование_и_архитектура_ПС_2022_L09s.ppt
Проектирование_и_архитектура_ПС_2022_L09s.ppt
 
Проектирование_и_архитектура_ПС_2022_L08s.ppt
Проектирование_и_архитектура_ПС_2022_L08s.pptПроектирование_и_архитектура_ПС_2022_L08s.ppt
Проектирование_и_архитектура_ПС_2022_L08s.ppt
 
Проектирование_и_архитектура_ПС_2022_L07s.ppt
Проектирование_и_архитектура_ПС_2022_L07s.pptПроектирование_и_архитектура_ПС_2022_L07s.ppt
Проектирование_и_архитектура_ПС_2022_L07s.ppt
 
Проектирование_и_архитектура_ПС_2022_L06.ppt
Проектирование_и_архитектура_ПС_2022_L06.pptПроектирование_и_архитектура_ПС_2022_L06.ppt
Проектирование_и_архитектура_ПС_2022_L06.ppt
 
Проектирование_и_архитектура_ПС_2022_L05s.ppt
Проектирование_и_архитектура_ПС_2022_L05s.pptПроектирование_и_архитектура_ПС_2022_L05s.ppt
Проектирование_и_архитектура_ПС_2022_L05s.ppt
 
Проектирование_и_архитектура_ПС_2022_L04s.ppt
Проектирование_и_архитектура_ПС_2022_L04s.pptПроектирование_и_архитектура_ПС_2022_L04s.ppt
Проектирование_и_архитектура_ПС_2022_L04s.ppt
 
Проектирование_и_архитектура_ПС_2022_L03s.ppt
Проектирование_и_архитектура_ПС_2022_L03s.pptПроектирование_и_архитектура_ПС_2022_L03s.ppt
Проектирование_и_архитектура_ПС_2022_L03s.ppt
 
Проектирование_и_архитектура_ПС_2022_L02s.ppt
Проектирование_и_архитектура_ПС_2022_L02s.pptПроектирование_и_архитектура_ПС_2022_L02s.ppt
Проектирование_и_архитектура_ПС_2022_L02s.ppt
 
Проектирование_и_архитектура_ПС_2022_L01.ppt
Проектирование_и_архитектура_ПС_2022_L01.pptПроектирование_и_архитектура_ПС_2022_L01.ppt
Проектирование_и_архитектура_ПС_2022_L01.ppt
 

НуП_Лекция 2. Управление программами.ppt

  • 2. Типы программ Два основных типа: программы с расширением «COM» и программы с расширением «EXE». Программы типа «COM»: -могут иметь размер не более 64К, - существуют прямо в том формате, который необходим для загрузки в память. «COM» программы особенно полезны для коротких утилит. Программы в формате «EXE» - могут иметь любой размер; -требуют дополнительной обработки перед загрузкой их в память. Оба типа программ загружается в память загрузчиком MS DOS. Загрузчик выделяет блок памяти под программу и строит префикс программного сегмента (PSP) размером 256 (100Н) байт по базовому адресу этого блока памяти, после чего считывает программу в память непосредственно над PSP. Программы в MS DOS делятся на транзитные и резидентные. Транзитная программа на время своего выполнения владеет блоком выделенной ей памяти и имеет полный контроль над системными ресурсами. При завершении работы такой программы по любой причине выделенный ей блок памяти освобождается и может быть использован следующей загружаемой программой.
  • 3. Префикс программного сегмента (PSP) Это специальный блок памяти длиной 128 байт, который выделяется программе операционной системой при загрузке программы в память. При загрузке программы в память сначала выделяется блок PSP, а непосредственно за ним загружается программа. PSP играет важную роль для организации связи прикладной программы с операционной системой.
  • 4. Структура PSP Относительный адрес ØØØØН DW Команда int 20h – выход в DOS ØØØ2H DW Общий размер блока памяти, выделенного транзитной программ ØØØ4Н DW Зарезервировано ØØØ6Н DD Команда длинного вызова диспетчера функции DOS ØØØАН DD Адрес п/п завершения (вектор прерывания int 22H) ØØØЕН DD Адрес п/п реакции на ctrl/break (вектор прерывания int 23H) ØØ12H DD Адрес п/п реакции на критическую ошибку (вектор прерывания int 24h) ØØ16H 22 байта Резерв ØØ2CH DW Сегментный адрес блока окружения ØØ2EН 46 байт Резерв ØØ5СН 16 байт Область параметров 1 (стандартный блок управления файлами 1) ØØ6СН 20 байт стандартный блок управления файлами №2 ØØ80Н ØØFFH 128 байт буфер передачи данных DTA (Data Transfer Area)
  • 5. Основное назначение PSP 1. Возврат в DOS. Команда RET в основной программе передает управление на начало PSP, после чего будет выполнена команда INT 20H, по которой будет осуществлен выход в DOS. 2. Информация, находящаяся во втором слове PSP, может использоваться для определения размера памяти, выделенного в транзитной программе. 3. Область PSP с адресами от ØØØАН до ØØ15Н позволяют транзитной программе менять вектора прерываний обработчиков завершений по ctrl/break и критической (фатальной ошибке). После завершения программы MS DOS восстановит их из соответствующей области PSP. 4. Сегментный адрес блока окружения позволяет получить доступ к имени запущенного на выполнение файла.
  • 6. Блок окружения программы Это специальный блок памяти, создаваемый операционной системой для программы в момент загрузки программы в память. Блок окружения всегда выровнен на границу параграфа. Строками окружения являются строки, записанные в файлах autoexec.bat и config.sys. Имеется возможность добавлять строки в блок окружения средствами операционной системы (команда SET) и тем самым передавать необходимую информацию в программу пользователя. Строки окружения хранятся в блоке окружения в ASCIIZ- формате, то есть в виде строковой константы, в конце которой стоит 0. Пример. NAME DB «А:TEST. ASM», Ø – строка в ASCIIZ формате. Признаком конца блока окружения являются два нуля. Сразу следом за ними следует полное имя запущенного на выполнение файла, также записанное в ASCIIZ - формате.
  • 7. Буфер передачи данных DTA Буфер передачи данных DTA представляет собой буферную область ввода/вывода для текущего дисковода. Кроме этого, буфер DTA используется для получения командной строки программы. После запуска программы данная область содержит в первом байте число, указывающее, сколько раз были нажаты клавиши на клавиатуре непосредственно после имени программы до символа <Enter>. Начиная со второго байта, находятся введенные символы (если они есть). Далее идет “мусор”, оставшийся после выполнения предыдущей программы.
  • 8. Пример: Допустим, что допускается программа PROG с параметром – именем файла FILE1. Командная строка имеет вид PROG А: FILE1 <Enter>. Тогда начиная с адреса PSP:8ØН будет находиться следующая информация: Ø820413А46494С4531ØD А : F I L E 1 enter Для доступа к параметра командной строки можно использовать следующие команды. Для программы в COM формате MOV SI, 8ØH CMP BYTE PTR [SI], Ø; в буфере DTA Ø? JE EXIT ; ОБРАБОТКА ПАРАМЕТРОВ КОМАНДНОЙ СТРОКИ
  • 9. Выход из программы: - по команде RET, - с помощью команды int 20h- выход в DOS - с помощью функции 4CH прерывания Int 21h- также выход в DOS. Последний способ имеет то преимущество, что не требует, чтобы регистр CS указывал на PSP. Кроме того, при таком выходе регистр AL содержит код ошибки, который может быть проверен в командном файле DOS с помощью команды ERRORLEVEL.
  • 10. Определить имя запущенного на выполнение файла MOV ds, word ptr es:002ch ;загрузить в DS ;сегментный адрес ;блока ; ;окружения MOV ax, ds MOV es, ax ;загрузить сегментный адрес сканируемой ;строки MOV di, 0 ;смещение сканируемой строки Cld ; направление обработки - вперед MOV al, 0 ;загрузить код нуля MOV cx, 1000 ; количество байтов R: repne scasb ;скопировать строку до первого ;нуля Сmр byte ptr [di],0 ;сравниваем следующий символ Jne r ;если он нулевой, то строка найдена Add di, 3 ; пропустить счетчик дополнительных ; строк MOV dx, di
  • 11. Структура программ типа .EXE Программа в формате .EXE, созданная компоновщиком, состоит из двух частей: • заголовка • собственно загрузочного модуля Заголовок файла содержит следующую информацию: - размер выполняемого модуля и размер заголовка, - смещение сегмента стека, - содержимое регистров IP и SP, - смещение модуля программы (всегда кратно 512 б).
  • 12. Загрузчик помещает .EXE программу непосредственно за префиксом PSP. Когда запускается программа, DOS совершает следующие основные действия. 1. Создает PSP. 2. Определяет размер загрузочного модуля по информации из заголовка и смещения этого модуля в исходном файле (размер заголовка в 16-ти байтовых параграфах х16) 3. Считывает загрузочный модуль в память, начиная с адреса START_SEG: ØØØØ, где START_SEG=PSP+1ØØH (заголовок не загружается). 4. Выделяет для программы память по информации из заголовка. 5. Присваивает начальные значения регистрам ES=DS=PSP SS=START_SEG+смещение сегмента_стека (из заголовка) SP=размер_стека (из заголовка) CS=START_SEG+смещение_сегмента_команд (из заголовка) IP = мещение_точки_входа (из заголовка) Значения для смещения сегмента стека и для SP попадают в заголовок из исходного текста программы (из объявления сегмента с атрибутом STACK). Значение для смещения сегмента команд и IP попадают в заголовок из исходного текста программы.
  • 13. Отметим что: 1. Такое значение ES и DS позволяет вернуться в DOS командой RET, а также получить доступ к началу PSP из прикладной программы. 2.Изменением значений CS:IP в заголовке .EXE файле можно изменить точку входа в программу, что позволяет: строить некоторые схемы защиты программ от несанкционированного использования встраивать в программу некоторые вирусы.
  • 14. Структура COM файлов Основные отличия .COM файлов от .EXE заключается в следующем: 1.COM файл может иметь размер не более 64 К и размещается всегда в одном сегменте. В отличие от .EXE файла, .COM файл не имеет заголовка с настроечной информацией, поэтому он хранится на диске в том виде, в каком будет загружен в память. .COM файл занимает меньше места на диске и чуть быстрее загружается. 2. В .EXE программе определяется стек, в .COM программе определение стека должно быть опущено. DOS автоматически определяет стек, причем если для программы достаточно 64К, то в SP заносится адрес конца сегмента 0FFFEH, иначе DOS устанавливает стек в конце памяти. Вершина стека содержит Ø. 3. Так как в. COM файле отсутствует заголовок, то все сегментные регистры при загрузке указывают на начало PSP. Так как .COM программа загружается непосредственно над префиксом PSP, то IP при загрузке имеет значение 1ØØh. 4. В отличие от .EXE файла, где точка входа определяется директивой END, точка входа в . COM файл всегда имеет адрес PSP:1ØØh. 5. В COM программе отсутствует сегмент данных, и все данные должны быть определены в сегменте кода. Таким образом, начальные значения регистров при загрузке .COM файлов. ES=DS=SS=CS=PSP IP=0100H SP=MIN {0FFFEH, адрес вершины доступной памяти}
  • 15. Правила написания .COM программ 1. Не следует оформлять программу в виде процедуры. Целесообразнее поместить в начале программы метку и закончить программу директивой END с этой меткой. 2. В начале программы необходимо поместить директиву ORG 100h, которая зарезервирует 100h байтов под PSP, и программа будет начинаться с относительного адреса 100h. Программный загрузчик устанавливает это значение в регистре IP. Для того чтобы начать выполнение программы с другого места, необходимо использовать команду JMP. 3. Оператор ASSUME должен устанавливать DS, ES, SS также, как и CS. В программе должны отсутствовать определения сегментов стека и данных. Данные программы могут находиться в любом месте программы, но они должны обходиться во время выполнения программы. 4. В программе не нужны команды инициализации регистра DS. Программа должна завершиться либо командой RET, либо прерыванием Int 20h– возврат в DOS, либо прерыванием int 21h с функцией 4ch. Даже если и используется RET, на самом деле используется int 20h (так как все находится в одном сегменте, то RET выталкивает из стека одно слово , и это слово равно Ø, так как это 0 помещается в стек при инициализации, CS указывает на PSP –> переход на начало PSP, где стоит команда Int 20h.
  • 16. • PAGE 60, 132 • CODE SEGMENT PARA“CODE” • ASSUME CS:CODE, DS:CODE, SS:CODE • ORG 100h • START: JMP PROG ;обход через данные • FLD1 DW 10DUP(?) • FLD2 DW ? • PROG PROC NEAR • ………………………….. • RET • PROG ENDP • CODE ENDS • END START
  • 17. Некоторые вопросы управления памятью Причины: 1) Необходимо освободить место для загрузки и выполнения другой программы, выполняемой под управлением первой; 2) Необходимо динамически распределять дополнительную памяти, требуемой программе, и освобождение этой памяти, когда надобность в памяти отпадает.
  • 18. Память в MS DOS 1. Область операционной системы 2. Область транзитных программ. Область операционной системы содержит таблицу векторов прерываний, собственно DOS с ее таблицами и буферами, устанавливаемые драйверы устройств, описанные в файле CONFIG.SYS, а также резидентную (то есть остающуюся постоянно в памяти) часть командного процессора COMMAND.COM. В область транзитных программ загружаются программы пользователей. Когда программа загружается в память, она помещается в свободную часть области транзитных программ. В этот момент вся память за программой отведена этой программе.
  • 19. Требования к программе • корректная программа не должна модифицировать память, которой она фактически не владеет; • корректная программа должна освобождать память, которая ей не нужна.
  • 20. Блок памяти ОС MS DOS при управлении памятью оперирует блоками. Блок памяти – это непрерывная область памяти и ее размер определяется размером доступной памяти, в частности может быть больше 64К. Свойства блока 1.Любая возможность перекрытия блоков исключена. 2. Блок всегда начинается со смещения Ø данного сегмента.
  • 21. Что можно делать с блоком памяти 1. Отводить по требованию программы блок памяти любого размера 2. Освобождать существующие блоки 3. Урезать или расширять существующие блоки.
  • 22. Создание блока памяти При создании блока DOS создает 16-байтовый управляющий блок МСВ (Memory Control Block), который расположен непосредственно перед блоком памяти. Каждый управляющий блок содержит информацию, указывающую на следующий блок, то есть блоки связаны в цепочку. Адрес первого блока хранится во внутренней переменной DOS и его можно получить с помощью функции 52h прерывания int21h. Адрес будет находиться в области, адресуемой регистровой парой ES:BX. Признаком конца цепочки служит код ASCII 90 (символ Z) в нулевом байте управляющего блока. Кроме этого, в МСВ находится информация о размере блока и о программе, владеющей данным блоком памяти.
  • 23. Программа загружается в отведенный ей блок памяти, причем PSP программа загружается непосредственно за МСВ. Программа полностью владеет выделенным ей блоком памяти и никакая другая программа не загружается DOSом в этот блок.
  • 24. Распределение памяти после загрузки ОС МСВ1 PSP1 BROG1 МСВ2 PSP2 BROG2 МСВ3 Блок памяти1, контролируемый МСВ1 и содержащий программу PROG1 блок памяти2 для программы PROG2 дополнительный блок, выделенный программе PROG2 и контролируемый МСВ3. Он указывает на PSP2
  • 25. Формат MCB • DB - байт, указывающий, является ли МСВ промежуточным (4Dh) или последним во всей цепочке заголовков (5ah) • DW – 0, если контролируемая заголовком область свободна • указатель на PSP, если блок принадлежит программе • DW - размер (в параграфах) контролируемого блока. • Остальная область не используется.
  • 26. • Схема процедуры (или процедура) определения имен запущенных на выполнение файлов (самостоятельно).
  • 27. Сокращение начального распределения памяти (то есть урезать существующий блок). Функция 4Аh прерываний int 21h. Регистры: ES должен содержать сегментный адрес PSP ВХ – число параграфов, необходимых для выполнения программы. Одним из простых способов определения этого числа является введения в конце программы фиктивного сегмента с именем ZSEG. Разность сегментных адресов начала программы и этого сегмента дает размер программы в параграфах. Если функция не может быть выполнена, то устанавливается CF и AX содержит код ошибки
  • 28. Пример MOV BX, ZSEG ;получить сегментный адрес конца программы+1 MOV AX, ES ; получить сегм. адрес начала программы SUB BX, AX ;размер программы в параграфах MOV AH,4АН ; INT 21h ;освободить память JC ERROR ;перейти, если ошибка ……………… Пустой сегмент ZSEG SEGMENT ZSEG ENDS
  • 29. Динамическое выделение дополнительной памяти. Если память освобождена, то программе динамически может быть добавлена память в необходимых случаях. Функции 48h прерывания int 21h. Регистры: ВХ содержит число требуемых 16-битовых параграфов, При завершении: -стартовый адрес блока равен АХ:Ø (то есть сегм. адрес блока находится в АХ, а смещение=Ø). В случае ошибки: - устанавливается флаг CF, - в регистре АХ возвращается код ошибки - в ВХ – максимально yf[jlbncz доступный размер блока в параграфах. •
  • 30. Пример Создать дополнительный буфер 32К и заполнить его единицами Mov ah, 48h Mov bx, Ø800h; требуем 800h параграфов=32к байт Int 21h Jc error Mov block_seg, ax; сохранить адрес блока ; Команды использования блока Заполнить буфер (32к) единицами Mov es, block_seg Mov di, Ø Mov cx, Ø800h Cld Mov al, Øffh Rep Stosb Posh ds Mov ds, block_seg; сделать буфер адресуемым ……… Popds
  • 31. Освободить блок памяти • После использования блока программы должна освободить память, отведенную под блок. Функция 49h прерывания int21h. Регистры: ES должен содержать сегментный адрес освобождаемого блока. За размером блока DOS следит сам • Mov ax, block_seg • Mov es, ax • Mov ab, 49h; освободить блок памяти • Int 21h •
  • 32. Запуск одной программы из другой Задача: запустить программу, находящуюся на диске, из другой программы, находящейся в памяти. По этому принципу могут быть построены оболочки над DOS (типа интерпретаторов командных строк), по этому же принципу программа может быть вызвана и выполнена без прерывания вызвавшей программы. Реализуется функцией EXEC (номер 4Вh прерывания int 21h).
  • 33. Функция позволяет одной программе, называемой родительской, загрузить любую другую программу, называемую дочерней, находящуюся во внешней памяти, выполнить ее, а после завершения дочерней программы продолжить свое выполнение. DOS приостанавливает выполнение родительской программы до завершения дочерней. Дочерняя программа, закончив выполнение, может передавать родительской информацию об ошибках. Дочерняя программа также может загрузить другие программы, те – следующие и т. д.
  • 34. Что нужно сделать в родительской программе. 1. Подготовить в памяти место, необходимое для загрузки дочерней программы. 2. Создать специальный блок параметров. 3. Задать имя запускаемой программы. 4. Сохранить значение регистров SS и SP в переменных.
  • 35. Описание действий. 1. Подготовка в памяти места, необходимого для загрузки. Выполняется функцией 4Аh прерывания int 21h. При этом DOS будет возвращена вся лишняя память, занятая родительской программой. 2. Создание блока параметров. Блок параметров создается путем описания этого блока в сегменте данных родительской программы. Блок параметров – это 14-байтовая область памяти, содержащая следующую информацию: DW сегментный адрес блока окружения дочерней программы; DD сегментный адрес и смещение командной строки (хвоста командной строки); DD сегментный адрес и смещение (указатель) первого блока управления файлами (FCB1); DD сегментный адрес и смещение (указатель) второго блока управления файлами (FCB2) Блок параметров для функции должен адресоваться регистровой парой ES:BX, т.е. в ES должен находиться сегментный адрес блока параметров, а регистр BX должен содержать смещение этого блока.
  • 36. Структура полей A). Блок окружения дочерней программы. Должен находиться на границе параграфа и заканчиваться двумя шестнадцатеричными нулями. В том случае, когда дочерняя программа использует блок окружения родительской программы достаточно поместить два шестнадцатеричных нуля в первые два байта блока параметров. B). Указатель на область в родительской программе, содержащую командную строку дочерней программы (без имени самой программы, т.е. хвост командной строки). Перед командной строкой должен стоять байт, содержащий длину строки, а заканчиваться она должна символом CR ( код ASCII 0dh). C). Последние 8 байт блока параметров указывают на управляющие блоки файлов (FCB). В последних версиях DOS их можно заполнить значениями 0.
  • 37. Описание действий (продолжение). 3. Имя дочерней программы задается в сегменте данных родительской программы в виде ASCIIZ строки с указанием накопителя, пути и имени файла. Эта строка должна адресоваться регистровой парой DS:DX. 4.Функция EXEC меняет все регистры, включая стековые, поэтому регистры SS и SP надо сохранить в переменных, а необходимые регистры – в стеке.
  • 38. Запуск дочерней программы Для запуска дочерней программы необходимо выполнить команды: Mov ax, 4b00h int 21h В этот момент для дочерней программы будет создан PSP, при этом по смещению 2Сh в PSP будет находиться либо наследованный указатель на блок окружения, либо новый указатель. Очевидно, что, используя исследованный указатель блока окружения можно передавать информацию от программы к программе. По смещению 80h в PSP дочерней программы будет находиться командная строка дочерней программы. Имя дочерней программы будет находиться сразу за окончанием блока окружения дочерней программы.
  • 39. Возврат из дочерней программы Осуществляется после завершения дочерней программы. Возврат происходит в родительскую программу. После этого родительская программа должна : 1. Инициализировать регистр DS командами вида MOV AX, DSEG MOV DS, AX 2. Восстановить стек из переменных памяти; 3. Восстановить из стека необходимые регистры. Дочерняя программа может вернуть родительской программе код возврата и статус. В случае ошибки устанавливается флаг переноса CF, а AX содержит код ошибки.
  • 40. Пример. Выполнение команд операционной системы из программы. Когда необходимо использовать команду DOS (например, DIR, COPY, CD и др.) из программы, в качестве дочерней программы, фактически, выступает командный процессор COMMAND.COM, вызванный с параметром /С (вторичный вызов COMMAND.COM).
  • 41. Выполнение команды DIR DSEG SEGMENT PARA ‘CODE’ ; Описание блока параметров PAR_BLOK DW Ø ; наследовать блок окружения DW offset comline ; смещение командной строки DW dseg ; сегмент командной строки DD FCB1 ; Указатель на FCB1 DD FCB2 ; Указатель на FCB2 ; Конец описания блока параметров File_name DB ‘C:COMMAND. COM’,Ø ; имя дочерней программы comline DB 11,’/C DIR C:’, 13 Ø ; хвост командной строки FCB1 DB 16 DUP.(Ø) FCB2 DB 16 DUP (Ø) SAVE_SS DW Ø ; Область для сохранения ; регистров SS SAVE_SP DW Ø ; и SP DSEG ENDS CSEG SEGMENT PARA ‘CODE’ ASSUME CS : CSEG, DS: CSEG. ES: CSEG MAIN PROC far …….
  • 42. ; освободить память MOV BХ, ZSEG MOV AX, ES SUB BX, AX MOV AH, 4AH INT 21h JС ERROR1 ; нет памяти ; указать на блок параметров push es MOV AX,DS MOV ES,AX MOV BX, offset PAR_block ; ES : BX адресует блок параметров MOV DX, offset file_name ; DS : DX адресует имя файла MOV SAVE_SS, SS ; сохранить MOV SAVE_SP, SP ; регистры MOV ax,4bØØh ; функция 4bh Int 21 h ; вызвать DIR
  • 43. ; Обработать возврат в родительскую программу MOV ax, dseg MOV ds, ax MOV ss, SAVE_SS ;Восстановить стек MOV sp, SAVE_SP ; JC ERROR2 ; ошибка вызова дочерней программы JMP EXIT ERROR1: MOV AL,Ø1 JMP EXIT ERROR2: MOV AL,Ø2 EXIT : MOV AH, 4ch Int 21h MAIN ENDP GSEG ENDS ZSEG SEGMENT ZSEG ENDS END main