path: Главная\Статьи\Директивы компилятора\Переключатели от $A до $G


язык:Turbo Pascal

$A: Выравнивание данных

Переключает между байтовым выравниванием и выравниванием по словам переменных и типизированных констант.

 Синтаксис:             {$A+} или {$A-}
 Значение по умолчанию: {$A+}
 Тип:                   Глобальная
 Команда меню:          Options|Compiler|Align Data

Замечания:

Выравнивание по словам не дает эффекта на процессорах 8088.

На всех процессорах 80x86 выравнивание по словам задает более быстрое выполнение.
::: К данным размера "слово" (2 байта) по четным адресам можно обратиться за один цикл памяти.
::: К данным на нечетных адресах можно обратиться за два цикла памяти.

В состоянии $A+, все переменные и типизированные константы размером больше 1-го байта располагаются по четным адресам. При необходимости, между переменными могут быть вставлены неиспользуемые байты, для достижения выравнивания по словам. Режим $A+ не влияет на переменные размером 1 байт, поля записей или элементы массивов. Поле в записи будет выровнено по словам только в том случае, если полный размер всех полей до него является четным. Чтобы каждый элемент массива был выровнен по словам, размер элементов массива должен быть четным.

В состоянии $A-, выравнивание не происходит. Переменные и типизированные константы просто помещаются в следующий доступный адрес памяти, независимо от их размера.

ВНИМАНИЕ: Независимо от состояния $A, каждый раздел описания глобальных переменных и констант всегда начинается на границе слов. Компилятор всегда хранит указатель вершины стека (SP) выровненным по словам, рапределяя дополнительный неиспользуемый байт в записи активации процедуры если это требуется.


$B: Булева оценка

Переключает между двумя различными моделями генерации объектного кода для булевых операторов AND и OR.

 Синтаксис:             {$B+} или {$B-}
 Значение по умолчанию: {$B-}
 Тип:                   Локальная
 Команда меню:          Options|Compiler|Boolean Evaluation

В состоянии $B+, компилятор генерирует код для полной булевой оценки выражения. Это означает, что каждый операнд булева выражения, созданного при помощи операторов AND и OR, будет оценен, даже в том случае, если результат всего выражения уже известен.

В состоянии $B-, компилятор генерирует код с короткой схемой оценки булевого выражения. Это означает, что оценка выражения прекращается, как только результат всего выражения становится очевидным.


$D: Отладочная информация

Включает или выключает генерацию отладочной информации.

 Синтаксис:             {$D+} или {$D-}
 Значение по умолчанию: {$D+}
 Тип:                   Глобальная
 Команда меню:          Options|Compiler|Debug Information

Замечания:

Отладочная информация состоит из таблицы номеров строк для каждой процедуры. В таблице записаны соответствия адресов объектного кода номерам строк исходного текста.

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

Если в модуле или программе, компилируемых в состоянии {$D+}, происходит ошибка времени выполнения, Turbo Pascal автоматически переходит к оператору, который вызвал ошибку. Смотри Search|Find Error в помощи для информации относительно автоматического поиска ошибок.

Переключатель Options|Linker|Map File производит информацию для данного модуля только в том случае, если он компилировался в состоянии $D+.

Для модулей, отладочная информация записывается в TPW, TPP или TPU файл вместе с объектным кодом.

Отладочная информация увеличивает размер TPU, TPW и TPP файлов и занимает дополнительное место в памяти при компиляции программ, использующих модуль, но она не влияет на размер или быстродействие самой программы.

Переключатель Debug Information обычно используется вместе с переключателем Local Symbols.

ВНИМАНИЕ: Если вы хотите использовать для отладки вашей программы Turbo Debugger for Windows, включите опцию Options|Linker|Debug Info in EXE или установите следующие опции:

 Compile|Destination -> Disk
 Options|Debugger, Debuuging -> Standalone

$E: Эмуляция 80x87

Включает или выключает компоновку библиотеки программной эмуляции 80x87 в EXE файл.

 Синтаксис:             {$E+} или {$E-}
 Значение по умолчанию: {$E+}
 Тип:                   Глобальная
 Команда меню:          Options|Compiler|[X] Emulation

Режим: Real, Protected

Директива $E включает или выключает компоновку библиотеки эмуляции математического сопроцессора 80x87, при его отсутстви.

Состояние {$N+, E+}: Когда вы компилируете программу в состоянии {$N+, E+}, компилятор компонует программу с полным эмулятором 80x87. Возникающий в результате EXE файл может быть выполнен на любой машине, независимо от того, имеет ли она сопроцессор или нет. Если сопроцессор присутствует, то программа использует его, иначе, сопроцессор эмулируется ссответствующей библиотекой поддержки.

Состояние {$N+, E-}: В состоянии {$N+, E-}, компилятор компонует программу с меньшей библиотекой поддержки чисел с плавающей точкой, которая может спользоваться только в том случае, если во время выполнения программы присутствует сопроцессор.

Состояние переключателя {$E} не имеет никакого значения, если он используется в модуле. Этот переключатель применяется только при компиляции программ.

Состояние {$N-, E+} Если программа компилируется в состоянии {$N-}, и все модули, используемые программой компилировались в состоянии {$N-}, то библиотека поддержки 80x87 не требуется, и состояние переключателя {$E} игнорируется.


$F: Дальний тип вызова

Задает модель вызова, используемую для последовательно компилируемых процедур и функций.

 Синтаксис:             {$F+} или {$F-}
 Значение по умолчанию: {$F-}
 Тип:                   Локальная
 Команда меню:          Options|Compiler|Force Far Calls

Состояние $F+: Процедуры и функции, компилируемые в состоянии $F+ всегда используют модель дальнего (FAR) вызова.

Состояние $F-: В состоянии $F-, компилятор автоматически выбирает соответствующую модель:
::: FAR, если процедура или функция объявлена в разделе интерфейса модуля.
::: NEAR, если процедура или функция объявлена где-либо еще.

ВНИМАНИЕ: Для программ, использующих оверлеи, поставьте директиву $F+ в начале программы и каждого модуля, чтобы удовлетворить требованию дальнего вызова. Для программ, использующих процедурные переменные, все эти процедуры должны использовать далекую (FAR) модель кода.

Procedure FarProc; Far; Begin
 ...
End;

$G: Генерация инструкций 80x286

Включает или выключает генерацию объектного кода для 286-х процессоров.

 Синтаксис:             {$G+} или {$G-}
 Значение по умолчанию: {$G-} для реального режима
                        {$G+} для защищенного режима и среды Windows
 Тип:                   Глобальная
 Команда меню:          Options|Compiler|286 Instructions

В состоянии $G- генерируются только основные инструкции процессора 8086. Программы, компилируемые в этом состоянии можно выполнять на любом процессоре семейства 80x86.

В состоянии $G+, компилятор использует дополнительные команды процессора 80286 для улучшений генерации объектного кода. Программы, компилируемые в этом состоянии нельзя выполнять на процессорах 8088 и 8086.

Дополнительные команды, используемые в режиме $G+ включают:
:: ENTER
:: LEAVE
:: PUSH непосредственное значение
:: Расширенная IMUL
:: Расширенная SHL
:: Расширенная SHR

ВНИМАНИЕ: (Для Windows), если программа или библиотека или любой модуль, используемый программой или библиотекой, компилируется в состоянии {$G+}, то в заголовке возникающего в результате EXE или DLL будет установлен флаг защищенного режима, и Windows не будет выполнять его в реальном режиме.


Rambler's Top100 Rambler's Top100 MAFIA's Top100