Кб. Физический адрес памяти (поступающий на шину адреса разрядностью
20 бит) состоит из двух 16-битных частей – адреса сегмента Seg и исполни-
тельного адреса ЕА (executive address), суммируемых со смещением на 4 бита
(рис. 4). Сдвиг адреса сегмента на 4 бита влево эквивалентен его умножению
на 16, следовательно, физический адрес PA=16 x Seg + ЕА. Адрес сегмента
Seg является содержимым одного из регистров CS, DS, SS или ES. Исполни-
тельный адрес, также называемый эффективным адресом, может быть кон-
стантой, содержимым регистров, ячейки памяти или суммой нескольких ве-
личин (например, двух регистров и константы), но эта сумма является 16-
разрядной (перенос игнорируется). Таким образом, физический адрес нико-
гда не перейдет границу 64-килобайтного сегмента, на начало которого ука-
зывает используемый сегментный указатель. С одной стороны, это свойство
обеспечивает некоторую защиту сегментов друг от друга (хотя некорректно
написанная программа может легко перезагрузить указатель сегмента и «на-
ехать» на данные другого сегмента), но с другой ~ сегментация памяти явля-
ется существенным неудобством для написания больших программных мо-
дулей. В 1976 году ограничение в 64 Кб памяти кода для одного модуля при
общем объеме 1 Мб, конечно же, не казалось пугающим, но «бум» развития
программного обеспечения PC в целях совместимости потребовал сохране-
ния сегментации и в последующих моделях процессоров. С сегментацией
связаны понятия ближнего и дальнего адреса (вызова, перехода). При ближ-
нем (Near) вызове доступ к требуемой ячейке осуществляется только указа-
нием смещения, а адрес сегмента определяется текущим содержимым соот-
ветствующего регистра сегмента. Разновидностью ближнего перехода, по ко-
торому доступен любой адрес сегмента, является короткий (Short) переход, в
котором смещение указывается не двумя, а одним байтом, что используется в
командах условных переходов. Короткий переход позволяет достигать сме-
щения -128...+127 байт относительно текущего адреса в пределах указанного
сегмента. При дальнем (Far) обращении указывается полный адрес, содер-
жащий 16-байт-ное значение сегмента (загружаемое в соответствующий сег-
ментный регистр) и 16-байтное смещение. Естественно, что дальние обраще-
ния выполняются медленнее (хотя бы из-за потребности пересылок большего
количества байт адреса).
Процессор может обращаться как к одному байту памяти, так и слову,
состоящему из двух байт, или двойному слову (4 байта). При размещении
слова в памяти байт с адресом, соответствующим адресу слова, содержит его
младшую часть (Low), следующий байт содержит старшую часть (High).
Слово может размещаться в памяти как по четному (Even), так и по нечетно-
му (Odd) адресу. Двойное слово обычно используется для хранения полного
адреса, и в нем располагается сначала слово смещения (в порядке L, Н), а за-
тем сегмента (в том же порядке). Сегментация памяти и порядок L, Н явля-
ются характерной чертой процессоров Intel.