Программирование со смешанными моделями и модификаторы адресации
Borland C ++ вводит восемь новых ключевых слов, отсутствующих в языке Си стандарта ANSI (near, far, huge, _cs, _ds, _es, _ss и _seg), которые с некоторыми ограничениями и предупреждениями могут использоваться в качестве модификаторов для указателей
(и в некоторых случаях, для функций).
В Borland C++ при помощи ключевых слов near, far или huge вы
можете модифицировать объявления функций и указателей. Указатели
данных near, far и huge рассматривались в выше. Объекты far объявляются при помощи ключевого слова far. Функции near запускаются
при помощи ближних вызовов (near), а выход из них происходит с
использованием ближних команд возврата. Аналогичным образом,
функции far вызываются дальними вызовами (far) и выполняют дальний (far) возврат. Функции huge похожи на функции far, за исключением того, что функции huge устанавливают регистр DS в новое значение, тогда как функции far не изменяют значения этого регистра.
Существует также четыре специальных ближних (near) указателя
данных: __cs, __ds, __es и __ss. Имеются 16-битовые указатели,
конкретно связанные с соответствующими сегментными регистрами.
Например, если вы объявите указатель следующим образом:
char _ss *p;
то p будет содержать 16-битовое смещение в сегмент стека.
Функции и указатели в данной программе по умолчанию бывают
ближними или дальними, в зависимости от выбранной модели памяти.
Если функция или указатель являются ближними, то они автоматически связываются с регистром CS или DS.
В следующей таблице показано, как это происходит. Отметим,
что размер указателя соответствует предельному размеру памяти,
равному 64К (ближний, в пределах сегмента) или 1 Мб (дальний, содержит собственный адрес сегмента).