Турбо Паскаль работает в операционной системе MS DOS, впервые реализованной на процессорах малой производительности 8086, 8088. В этих процессорах максимальный объем оперативной памяти равен 1 Мбайт. Тогда адресное пространство такой памяти - это последовательность байтов с адресами 00000 .. FFFFF (FFFFF = 100000 -1 = - 1 = -1). Следовательно, для представления полного физического адреса здесь требуется 20 бит.
Обработка информации в процессоре, в том числе и адресация операндов, выполняется на регистрах, размер которых составляет 16 бит. Поскольку полный физический адрес не может быть записан на таком регистре, то адрес операнда размещается на двух регистрах и записывается в программе в виде пары чисел типа word, разделенных двоеточием:
СЕГМЕНТ : СМЕЩЕНИЕ
Сегмент - это блок памяти размером 64 Кбайта. Адрес сегмента может быть произвольным в пределах емкости основной памяти. Смещение - это номер байта по отношению к началу сегмента. Смещение изменяется в пределах $0000 .. $FFFF = 0 .. 65535.
Именно смещение определяет максимальный размер сегмента, а, следовательно, и максимальный размер переменной в Паскаль-программе.
Начальный адрес сегмента всегда кратен 16. Поскольку при этом последние четыре двоичные цифры равны нулю, то эти цифры в сегменте не указываются. Тогда абсолютный адрес байта
Adr = 16 Seg + Ofs,
где Seg - адрес сегмента; Ofs - смещение (offset - смещение, уступ).
Сегменты могут перекрываться. Вследствие этого адрес одного и того же байта может быть указан различными способами.
Пример. a) $0020:$0010; Adr = $00210
б) $001F:$0020; Adr = $00210.
Фрагмент памяти размером 16 байт называют параграфом. Поэтому можно сказать, что сегмент адресует память с точностью до параграфа, а смещение - с точностью до байта.
В программе адреса операндов, как правило, нормализованы. Нормализованным считают такой адрес, в котором смещение находится в пределах 0 .. 15 ($0000 .. $000F), т.е. в пределах одного параграфа. В этом случае
Seg = Adr div16; Ofs = Adr mod 16.
Размер сегмента определяет максимальный объем памяти, выделяемой для какого-либо объекта программы (сегмент данных, сегмент стека, программный модуль, динамическая переменная). Этот размер равен 65520 байт (64 Кбайт – 16 байт).
Примечание. Адресное пространство размером 1 Мбайт - это так называемая стандартная память. В современных компьютерах размер оперативной памяти значительно превышает 1 Мбайт. Тем не менее Турбо Паскаль вне зависимости от реального размера памяти компьютера может использовать лишь стандартную память (работу с полным объемом памяти может обеспечивать Borland Pascal или программная система Delphi, ориентированные на операционную систему Windows).