Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ЛЕКЦИЯ1.DOC
Скачиваний:
1
Добавлен:
22.07.2019
Размер:
107.52 Кб
Скачать

Параграфы, сегменты и смещения

Для определения начал сегментов памяти процессор 8086 использует четыре 16-битовьк сегментных регистра. Для создания 20-битового физического адреса процессор объединяет значение одного сегментного регистра с 16-битовым смещением (логическим адресом). Это делается путем умножения сегментного значения на 16 (сдвиг влево на 4 бита) и прибавлением к результату смещения (умножение на 16 эквивалентно четырехкратному сдвигу битов влево, как вы помните из главы 3). Исходя из этого получается, что границы сегментов располагаются через каждые 16 байт физических адресов. Каждый из этих 16-байтовых фрагментов называется параграфом. Простые вычисления показывают, что максимально может существовать 65536 параграфов и, следовательно, такое же число границ сегментов в одномегабайтовом адресном пространстве процессора 8086 (1048576/16). (Заметим, что это также равняется числу значений, которые могут быть выражены с помощью одного 16-битового сегментного ре­гистра.) Кроме того, запомните несколько важных сведений о сегментах.

• Сегменты физически не выделены в памяти, что является общим заблуждением. Сегменты — это логические окна, через которые программы просматривают области памяти удобными, в 64 Кбайт порциями. ^

• Начальное положение сегмента (т.е. логический адрес) определяется вами и может иметь любое значение от | 0000 до FFFF в шестнадцатеричном представлении. Каждое логическое значение сегмента (0,'1, 2,..., 65535), соответствует физической границе параграфа (0,16, 32,..., 1048560).

• Размеры сегментов могут изменяться от 16 байт до 64 Кбайт (65536 байт). Действительный размер сегмента определяется вами и вашей программой.

• Сегменты не обязательно располагаются физически в памяти один за другим, хотя так бывает достаточно часто.

• Сегменты могут перекрываться один другим; поэтому один и тот же байт в памяти может иметь различные логические адреса, определяемые разными, но при этом эквивалентными парами сегмент-смещение. Но, не­смотря на это, каждый байт имеет только единственный 20-битовый физический адрес. Почти всех, кто впервые знакомится с сегментацией памяти, этот последний пункт приводит в замешательство. Две разные пары сегмент-смещение могут (и так часто бывает) указывать в памяти на один и тот же байт. Если вы вспомните, как процессор создает 20-битовые физические адреса — умножением значения сегмента на 16 и прибав­лением смещения, вы увидите, что шестнадцатеричные значения пар сегмент-смещение 0000:0010 и 0001:0000 ука­зывают на одну и ту же физическую область памяти. Если повторить процесс преобразования этих логических ад­ресов в физические в десятичной системе счисления, то при вычислении (0000х16)+1б и (0001х16)+0 получается один и тот же результат –16.