Основные сведения о программах

03/05/95 02:23pm progr.lek
П.Нортон, Р.Уилтон "IBM PC и PS/2 руководство по программированию" перевод В.Н.Григорьева М "Радио и связь" 1994
Роберт Журден "Спавочник программиста на персональном компьютере фирмы IBM"

Основные сведения о программах.

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

Структура исполняемой программы.

Трансляторы с язуков высокого уровня генерируют исполняемый модуль в следующем формате:

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

Особенности процессора 8086 наложили отпечаток на структуру каждой из представленных частей (возможность адресации сегментами по 64К). Эта особенность привела к возможности иметь несколько сегментов данных, стека и кода. Возможные комбинации объединены в МОДЕЛИ РАСПРЕДЕЛЕНИЯ ПАМЯТИ:

Некоторые компиляторы для языков высокого уровня позволяют указывать требуемую модель. Выбранная модель оказывает влияние на использование сегментных регистров. Рекомендуется для написания небольших программ использование "Малой" модели. Кроме того НЕ рекомендуется создавать неделимые модули размером более одного сегмента.

Обмен данными (Межпрограммный интерфейс)

Обмен данными между программными модулями может быть осуществлен несколькими способами:

1 Через общие области - различные программы могут использовать одну и ту же область памяти для хранения своих данных. Возможности этого метода являются его преимуществами и недостатками одновременно. Например можно рассматривать как преимущество возможность использование одной и той же ячейки памяти как целое число и как набор символов. С другой стороны такая ошибочная ситуация может возникнуть при случайном пропуске компаненты общей области;

2 Через таблицу параметров - в памяти создается область, хранящая информацию о передаваемых данных. Дочерней программе указывается адрес таблицы. Такая таблица может быть создана на этапе трансляции,что сэкономит время во время работы программы;

3 Через стек - информация о параметрах формируется в области стека. По структуре созданная таблица эквивалентна таблице, сформированной в памяти, но позволяет легко организовывать итерационные вычислительные процессы. Недостатками иетода являются дополнительные затраты времени на формирование таблицы, и зависимость доступа к ее элементам от способа передачи управления;

4 Через регистры микропроцессора - обычно этот способ применяется как вспомогательный к вышеназванным, кроме этого через регистры может возвращаться значение функции.

Информация о передаваемом значении может указываться двумя способами:

1 В таблицу может быть занесено само передаваемое значение. В этом случае данные передаются только в одну сторону и их модификация внутри вызванного модуля не вызывает изменения исходного значения. Недостатком этого способа являются большие временные и аппаратные затраты;

2 В таблице может быть указан адрес переменной (ссылка) при этом информация может передаваться в обе стороны.

Кроме перечисленных различий может отличаться порядок помещения параметров в таблици (в порядке перечисления или обратном) и некоторые детали обслуживания передаваемой информации (порядок освобождения памяти от использованных данных).

Управление программами.

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

Манипуляции удобней проводить с файлами формата "COM". Операционная система MS DOS (в реальном режиме) выделяет память блоками, кратными параграфу (16 байт). В начале области распологается 16-байтный управляющий блок, первые пять байт которого имеют следующее назначение:

DOS обращается к блокам поцепочке. Адрес первого блока хранится во внутренней переменной. Нарушение структуры управляющего блока приводит к разрушению системы.
Распределение памяти усуществляется через прерывание 21h:

Все перечисленные функции используют 16-битный адрес начала блока памяти (значение сегмента). Если возникает ошибка, то формируется ее код в регистре AX. При загрузке программы ей отводится вся доступная память (или блок максимального размера). Если необходимо произвести манипуляции с памятью, то вначале следует сократить размер памяти, отведенной для загруженной программы, а затем выделить блок требуемого размера. В отведенное пространство может быть загружена дополнительная часть родительской программы или данные к ней. Перед окончанием работы программа должна освободить все отведенные ею блоки. Помимо этого программа может загрузить и выполнить любую другую программу как функцию DOS через службу 4Bh прерывания 21h.


Stay-at-home