Главная · Поиск книг · Поступления книг · Top 40 · Форумы · Ссылки · Читатели

Настройка текста
Перенос строк


    Прохождения игр    
Demon's Souls |#13| Storm King
Demon's Souls |#11| Мaneater part 2
Demon's Souls |#10| Мaneater (part 1)
Demon's Souls |#9| Heart of surprises

Другие игры...


liveinternet.ru: показано число просмотров за 24 часа, посетителей за 24 часа и за сегодня
Rambler's Top100
Образование - Различные авторы Весь текст 2311.07 Kb

Программирование и кодирование

Предыдущая страница Следующая страница
1 ... 40 41 42 43 44 45 46  47 48 49 50 51 52 53 ... 198
         ; неправильный блок памяти
         err10   db      '>>> bad environment <<<',CR,LF,'$'
         ; неправильная среда
         err11   db      '>>> bad .EXE file format <<<',CR,LF,'$'
         ; неправильный формат файла .EXE
         ;
         spoint  dw      ?                 ; память для указателя стека
         param_block     label word
                 dw      0    ; используемая среда порождающей программы
                 dw      offset cmd_buf
         p1      dw      ?                 ; сегмент командной строки
                 dw      5Ch               ; сегмент FCB #1 или смещение
         p2      dw      ?
                 dw      6Ch               ; сегмент FCB #2 или смещение
         p3      dw      ?
         cmd_buf db      ?                 ; длина командной строки
                 db      ' '               ; всегда предполагается пробел
         cmd_txt db      80 dup (?)        ; 80 символов
         ;
         ; Описание локального стека
         EVEN                              ; слово выравнивания стека
         stack   db      32 dup ('stack   ') ; локальный стек
         TOP_STK EQU     $-2           ; установка адреса вершины стека
         LST_BYT EQU     $                 ; последний байт в программе
         ;
         code_seg ENDS
                 END     start
         ----------------------------------------------------------------

             Второй режим  называется  Load  Overlay (загрузка оверлейных

                                      - 3-48 -
         программ). Хотя в этом режиме загружается программный файл, режим
         Load Overlay не выполняет вызов программы.  Вместо этого управле-
         ние сразу же возвращается в вызывающую программу.  Этот режим вы-
         бирается путем установки в регистре AL значения,  равного 3. Блок
         параметров для этого режима показан на Рис. 3-14.
             В любом режиме  функционирования  перед  выполнением  функции
         загрузки и выполнения программы блок начального распределения вы-
         зывающей программы должен быть приведен в исходное  состояние для
         освобождения пространства памяти. MS-DOS загружает программы, ис-
         пользуя программный загрузчик файла COMMAND.COM, который не явля-
         ется резидентной частью файла COMMAND.COM.  Программный загрузчик
         должен считать в память сам себя с диска перед тем, как он сможет
         загрузить  программу пользователя или оверлейную программу.  (Это
         также предполагает,  что в системе для этой функции должен  рабо-
         тать диск, содержащий файл COMMAND.COM).

             РЕГИСТРЫ                                    ВНЕШНИЙ СЕГМЕНТ
                                                       .----------------.
         AX:4B03(шестн.) <------ Функция Load Overlay  |       ...      |
                                                       |----------------|
         BX:указатель на имя файла в коде ASCIIZ ----->| имя файла/пути |
                                                       |  нулевой байт  |
         DX: указатель на блок параметров ------.      |----------------|
                                                |      |       ...      |
                                                |       \/\/\/\/\/\/\/\/
                                                |
         Адрес       ПАМЯТЬ СИСТЕМЫ             |        СЕГМЕНТ ДАННЫХ
         0000:0000 .----------------.           |      .----------------.
                   |Система или по- |           |      |                |
                   |рождающая прог- |           |      |       ...      |
                   |    рамма       |           |      |                |
                   |      ...       |            ----->|----------------|
                   |                |                  |Адрес загрузоч- |
         xxxx:0000 |----------------|<-----------------|ного сегмента   |
                   | Программный код|                  |----------------|
                   |      ...       |                  |Фактор настройки|
                   |----------------|                  |----------------|
                   |                |                  |                |
                    \/\/\/\/\/\/\/\/                    \/\/\/\/\/\/\/\/

               Рис.3-14. Блок параметров для функции 4Bh (al = 3) -
                   LOAD OVERLAY (Загрузка оверлейной программы)

             Между загрузкой оверлейной и исполнимых программ имеется  су-
         щественное отличие. Оверлейная программа загружается под управле-
         нием порождающей программы по адресу,  определенному  порождающей
         программой, и считается частью порождающей программы. Программные
         файлы, предназначенные для выполнения (функция 4Bh с регистром AL
         = 0),  загружаются по адресу, выбираемому системой MS-DOS, и рас-
         сматриваются как отдельная программа.

           Загрузка и выполнение программ через MS-DOS (код 4Bh с AL=0)

             При использовании функции загрузки и  выполнения MS-DOS  тре-
         бует  не  только достаточного количества свободной памяти для за-
         грузки  программного  загрузчика  файла  COMMAND.COM,   но  также
         достаточное  количество  свободной  памяти  для  размещения новой

                                     - 3-49 -
         программы. Эта память используется также для создания  блока  на-
         чального распределения новой программы.  Вспомните,  что блок на-
         чального распределения порождающей программы должен быть установ-
         лен  достаточно большим для предохранения текущей программы,  или
         перезаписи блока операционной системой MS-DOS при  загрузке новой
         программы.  Кроме  того,  большинство резидентных подпрограмм или
         RTL написаны в формате типа .COM. Для программ типа .COM операци-
         онная система MS-DOS устанавливает стек в начало наивысшего адре-
         са доступной памяти в общем сегменте,  который  используется  для
         программного кода, данных и стека. Если вершина стека не настраи-
         вается внизу сегмента,  то может быть защищено до 64 Кбайт порож-
         дающей программы.  Если же стек настраивается внизу сегмента,  то
         все, что находится в стеке, будет потеряно (например, при возвра-
         те в MS-DOS).  Конечно,  возврат в MS-DOS в стеке не нужен,  если
         используется функция с кодом 4Ch.

                  Наследство и управление порожденной программой

             Даже если порожденная программа автономна,  порождающая прог-
         рамма  все же  имеет степень воздействия на поведение порожденной
         программы.  Это воздействие выполняется  через  наследство,  т.е.
         возможность порождающего процесса воздействовать каким-либо обра-
         зом на связь порожденного процесса с остальной системой.
             Из Рис. 3-13  можно видеть, что порождающий процесс применяет
         порожденный процесс с командной строкой, блоком среды (или с бло-
         ком  порождающего процесса,  если блок не указан в вызове EXEC) и
         блоками управления файлами.  Кроме того, когда процесс загружает-
         ся,  он автоматически наследует большинство сегментов программого
         префикса своей программы,  включая таблицу описателей файлов  по-
         рождающей программы.  При манипулировании этими элементами порож-
         дающая программа управляет тремя первичными элементами, управляю-
         щими  программой:  ее  командной строкой,  ее таблицей описателей
         файлов и ее блоком среды.
             Между командными  строками:  передаваемой  в порожденный про-
         цесс, и используемой в приглашениях системы имеются некоторые от-
         личия.  В первом случае командная строка становится ответственной
         порождающего процесса за установку любого переназначения -  зада-
         чи,  обычно обрабатываемой файлом COMMAND.COM.  Т.к.  порожденный
         процесс наследует таблицу описателей файлов порождающего его про-
         цесса,  то порождающий процесс может легко переназначить ввод/вы-
         вод порожденного им процесса.  При изменении значений описателей,
         хранящихся  в  устройствах  стандартного  ввода  и вывода stdin и
         stdout порождающего процесса,  порождающий процесс изменит  пред-
         шествующие как stdin,  stdout, так и любые другие допустимые уст-
         ройства порожденного процесса. Порождающий процесс может изменить
         их,  используя  технические приемы,  показанные в листинге 3-3 (в
         разделе "Таблица описателей файлов PSP"), или путем использования
         функций MS-DOS для манипулирования файлами и устройствами. (Одной
         из таких функций,  которая может быть использована для замены об-
         работки, является функция MS-DOS с кодом 46h "Использовать дубли-
         кат описателя"- прерывание int 21h).
             Заметим, что полная обработка  может  быть  включена  из  су-
         щества  наследования.  При  открытии  файла или устройства должен
         быть  указан  режим OPEN (открыть) (Смотри функцию MS-DOS с кодом
         3Dh "Открыть файл или устройство" - прерывание int 21h), при этом
         бит 7 режима OPEN является битом наследования. При установке это-
         го  бита в 0  (принимается по умолчанию), обработка   должна быть

                                     - 3-50 -
         наследуемой с каким-либо порожденным процессом. Если этот бит ус-
         тановлен в 1 при вызове функции OPEN, то возвращаемая  обработка
         будет освобождена от наследования.
             Существует другой способ, при котором порождающий процесс мо-
         жет управлять системным отображением порожденного процесса.  Пер-
         вый элемент в блоке параметров  загрузки  и  выполнения  является
         указателем на блок среды порожденного процесса.  Если указатель в
         блоке параметров загрузки и выполнения равен нулю,  то для порож-
         денного процесса дублируется среда порождающего процесса. Если он
         не равен нулю, то в качестве среды порожденного процесса загружа-
         ется блок среды, указываемый этим указателем.
             Что же это означает для Вас? Это означает, что можно написать
         программу поиска блоков среды для отдельных элементов и затем ис-
         пользовать эти значения для установки параметров во время  выпол-
         нения программы.  Элементы могут быть вставлены в блок среды сис-
         темы  по  команде  SET  (установить)  для  управления  действиями
         программы,  которая читает и действует со своим блоком среды. Так
         как порождающий процесс может изменять блок среды,  то тем  самым
         порождающий процесс может изменять поведение порожденного процес-
         са, читающего этот блок.
             Выполняющийся процесс может осуществлять доступ к своему бло-
         ку среды посредством указателя,  хранящегося по  смещению  2Сh  в
         PSP.  Указатель используется в качестве адреса сегмента с нулевым
         смещением, указывающим на начало блока. Если этот адрес передает-
         ся  в регистре внешнего сегмента или в регистре данных,  то прог-
         рамма может выполнить поиск строки для нахождения требуемых пара-
         метров.  При  этом  будьте  осторожны,  потому что можно потерять
         адрес PSP.
             Информация, содержащаяся в PSP,  действительна как для файлов
         типа .COM,  так и для файлов типа .EXE,  и любой тип файла  может
         быть использован с функцией загрузки и выполнения программы.

                      Выполнение команд MS-DOS с функцией 4Bh

             Одним из  приложений  функции  загрузки и выполнения является
         загрузка файла COMMAND.COM.  Если принять во внимание,  что  файл
Предыдущая страница Следующая страница
1 ... 40 41 42 43 44 45 46  47 48 49 50 51 52 53 ... 198
Ваша оценка:
Комментарий:
  Подпись:
(Чтобы комментарии всегда подписывались Вашим именем, можете зарегистрироваться в Клубе читателей)
  Сайт:
 

Реклама