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




Сегментация памяти

 

Перед тем как изучать регистры и команды процессора 8086, необходимо по­нять, как он адресует память, используя системные Сегменты и смещения — терми­ны, часто вызывающие недоразумения.

Используя для представления значения адреса 20 бит, 8086-й процессор может иметь прямой доступ к 1 Мбайт памяти. DOS, ROM BIOS и другие находящиеся в памяти программы уже занимают определенное место памяти персонального ком­пьютера, поэтому остальные программы запускаются, используя меньшее про­странство памяти — до 640 Кбайт.

Независимо от того, сколько памяти может адресовать процессор или сколько микросхем памяти установлено в компьютере, наименьшим блоком памяти является 8-битовый байт. Как отмечалось ранее, каждый байт имеет свое уникальное местоположение, называемое физическим адресом, по которому программы могут читать и записывать информацию. Очевидно, что для адресации больших объемов памяти необходимо большее число бит под физиче­ские адреса. Если в вашем компьютере 64 Кбайт памяти, тогда для задания адреса любого байта достаточно 16 бит, с помощью которых представляются значения от 0 до 65535 (216-1), или округленно — 64 Кбайт. Для адре­сации 1 Мбайт памяти персонального компьютера требуется как минимум 20 бит (220-1 равно 1048575, или, в шестнадцатеричном представлении, FFFFF). Проблема состоит в том, что 8086 процессор использует только 16-битовые регистры. Тогда каким образом процессор 8086 может иметь доступ ко всему мегабайту памяти в обычном персональном компьютере?

Ответом является сегментация памяти — метод, используемый процессором 8086 для разделения большого ад­ресного пространства памяти на логические 64 Кбайт фрагменты. С помощью этого метода адрес конкретного байта может быть выражен двумя значениями: адресом фрагмента (сегмента) и 16-битовым смещением от начала сегмента.

Эта комбинация значений сегмента и смещения называется логическим адресом. Первый байт сегмента имеет смещение 0000, второй — 0001, третий — 0002 и т.д., независимо от того, где сегмент физически начинается в памя­ти. Каждая точка памяти имеет как физический адрес, так и логический адрес, выраженный через смещение от начала границы сегмента. С помощью сегментации процессор 8086 может эффективно адресовать до 1 Мбайт памяти, даже используя относительно небольшие 16-битовые регистры. Кроме того, сегментация позволяет легко перемещать программы в новые физические облас­ти памяти, изменяя только базовый адрес сегмента. При этом не требуется изменять значения смещений внутри сегмента, что позволяет перемещаемым программам исполняться одинаково в разных местах памяти.


 

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

 

Для определения начал сегментов памяти процессор 8086 использует четыре 16-битовых сегментных регистра. Для создания 20-битового физического адреса процессор объединяет значение одного сегментного регистра с 16-битовым смещением (логическим адресом). Это делается путем умножения сегментного значения на 16 (сдвиг влево на 4 бита) и прибавлением к результату смещения (умножение на 16 эквивалентно четырехкратному сдвигу битов влево). Исходя из этого получается, что границы сегментов располагаются через каждые 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 ука­зывают на одну и ту же физическую область памяти. Если повторить процесс преобразования этих логических ад­ресов в физические в десятичной системе счисления, то при вычислении (0000x16)+16 и (0001 х 16)+0 получается один и тот же результат — 16.

Замечание

Обычно логические адреса сегмента и смещения записываются с помощью двух четырехзначных шестнадцатеричных чи­сел, разделенных двоеточием, например: 0140:001А и F000:0010. При виде подобных значении вы должны понимать, что они являются шестнадцатеричными. Это легко забыть при работе с адресами вида 0100:1024 и 0000:0010, для которых не всегда очевидно, что они представлены в шестнадцатеричной системе. При обозначении шестнадцатеричного числа в программах на языке ассемблера первый символ должен быть десятичной цифрой (от 0 до 9), а после последнего символа приписывается латинская буква "h", например: 137h,502h, 2h, 0BF8Ch, 0Ah.




Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2022-10-31 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: