Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
BorlandPascal.doc
Скачиваний:
54
Добавлен:
17.03.2015
Размер:
2.83 Mб
Скачать

Разработка прикладных программ dos защищенного режима

Написание прикладной программы защищенного режима не предс-

тавляет собой сложной задачи. Вам не нужно беспокоиться о селек-

торах и адресах памяти. Операционная система с расширениями

Borland все делает за вас. Фактически, большинство ваших программ

реального режима может прекрасно работать в защищенном режиме. В

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

защищенным режимом, о которых вы должны знать при разработке

прикладной программы защищенного режима.

Надежное программирование в защищенном режиме

Существует несколько приемов, используемых обычно в програм-

мах реального режима, которые в программах защищенного режима бу-

дут приводить к общему нарушению защиты (сбой GP). Borland Pascal

при сбое GP выводит ошибку этапа выполнения 216. Сбой GP происхо-

дит, когда вы пытаетесь получить доступ к памяти, к которой ваша

прикладная программа обращаться не может. Операционная система

останавливает прикладную программу, но сбоя системы не происхо-

дит. Хотя сбои GP и прекращают работу вашей программы, система

"защищена" от сбоя. К сбою GP приводит следующее:

* загрузка в сегментные регистры недопустимых значений;

* обращение к памяти вне границы сегмента;

* запись в сегмент кода;

* разыменование указателей nil.

Примечание: Сбои по нарушению защиты предохраняют вашу

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

Загрузка в сегментные регистры недопустимых значений

Когда процессор работает в защищенном режиме, сегментные ре-

гистры (CS, DS, ES и SS) могут содержать только селекторы. Пос-

кольку селекторы являются индексами в таблице дескрипторов, они

не имеют физического отношения к памяти, на которую ссылается.

Если вы пытаетесь загрузить в сегментный регистр произвольное

значение, то возможно получите сбой GP, поскольку это значение

может не представлять допустимого дескриптора.

Функция Ptr и массивы Mem

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

загрузки сегментного регистра. Если вы строите указатели с по-

мощью стандартной функции Ptr, то нужно обеспечить, чтобы сег-

ментная часть указателя была допустимым селектором. Аналогично,

при работе с массивами Mem, MemW и MemL вы вместо физических ад-

ресов должны использоваться селекторы. Например, при доступе к

рабочей области ROM BIOS (сегмент $0040) или к областям видеопа-

мяти (сегменты $A000, $B000 и $B800) следует использовать вместо

абсолютных значений переменные SegXXXX. (Переменные SegXXXX опи-

сываются ниже.)

Абсолютные переменные

В защищенном режиме вы не можете задавать абсолютный адрес

переменной. Любой исходных код, где сегмент и смещение задаются в

операторе absolute, нужно переписать. Например, вам может потре-

боваться построить указатель, используя переменные SegXXXX.

Соседние файлы в предмете Программирование на Pascal